sftp = ssh+ftp(安全文件传输协议)
由于ftp是明文传输的,没有安全性。sftp基于ssh,传输内容是加密过的,较为安全。
- 公司需要对接DJI和ASUS两个客户之间文件交付,如SOP,BOM等信息,其实也可以用VX和Q进行传输,但安全性不好,一般大企业都会有对外的SFTP
- 需要建立的账号有读写和读两个区分
- SFTP使用账号不能登入服务器
- 建立SFTP日志功能
| 系统 | IP |
|---|---|
| Centos7.5 | 88.88.88.254/24 |
| 专案 | 用户名 | 权限 |
|---|---|---|
| DJI | dji1 | 读写 |
| DJI | dji2 | 读 |
| ASUS | asus1 | 读写 |
| ASUS | asus1 | 读 |
- 建立一个DJI客户和ASUS客户的sftp文件夹
cd / mkdir -p SFTP-DJI/DJI mkdir -p SFTP-ASUS/ASUS
-p: 创建SFTP-DJI目录以及SFTP-DJI目录下面的DJI文件夹。允许创建目录及子目录
- 权限文件夹755权限
chmod 755 SFTP-DJI chmod 755 SFTP-ASUS
- 创建DJI专案和ASUS专案的只读和读写组(把用户加入到组就不需要单独用户给权限)
groupadd DJI-RO groupadd DJI-RW groupadd ASUS-RO groupadd ASUS-RW
RO:代表只读
RW:代表读写
- 授权组对文件夹的权限
cd /SFTP-DJI setfacl -m g:DJI-RO:rx DJI setfacl -m g:DJI-RW:rwx DJI cd /SFTP-ASUS setfacl -m g:ASUS-RO:rx ASUS setfacl -m g:ASUS-RW:rwx ASUS
解释下这个的意思“g:DJI-RO:rx DJI”
g:要设置的为组
DJI-RO:组
rx:读执行权限
setfacl命令
可以用来细分linux下的文件权限。chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限。换句话说,setfacl可以更精确的控制权限的分配。比如:让某一个用户对某一个文件具有某种权限。
setfacl 参数 -m:设置后续acl参数 -x:删除后续acl参数 -b:删除全部的acl参数 -k:删除默认的acl参数 -R:递归设置acl,包括子目录 -d:设置默认acl
查看两个文件夹的权限
[root@SFTP SFTP-ASUS]# cd /SFTP-DJI/ [root@SFTP SFTP-DJI]# ll 总用量 0 drwxrwxr-x+ 2 root root 6 12月 28 13:37 DJI [root@SFTP SFTP-DJI]# getfacl DJI/ # file: DJI/ # owner: root # group: root user::rwx group::r-x group:DJI-RO:r-x #DJI-RO读权限 group:DJI-RW:rwx #DJI-RW读写权限 mask::rwx other::r-x [root@SFTP SFTP-DJI]#
- 建立DJI和ASUS的SFTP账号,指定到相对应的组,禁止用户ssh登入服务器本身并修改密码
useradd -g DJI-RW -s /sbin/nologin -M dji1 useradd -g DJI-RO -s /sbin/nologin -M dji2 useradd -g ASUS-RW -s /sbin/nologin -M asus1 useradd -g ASUS-RO -s /sbin/nologin -M asus2
-g DJI-RW:加入DJI-RW用户组
-s /sbin/nologin:禁止用户ssh登录
-M:不要自动建立用户的登入目录
[root@SFTP SFTP-DJI]# passwd dji1 #记得修改所有用户密码 更改用户 dji1 的密码 。 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [root@SFTP SFTP-DJI]#
- 修改sshd配置文件
vi /etc/ssh/sshd_config
找到这条注释掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
添加
Subsystem sftp internal-sftp #这行指定使用sftp服务使用系统自带的internal-sftp代码
末尾添加
Match Group DJI-RO,DJI-RW #匹配组,如果要匹配多个组,多个组之间用逗号分割
X11Forwarding no #用户不能使用端口转发
AllowTcpForwarding no #用户不能使用端口转发
ForceCommand internal-sftp #指定运行internal-sftp的命令
ChrootDirectory /SFTP-DJI #只能访问规定的/SFTP-DJI目录
Match Group ASUS-RO,ASUS-RW
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /SFTP-ASUS
重启sshd 如果重启报错可以用sshd -t来查看是那一行代码有误
systemctl restart sshd
- 验证各个账号的功能(这边用WinSCP软件进行连接)
再用Xshell验证账号是否可以连接服务器
vi /etc/ssh/sshd_config 在原来的条目上添加-l INFO -f local5和LogLevel INFO Subsystem sftp internal-sftp -l INFO -f local5 LogLevel INFO
修改rsyslog配置
vi /etc/rsyslog.conf 添加以下内容 auth,authpriv.*,local5.* /var/log/sftp.log
重启服务
systemctl restart sshd systemctl restart rsyslog
查看日志
[root@SFTP ~]# tail /var/log/sftp.log 2021-12-28T17:51:58.129242+08:00 SFTP systemd-logind: Removed session 22. 2021-12-28T17:51:58.793180+08:00 SFTP sshd[18895]: pam_unix(sshd:session): session closed for user asus1 2021-12-28T17:51:58.799773+08:00 SFTP systemd-logind: Removed session 23. 2021-12-28T17:51:59.477644+08:00 SFTP sshd[18902]: pam_unix(sshd:session): session closed for user asus2 2021-12-28T17:51:59.487868+08:00 SFTP systemd-logind: Removed session 24. 2021-12-28T17:52:01.097787+08:00 SFTP sshd[18883]: pam_unix(sshd:session): session closed for user dji1 2021-12-28T17:52:01.111250+08:00 SFTP systemd-logind: Removed session 21. 2021-12-28T17:52:10.029401+08:00 SFTP sshd[18973]: Accepted password for dji1 from 88.88.88.88 port 52557 ssh2 2021-12-28T17:52:10.194591+08:00 SFTP systemd-logind: New session 27 of user dji1. 2021-12-28T17:52:10.197011+08:00 SFTP sshd[18973]: pam_unix(sshd:session): session opened for user dji1 by (uid=0) [root@SFTP ~]#



