一,openssh 版本要4.81以上

不是这个版本的话,要升级。

二,我们的客户网站全部放在/home目录下,建立网站目录文件夹并且每个网站文件夹命令为www.a.com www.b.com


三,以2个网站例,首先添加2个普通用户

[root@localhost ~]# useradd -d /www.a.com -s /sbin/nologin -M usera

[root@localhost ~]# passwd usera

解释-d /www.a.com 这里一定是指用户家目录一定是在根目录并且他的名称和/home用户的网站文件夹名一样,这样用户第一次登陆SFTP可以定位到他的网站注目录,-s /sbin/nologin 禁止用户ssh登陆 -M 参数是不会在/根目录创建www.a.com真实文件夹 usera为用户名 passwd usera设置用户密码

[root@localhost ~]# useradd -d /www.b.com -s /sbin/nologin -M userb

[root@localhost ~]# passwd userb


四,配置sshd_config

[root@localhost ~]# vi /etc/ssh/sshd_config  

# 将以下行注释,更换成internal-sftp  

# Subsystem sftp /usr/libexec/openssh/sftp-server  

Subsystem sftp internal-sftp  

# 添加以下行  

Match User usera,userb  

ChrootDirectory /home  

AllowTcpForwarding no  

ForceCommand internal-sftp


五,配置目录权限

[root@localhost ~]# chown root:root /home

[root@localhost ~]# chmod 0755 /home

目录权限需要注意:

a. 由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root

b. 由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限


六,网站目录文件夹权限重点哦

[root@localhost ~]# chmod o-x www.a.com www.b.com

[root@localhost ~]# chown -R usera.apache www.a.com

[root@localhost ~]# chown -R userb.apache www.b.com

drwxrwxrw- 4 usera   apache  4096 Oct 19  2012 www.a.com

drwxrwxrw- 4 userb   apache  4096 Jul  9 02:23 www.b.com


解释下 drwxrwxrw- 776权限 文件目录 用户可读、写、执行,群组可读、执行你再加个写也行,反正一定要有X权限,其他用户 注意这里一定要去掉他所有权限 ---  usera apache 注意哦 所属用户和组一定是该网站的用户组就是提供web服务的组,是apache就写这个是nginx 就写nginx名称不一定是这样,到系统查看一下提供web服务的组是哪个 后面的参数不用解释了吧 对了 usera,和userb一定不要加入到提供web服务的组,就是我们设置的网站文件目录的组 (有点饶)


七,设置www.a.com sgid权限

[root@localhost ~]# chmod g+s -R www.a.com www.b.com

drwxr-s--- 4 usera   apache  4096 Oct 19  2012 www.a.com

drwxr-s--- 4 userb   apache  4096 Oct 19  2012 www.b.com

八,禁止客户修改自身主目录文件权限

为了防止客户修改自身主目录的文件,其他拥有者权限带可读、写、执行,因为客户用FTP客户端软件连接进来他是可以修改自身文件权限,但是不能修改别人的文件权限

比如这样了

drwxrwsrwx 4 usera    apache 4096 Oct 19  2012 www.a.com 即777最高权限

这样的话那么其他用户登陆进来是可以进入他的目录并且可以写入文件和下载,删除等操作

解决方案是利用chattr命令 禁止用户更改该文件夹权限,

[root@localhost ~]# chattr +i  www.a.com  这样就行了,对了即使root用户也无法更改该文件权限了,并且 www.a.com 目录下是无法写入和删除文件

所以我们在执行上一条命令之前最好是在www.a.com目录里面新建一个目录 比如

[root@localhost ~]# mkdir /home/www.a.com/web 这样的话我们可以上传文件到www.a.com目录下的web目录里面。并且把web目录作为网站的根目录

解除锁定文件权限修改方法

[root@localhost ~]# chattr -i


九,成功

这样你用usera或者userb登陆sftp ,以usera为例子,第一次他首先是进入他自己的/home/www.a.com目录,你可以在该目录里面删除、下载、上传、编辑文件等所有操作。你还可以向上翻,可以翻到他的上级目录/home里。那你就可以看到/home里面有www.a.com,www.b.com两个文件夹对没错,你不但看到了自己网站本身目录还看到了userb的网站目录,但是你无法进入到他的目录里面。也无法下载该目录到。更加无法删除,上传、编辑文件。反之,userb用户登陆进去也是跟usera一样的命运,这样后续的添加用户操作亦是如此。


十,配置好了然后重启sshd服务或者加载他的配置

service sshd reload/restart (加载配置/重启服务)

/etc/init.d/sshd reload/restart 上面的命令无法请试用这条命令


十一,其他设置

进入www.a.com目录新建logs和web文件夹用于放至日志和网站文件,另外自己可以一个文本文件用于给用户阅读的相关帮助信息,为了防止

用户删除可以执行chattr +i . 命令