需求:通过sftp拉取服务器某个目录下的文件,并禁止此用户切换目录及ssh登录。
# 创建目录,将用户锁定到此目录下。 [root@localhost ~]# mkdir -p /data/www/sftp # ssh配置文件 [root@localhost ~]# cat /etc/ssh/sshd_config|grep -vE "^#|^$" Include /etc/ssh/sshd_config.d/*.conf AuthorizedKeysFile .ssh/authorized_keys ### 最后追加下面配置 ### Subsystem sftp internal-sftp Match User sftp ChrootDirectory /data/www/sftp AllowTcpForwarding no X11Forwarding no
注意把原先的 Subsystem 开头那行注释掉。
如果想配置多个账号,就再添加一段配置。
Match User user2 ChrootDirectory /data/www/user2 AllowTcpForwarding no X11Forwarding no
Match User为要匹配的用户,也就就是针对哪个用户做限制。一定要设置,否则root账号就无法ssh登录系统了。
这里创建一个用户为sftp并设置shell为nologin
[root@localhost ~]# useradd -s /sbin/nologin sftp
这样就禁止了用户通过ssh登录服务器,但sftp可以用。
注意这个路径 /data/www/sftp 属主属组必须为root,父级目录也一样,直到/目录。
否则secure日志会报下面错误
fatal: bad ownership or modes for chroot directory component "/data/www/sftp" [postauth]
在此目录下创建一个文件夹,使php运行用户有权限写入文件。
mkdir daily_critical_file_reports chown www-data:www-data daily_critical_file_reports
这样sftp用户就被锁定在 /data/www/sftp 目录下,且无法创建、删除文件夹及文件。
原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/5330.html