Rootop 服务器运维与web架构

sftp 限制目录及禁止ssh登录

需求:通过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

作者:Venus

服务器运维与性能优化

评论已关闭。