目前此功能仅在centos7及redhat7系统下进行过测试。
执行命令:
/usr/libexec/openssh/sftp-server -Q requests
得到结果:
open close read #读权限 write #写权限 lstat fstat setstat fsetstat opendir #打开目录 readdir #读取目录 remove #删除 mkdir #创建文件夹 rmdir #删除文件夹 realpath #查看真实路径 stat rename #重命名 readlink symlink posix-rename statvfs fstatvfs hardlink fsync
例1:
我们举例禁用掉用户的删除和重命名权限
编辑/etc/ssh/sshd_config文件
# For normal SFTP(Without Chroot) add the following configuration in sshd_config file. Subsystem sftp /usr/libexec/openssh/sftp-server -P remove,rmdir,rename,posix-rename # For Chroot SFTP add the following configuration in sshd_config file. Subsystem sftp internal-sftp -P remove,rmdir,rename,posix-rename
那么sftp-server与internal-sftp有什么区别呢?
sftp-server 和 internal-sftp 都是 OpenSSH 的一部分。 sftp-server 是一个独立的二进制文件。 internal-sftp 只是一个配置参数,它告诉 sshd 使用 sshd 内置的 SFTP 服务器代码,而不是像sftp-server运行另一个进程。
与独立的 sftp-server 二进制文件相比, internal-sftp 的诞生时间要晚得多(2008 年的 OpenSSH 4.9p1)。在新版的redhat8及centos8中internal-sftp已经成为默认,保留sftp-server的目的只是为了更好的兼容。
例2:
通过internal-sftp的ChrootDirectory实现限制sftp_users用户组内的用户目录
# For normal SFTP(Without Chroot) add the following configuration in sshd_config file. Subsystem sftp /usr/libexec/openssh/sftp-server -P remove,rmdir,rename,posix-rename # For Chroot SFTP add the following configuration in sshd_config file. Subsystem sftp internal-sftp Match Group sftp_users ChrootDirectory %h ForceCommand internal-sftp -P remove,rmdir,rename,posix-rename X11Forwarding no AllowTcpForwarding no
此处的ChrootDirectory中的 %h代表的是home,即用户的家目录
重启ssh服务使配置生效
service ssh restart
网友留言: