目录

一、当前环境

二、问题背景

三、报错分析

四、解决问题


一、当前环境

CentOS 7.3

OpenSSH_7.4p1 (如果低于4.8p1,需要自行升级安装)

sftp group组 sftpusers

sftpadmin用户隶属于sftpusers组

sftp账号 testuser

二、问题背景

出于安全考虑sftp服务器上root账号需要禁用SSH远程连接,想使用sftpadmin账号通过脚本自动下载所有sftp账号home目录upload文件夹下的文件到本地保存并从服务器上删除。

因为当前sftpadmin账号没有删除其他账号home目录下upload文件夹内文件的权限,所以将所有sftp账号home目录下的upload文件夹权限改成了775,希望实现下载文件保存后并删除。批量更改后,发现所有账号都无法通过winscp软件连接到sftp服务器。

三、报错分析

连接不上,登录服务器直接查看/var/log/secure 里面的日志

tail /var/log/secure -n 20  # 可以只查看最近20条记录
Oct 26 18:37:11 centos-machine sshd[24928]: pam_unix(sshd:session): session opened for user TEST2022 by (uid=0)
Oct 26 18:37:12 centos-machine sshd[24928]: fatal: bad ownership or modes for chroot directory component "/" [postauth]
Oct 26 18:37:12 centos-machine sshd[24928]: pam_unix(sshd:session): session closed for user TEST2022

可能导致的原因:错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chroot directory XXXXXX” 的内容。

目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限

如果不能遵循以上 2 点,即使是该目录仅属于某个用户,也可能会影响到所有的 SFTP 用户。

四、解决问题

所以遵循以上两个原则

ChrootDirectory 这里是 /data/sftp/testuser

1、我们将 /data/sftp/testuser的所有者设置为root,所有组设置为sftpusers

chown root:sftpusers /data/sftp/testuser

2、我们讲/opt/sftp/testuser的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限

chmod 755 /data/sftp/testuser

设置sftp用户登入后可写入的目录  在upload文件夹里上传文件

这里目录是 /data/sftp/testuser/upload

1、我们将 /data/sftp/testuser/upload的所有者设置为testuser,所有组设置为sftpusers

chown testuser:sftpusers /data/sftp/testuser/upload

2、我们将/opt/sftp/testuser的权限设置为755,所有者testuser有写入权限,而所有组sftpusers无写入权限

chmod 755 /data/sftp/testuser/upload

完成后重启sshd服务

systemctl restart sshd

到这里问题解决,testuser(包含其他账号)已经可以通过sftp客户端登录并可以上传文件到upload目录。