useradd -d /data/app/ app
passwd app
chmod 755 /data/
cd /data
chmod 755 app/
chown root:root app/
cat >>/etc/ssh/sshd_config <<EOF
Match User app
ChrootDirectory /data/app/
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
EOF
service sshd restart
vi /etc/passwd
app:x:1017:1018::/data/app/:/sbin/nologin
编译安装
今日升级了一下openssh,用了里面的自带chroot来实现SFTP的目录权限限制,只显示sftp用户家目录 详细如下:
首先升级openssh,目前版本是5.2p2,要使用ChrootDirectory需要4.8以上的版本:
./configure -prefix=/usr/ssh -sysconfdir=/etc/ssh -with-pam -with-kerberos5 -with-md5-passwords -with-tcp-wrapper
make
make install
编辑/etc/ssh/sshd_config
==1. 把需要使用sftp的用户在sshd里面做限制家目录==
把
Subsystem sftp /usr/libexec/openssh/sftp-server
替换为
Subsystem sftp internal-sftp
Match user by,fruit,fgslot,laya,ptas,pth5,texas
#Match group sftponly
AuthorizedKeysFile /data/sftp/%u/.ssh/authorized_keys
PasswordAuthentication yes
ChrootDirectory /data/sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
保存退出。
重启sshd 服务
/usr/ssh/sbin/sshd
(/etc/init.d/sshd restart)
==2. 添加用户,并且处理权限==
NAME=act
groupadd sftponly
useradd -m -s /sbin/nologin -d /home/sftp/$NAME $NAME
usermod -g sftponly $NAME
vi /etc/passwd
修改家目录:$NAME:x:1013:1013::/$NAME:/sbin/nologin
cd /home/sftp
chown -R root:sftponly $NAME
chmod 755 $NAME
mkdir $NAME/$NAME
chown $NAME:$NAME $NAME/$NAME
ln -s /home/sftp/$NAME/$NAME /home/test-php-1/data/www/fg/gamelist/public/global/list/$NAME
修改sshd配置限制用户家目录:vi /etc/ssh/sshd_config
service sshd restart
==由于chroot必须目录是只有root可写,所以我们 ChrootDirectory /home/%u 之后,必须把 /home/%u 改为root权限。==
用chroot将用户的根目录指定到%h,%h代表用户home目录,这样用户 就只能在用户目录下活动。也可用%u,%u代表用户名。
chown root:sftponly /home/%u;chmod 750 /home/%u
==而把用户根目录改成/sftp,其实就是在chroot以后自动进入/home/%u/sftp目录,该目录才是用户可写的==
- 这里有个必须要注意的地方就是,用户Key验证的时候,读取的key文件是在还没有chroot之前就读取的,所以如果改变了用户根目录,默认ssh就回去/sftp/.ssh/authorizedkeys 里面读取公钥,这个目录当然是不存在的,所以我们要改变默认的key读取方式:AuthorizedKeysFile /home/%u/.ssh/authorizedkeys
- 当然也有例外一种解决方法,就是在/home/%u下面,再建立 /home/%u/home/%u
- 这样key验证会在 /home/%u/.ssh/authorized_keys 下面进行
-
chroot登录后直接就进入 /home/%u/home/%u,但是这样的话,好像目录就太多层了,而且也很混乱,哈哈。
整个sftp的过程
-
首先用key登录ssh:
- 查找AuthorizedKeysFile 指定的key文件,如果是相对路径,就查找当前登录用户根目录(/etc/passwd)下的.ssh/authorized_keys文件
- 登录ssh后chroot 到 ChrootDirectory 设置的目录,改目录必须是只有root可写。
- chroot以后进入用户根目录,这个时候根目录还是读取(/etc/passwd)里面的设置,但是根是相对于ChrootDirectory 的存在了,比如ssmax的根目录是/home/ssmax,ChrootDirectory 也是/home/ssmax
- 这个时候用户的根目录就在/home/ssmax/home/ssmax 里面了。
如果您喜欢本站,点击这儿可以捐赠本站
这些信息可能会帮助到你: 联系作者 | 报毒说明
修改版本软件,加群提示等均为修改者自留,非本站信息,注意鉴别
这些信息可能会帮助到你: 联系作者 | 报毒说明
修改版本软件,加群提示等均为修改者自留,非本站信息,注意鉴别
评论(0)