SFTP限制用户活动目录并挂载指定目录
最近有这样一种需求。
- 用户账户只能sftp,不能ssh。
- 用户只能在指定目录内操作。
- 指定目录内包含多个其他位置的目录。
不能用ssh,那就使用sftp来实现,提供sftp的服务有vsftpd和系统自带的internal-sftp。
具体操作如下:
1. 创建新用户,指定目录,禁止ssh登录。
1 |
useradd -m -d /home/derek -s /sbin/nologin derek |
2. 设置密码
1 |
passwd derek |
3. 配置sshd
1 |
vim /etc/ssh/sshd_config |
修改并新增以下内容:
1 2 3 4 5 6 7 |
Subsystem sftp internal-sftp Match User derek ChrootDirectory /home/derek X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp |
4. 配置权限
经过前三步,使用winscp或者FileZilla等软件登录时,可能会登录失败。
登录失败的原因一般是目录权限问题,查阅文档之后发现ChrootDirectory是有权限要求的。
- ChrootDirectory设置的目录权限及每一级父目录权限,属主和属组必须是root
- ChrootDirectory设置的目录权限及每一级父目录权限,权限最大只能设置755
将/home/derek
目录设置成root:root
1 |
chown -R root:root /home/derek |
将/home/derek
目录权限设置成755
1 |
chmod 755 /home/derek |
5. 挂载目录
由于实际上需要管理的目录并非 /home/derek,而是位于多个位置的多个目录,sftp并不支持软连接(ln -s),所以用挂载的方式加目录进来。
1 |
mount --bind /www/abc /home/derek/abc |
配置开机挂载。
1 |
vim /etc/fstab |
添加以下内容
1 |
/www/abc/ /home/derek/abc/ none rw,bind 0 0 |
6. 配置挂载目录权限
如果不配置挂载目录的权限,可能会上传下载失败,并提示权限不足。
在不能直接修改原目录及文件权限的情况下,可以使用acl来附加扩展权限。
可按照以下例子灵活配置。
1 2 3 4 5 6 7 8 9 10 11 12 |
setfacl -R -m u:ftp:rwx . # 对当前目录 . 递归设置acl规则 u:ftp:rwx , u:ftp:rwx这条规则是针对指定用户设定的(u);该用户名为ftp; 权限规则是rwx # 组权限类推 setfacl -R -m g:ftp:rwx . # 设置默认 setfacl -R -d --set u:ftp:rwx . |
版权声明
转载保留版权: 大D技研室 | 《SFTP限制用户活动目录并挂载指定目录》
本文链接地址:https://www.dadclab.com/archives/7620.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
已有 1 条评论
发表评论
电子邮件地址不会被公开。 必填项已标注。
收藏了,正好有用