Linux实现权限分离方法
- Linux禁止ssh访问只允许sftp和ftp访问指定目录
需求:需要给A开设一个只用于sftp上传的账号,并且只能在指定目录下活动。
1、查看 openssh的版本,如果低于4.8p1,需要自行升级安装
# ssh -V (查看openssh版本)
2、创建组
# groupadd sftp(组名)
3、创建一个sftp用户,名为guest
# useradd -g sftp -s /bin/false guest (/bin/false表示不能通过ssh的方式登录)
4、设置密码
# passwd guest 输入两次密码,回车即可。
5、创建用户活动的根目录
# mkdir -p /1001/sftp
# usermod -d /1001/sftp guest
6、配置sshd_config
# vim /etc/ssh/sshd_config
找到如下这行,并注释掉
Subsystem sftp /usr/libexec/openssh/sftp-server
添加如下几行:
Subsystem sftp internal-sftp # 指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp # 匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割
ChrootDirectory /1001/sftp/ # 用chroot将用户的根目录指定到 /1001/sftp/, 可设为"/",代表根目录。
ForceCommand internal-sftp # 指定sftp命令
AllowTcpForwarding no # 允许用户能使用端口转发
X11Forwarding no # 允许用户能使用端口转发
:wq保存并退出
7、 设定Chroot目录权限
# chown root:sftp /1001/sftp
# chmod 755 /1001/sftp
*:权限必须为755
8、 建立SFTP用户登入后可写入的目录
照上面设置后,在重启sshd服务后,用户 guest 已经可以登录,但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供 guest 上传文件。这个目录所有者为 guest,所有组为sftp,只有所有者有读写权限。
# mkdir /1001/sftp/1
# chown guest:sftp /1001/sftp/1
# chmod 700 /1001/sftp/1
*: 权限设置为700,代表文件所有者具有读写权限。
9、 修改/etc/selinux/config文件中的SELINUX="" 为 disabled或者
# setenforce 0
10、重启sshd服务
# systemctl restart sshd
测试ssh能否登录:
测试sftp能否登录:
sftp guest@ip