日期:2014-05-16  浏览次数:20811 次

linux配置sftp用户的chroot步骤(用户的sftp根目录)

1.编辑ssh中的sftp的配置,命令可能是:vi /etc/ssh/sshd_config


在这个文件中最后加入

#限制sftp组的用户使用sftp时在自己的home目录下
Match Group sftp
#这里写重写根目录成登录用户的根目录下
        ChrootDirectory %h

#这行指定使用sftp服务使用系统自带的internal-sftp
        ForceCommand    internal-sftp


2 重启ssh服务,命令可能是:service ssh restart,

这里要注意,当前重启这个服务的窗口千百万不能关闭,如果配置错误,ssh重启失败,你可能就进不去了,就得到机房中弄了,,,

所以,重启后,可以使用service ssh status来检查状态,或是再打开一个ssh登录窗口检查一下,重启后服务能否正常运行.


假设我的目录是/var/www/a

用户创建

1. 使用adduser --home /var/www/a/ --gid 1001 --shell /bin/false 登录员工名,来增加用户
2. 在/var/www/a/目录下创建一个属于此用户的目录,如U1000
3. 使用chown -R 用户名.sftp ./U1000 来改变这个目录拥有者,也就是U1000拥有者是本用户,组是sftp
4. 使用chmod -R o+wr ./U1000 来改变本用户拥有写入本目录的权限

5.使用chown root.root /var/www/a,来改变这个用户的home本身及以上的目录,如/var,/var/www,/var/www/a,同时让/var/www/a的所有目录的组写入权限没有了, chmod -R g-w ./,  
6. sftp登录情况记录在/var/log/auth.log中

7 使用 sftp工具来检测登录情况,如果能登录就说明配置成功,不能登录,请到/var/log/auth.log查看错误情况,一般是提示目录的mod或是owner不对,这时就把这个提示目录改成 root.root反正不是当前用户就行了.

8. 创建多个用户来检测/var/ww/a/u1与/var/ww/a/u2之间的用户是否能互相写入,可以话,就把u1使用chmod -R g-w ./u1这样的方法来去掉组的写入权限,再使用 chmod -R o+w ./u1,这个命令来让拥有者有写入权限,别人只能查看,


这里所有的sftp的组的用户都是设置home 是/var/www/a,因为chroot需要把当前的目录设置成非当前用户,也就是需要a目录登录用户不写入,而为了能使用就得,在a下面再建立一个目录,这样就无形中增加一个没太多作用的目录,如user1的home = /var/www/u1,为了使用,u1是root.root所有,然后需要再建立一个目录如www在u1下才能使用.

而user2的home=/var/www/u2,建立www在u2下面使用.这样的方式虽然可以让user1看不到user2的目录,因为chroot时user1根目录就是/var/www/u1了.


而为了解决这个问题,还有一个方式就是建立/var/www/a/u1,u2,u3,uxxxyy这样的目录,再使用ln来设置链接,如 ln -f /var/www/u1 /home/user1/u1,设置/home/user1为root.root的owner,再在u1就chown user1.sftp,这样,就可以达到可以写入,也不会让url路径加一级无用的目录,但是这样在管理上感觉不太好,