sftp是使用ssh协议安全加密的文件传输协议,ftp在很多时候都是使用的明文传输,相对来说容易被抓包,存在安全隐患。
1. 使用sftp代替ftp来做文件存储,锁定目录,不允许用户切换到未授权的目录
2. 不允许sftp用户ssh登陆到服务器执行操作
3. sftp用户使用密钥登陆
- # 创建一个sftpuser用户组
-
- groupadd sftpuser
-
- # 查看用户组
-
- groups sftpuser
-
- # 此目录及上级目录的所有者必须为root,权限不高于755,此目录的组最好设定为sftpuser
-
- mkdir /data/sftpuser
-
- chown -R root:sftpuser /data/sftpuser
-
- chmod -R 0755 /data/sftpuser
- #备份配置文件
- cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
-
- #修改端口为2222
- sed -i 's/#Port 22$/Port 2222/' /etc/ssh/sshd_config
-
- # 修改如下的配置,没有的就添加
- vim /etc/ssh/sshd_config
-
- # 注释这行
- # Subsystem sftp /usr/libexec/openssh/sftp-server
- Protocol 2
- # 密码认证方式
- PasswordAuthentication yes
- # 密钥认证方式
- PubkeyAuthentication yes
- RSAAuthentication yes
- Subsystem sftp internal-sftp -l info -f auth
- Match group sftpuser
- Chrootdirectory /data/sftpuser/%u
- Allowtcpforwarding no
- X11Forwarding no
- Forcecommand internal-sftp -l info -f auth
# 凡是在用户组sftpuser里的用户,都可以使用sftp服务;使用sftp服务连接上之后,可访问目录为/data/sftpuser/username
# 举例说明
# test是一个sftpuser组的用户,它通过sftp连接服务器上之后,只能看到/data/sftpuser/test目录下的内容
# test2也是一个sftpuser组的用户,它通过sftp连接服务器之后,只能看到/data/sftpuser/test2目录下的内容
test目录的所有者必须是root,组最好设定为sftp,权限不高于755
- # 创建一个目录并授权
- mkdir /data/sftpuser/test
- chmod 0755 /data/sftpuser/test
- chown root:sftpuser /data/sftpuser/test
-
- # 添加用户,参数-s /sbin/nologin禁止用户通过命令行登录
- useradd -g sftpuser -s /sbin/nologin test
- # 在用户家目录下创建.ssh目录
- mkdir /home/test/.ssh
-
- # root用户生成公钥 私钥 直接回车即可
- ssh-keygen -t rsa
-
- # 拷贝公钥到用户家目录下
- cp /root/.ssh/id_rsa.pub /home/test/.ssh/authorized_keys
-
- # 给目录授权
- chown -R test.sftpuser /home/test
- # 创建目录upload
- mkdir /data/sftpuser/test/upload
-
- # 给目录授权
- chown -R test:sftpuser /data/sftpuser/test/upload
注意:sftp服务的根目录的所有者必须是root,权限不能超过755(上级目录也必须遵循此规则),sftp的用户目录所有者也必须是root,且最高权限不能超过755
- # 重启sshd服务
-
- systemctl restart sshd
-
- # sftp命令行本机测试,用私钥免密登陆
-
- sftp -oPort=2222 -oIdentityFile=~/.ssh/id_rsa test@192.168.100.100
-
- # 在其他机器上使用私钥登陆,需要将私钥文件下载,权限600