shell - linux新建用户指定目录权限
黄舟
黄舟 2017-04-17 13:50:31
[Linux讨论组]

我想在centos上建立一个用户,指定一个目录给它,只能在这个目录下操作,不能返回到向上一级等等的目录。就好像ftp那种类似,但是以ssh登陆进去的,应该怎么做?谢谢.

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(3)
高洛峰

用ChrootDirectory限制SFTP登录的用户只能访问指定目录且不能进行ssh登录

创建不能ssh登录的用户sftpuser1,密码用于sftp登录:

sudo adduser sftpuser1 --home /sftp/sftpuser1 --shell /bin/false

sudo nano /etc/ssh/sshd_config (执行man sshd_config查看配置说明)
Ubuntu/Debian上把Subsystem sftp /usr/lib/openssh/sftp-server
Redhat/CentOS上把Subsystem sftp /usr/libexec/openssh/sftp-server
修改为 Subsystem sftp internal-sftp
并加入:

Match User sftpuser1
    ChrootDirectory /sftp/sftpuser1
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

注意ChrootDirectory设置的目录/sftp/sftpuser1的所有者必须是root,并且该目录的上级目录/sftp的所有者也必须是root.
而且只有所有者拥有写权限,/sftp/sftpuser1和/sftp的权限最大设置只能是755.

sudo chown root:root /sftp/sftpuser1
sudo service ssh reload

由于上面设置了目录的权限是755,
因此所有非root用户都无法在目录中写入文件.
我们需要在ChrootDirectory指定的目录下建立子目录比如data,重新设置属主和权限.

mkdir /sftp/sftpuser1/data
chown sftpuser1:sftpuser1 /sftp/sftpuser1/data
chmod 755 /sftp/sftpuser1/data

这样就可以在读写data目录了.

配置好后,用户sftpuser1只能通过sftp访问指定目录,而且不能进行ssh登录:
sftp sftpuser1@127.0.0.1 登录成功,执行 ls -lha / 可见根目录为 /sftp/sftpuser1, 执行cd ..可见无法进入上一层目录.
ssh sftpuser1@127.0.0.1 提示:
Could not chdir to home directory /sftp/sftpuser1: No such file or directory
This service allows sftp connections only.
Connection to 127.0.0.1 closed.

把 AllowTcpForwarding no 改为 AllowTcpForwarding yes 表示允许用户进行端口转发, X11Forwarding 含义类似.

怪我咯

useradd还是adduser, 貌似两个都有. 默认是会创建/home/Name的目录, 而且只有这个目录的读写权限, 其他目录的是可以看的

ringa_lee

构建chroot环境,修改sshd配置指定用户登录目录

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号