步骤1:修改配置文件,末尾追加代码
/etc/ssh/sshd_config
Subsystem sftp internal-sftp # This section must be placed at the very end of sshd_config Match Group sftponly ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no
含义:所有sftponly组用户将被限制在它们的主目录内,而且只能通过SFTP方式登录
#Subsystem sftp /usr/lib/openssh/sftp-server 对上面这一行加#注释
步骤2:创建sftponly分组
groupadd sftponly
步骤3:创建用户及密码
useradd obama passwd obama
步骤4:设置用户分组
usermod obama -g sftponly
步骤5:禁止SSH shell登录
usermod obama -s /bin/false
步骤6:设置用户主目录
mkdir -p /var/www/obama #-p确保目录名称存在,不存在的就建一个 usermod obama -d /var/www/obama #-d修改用户登入时的目录
步骤7:重启SSH
service ssh restart
注意事项:
8./var/www 和 /var/www/obam 的所有者都要为root
chown root:root /var/www chown root:root /var/www/obama
目录权限设置上要遵循2点:
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,权限最大设置只能是755。
9./var/www/obama分配755权限
chmod 755 /var/www/obama #如果设置为777,750那么账号都无法登录
此时新建用户已经可以登录,并且根目录被限制在了登入目录,目标完成一部分
尝试创建及修改文件,发现没有读写权限,如何解决呢?
10.新建子文件夹html,并将所有者设置为登录用户及其分组
mkdir -p /var/www/obama/html chown obama:sftponly /var/www/obama/html
11.大功告成,后续修改虚拟主机的的web目录到html即可
后记:同样的操作在一台服务器上可以,但是换了一台始终不行
准备从日志入手(/var/log/auth.log),日志文件打开后,再次尝试登陆,却又奇迹般可以了
相关文件:
/etc/passwd:用户的信息库
name:password:UID:GID:GECOS:directory:shell
1. name:用户名
2. password:可以是加密的密码,也可是占位符x;
3. UID:用户的UID
4. GID:用户所属的主组的ID号;(用户初始用户组的ID号)
5. GECOS:注释信息
6. directory:用户的家目录;
7. shell:用户的默认shell,登录时默认shell程序;/etc/group:组的信息库
group_name:passwd:GID:user_list
1. group_name:用户组名称
2. password:用户组密码,同样,密码已经移到/etc/gshadow中去了
3. GID:用户组的ID
4. user_list:此用户组支持的账号名称/etc/gshadow:组密码文件:
netadmin:!::gentoo
1. 用户组名
2. 密码列。开头为!表示无合法密码,所以无用户管理员。
3. 用户组管理员的账号。
4. 该用户组的所属账号(与/etc/group内容相同)哪些用户已经加入到这个用户组/var/log/auth.log:登陆日志
参考资料:
1.https://bensmann.no/restrict-sftp-users-to-home-folder
2.https://ubuntuforums.org/showthread.php?t=1719094
3.http://www.runoob.com/linux/linux-command-manual.html
4.https://askubuntu.com/questions/134425/how-can-i-chroot-sftp-only-ssh-users-into-their-homes