创建sftp用户的专用登录目录,并禁止ssh登录
2018-05-14 20:52阅读:
1、https://www.cnblogs.com/xjnotxj/p/6912471.html
1、https://blog.csdn.net/akeyile2010/article/details/50751834
注意:ubantu重启ssh 的命令是service ssh restart
1、创建新用户
adduser sftpuser1
useradd 和 adduser 的区别
useradd
只会添加一个用户,并没有创建它的主目录,除了添加一个新用户之外什么都没有。这个用户甚至不能登录,因为没有密码。所以这里选择
adduser。
2、设置该用户密码
passwd sftpuser1
回车后再输入密码即可
3、禁止该用户登录 SSH
因为我们只想该用户使用 SFTP,并不需要该用户能登录 SSH,威胁安全。
usermod -s /bin/false
sftpuser1
将
sftpuser1的 shell 改成
/bin/false。
4、修改该用户的家目录
usermod -d
/data/wwwroot
/user1/
sftpuser1
这样每次用户访问服务器都会默认打开
/data/wwwroot/user1/,但还是可以跳出这个访问其它目录,需要进行下面一步的操作。
5、设置 sshd_config:
打开
sshd_config文件
vi /etc/ssh/sshd_config
找到 Subsystem sftp 这一行,修改成:
Subsystem sftp internal-sftp
UsePAM yes Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/
将上面的
sftpuser1 和
/data/wwwroot/user1/
替换成你需要的。
多个用户请重复配置这三行:
Match user sftpuser2
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user2/
这样可以为不同的用户设置不同的限制目录。
6、重新启动 sshd 服务:
/etc/init.d/sshd restart
现在用 SFTP 软件使用
sftpuser1用户登录,就可以发现目录已经被限定、锁死在
/data/wwwroot/user1/了。
四、可能遇到的问题
1、修改sshd_config文件后重启 sshd,报错:Directive 'UseDNS' is not
allowed within a Match block
语法错误,原因未知,只需要把两段配置的位置互调就不报错了。
修改前:
Subsystem sftp internal-sftp UsePAM yes Match user
sftpuser1 ForceCommand internal-sftp ChrootDirectory
/data/wwwroot/user1/ UseDNS no
AddressFamily inet PermitRootLogin yes SyslogFacility
AUTHPRIV PasswordAuthentication yes
修改后:
UseDNS no AddressFamily inet PermitRootLogin
yes SyslogFacility AUTHPRIV PasswordAuthentication
yes Subsystem sftp internal-sftp UsePAM
yes Match user sftpuser1 ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/
注:当你出现这个错误的时候,sftp 肯定是连不上了。如果你习惯用 FileZilla
去修改配置文件,那么此时你得不情愿的切换到
shell,去用 vi/vim 去修改它了。
2、新用户通过 sftp 访问时,权限不全,只能读不能写
我试着用 root 账号去把该用户的家目录权限改成 777,但是会出现该用户 sftp 登陆不了的情况。(报错:Server
unexpectedly closed network connection)
google 了原因如下:
给新用户的家目录的权限设定有两个要点:
1、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是
root
2、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限
755)
如果违反了上面的两条要求,那么就会出现新用户访问不了 sftp
的情况。
所以
/data/wwwroot/user1/及上级的所有目录属主一定要是
root,并且组权限和公共权限不能有写入权限,
如果一定需要有写入权限,那们可以在/data/wwwroot/user1/下建立 777
权限的文件夹。
mkdir /data/wwwroot/user1/upload chown
-R sftpuser1:root
/data/wwwroot/user1/upload
这样
sftpuser1用户就可以在
/data/wwwroot/user1/upload里随意读写文件了。