FTP和SFTP配置用户只能访问主目录(针对Centos7)
一、FTP设置
1、安装配置
-
检查当前服务器是否有安装FTP
rpm -q vsftpd
-
若未安装,则先安装
yum install -y vsftpd
-
添加用户并指定目录
groupadd ftpGroup
--- 添加ftp用户组useradd -d /u01/ftpfolder -s /sbin/nologin -g ftpGroup -G root ftpUser
--- 添加ftp用户[NOTE]
useradd 添加tfpUser用户
-d 指定用户根目录为/u01/ftpfolder
-s 指定shell脚本为/sbin/nologin,表示不允许shell登录
-g 创建分组ftpGroup
-G 指定root分组
若创建有问题可以删除重新创建 userdel -r ftpUser
-
添加用户时设定了客户不允许用shell登录,需要修改
vim /etc/shells
文件添加:/sbin/nologin
[TIP]
usermod -s /sbin/nologin ftpUSER 修改用户登录权限
usermod -s /bin/bash ftpUSER 恢复登录权限
usermod -d /test ftpUSER 修改用户家目录 -
修改参数文件
vim /etc/vsftpd/vsftpd.conf
添加如下内容:chroot_local_user=NO #所有用户不被锁定于主目录 chroot_list_enable=YES #启动例外名单 chroot_list_file=/etc/vsftpd/chroot_list #例外名单用户
[NOTE]
chroot_local_user是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。即当chroot_local_user=YES,"例外"就是:不被锁定的用户是哪些;当即chroot_local_user=NO,"例外"“就是:要被锁定的用户是哪些。 -
然后添加用户
vim /etc/vsftpd/chroot_list
每行一个用户名,保存即可。[IMPORTANT]
设置了主目录限制之后,在登录时会报错:
vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
需要修改vsftpd.conf文件,添加一行:
allow_writeable_chroot=YES
-
启动vsftpd服务(针对于Centos7)
systemctl start vsftpd.service
#启动服务
systemctl enable vsftpd.service
#开机自动启动
systemctl status vsftpd.service
#查看状态
2、FTP被动模式
-
对于FTP服务有主动模式和被动模式的区别,所涉及到的端口不同的地方,而使用winscp等工具连接云服务器上的FTP时默认是使用的被动模式,可能会因为端口的设定不全导入无法开打目录,可以对FTP服务进行配置,也可以在连接时取消被动模式:
-
取消被动模式,以WINSCP为例,如图:
-
开启被动模式,添加如下命令:
pasv_enable=YES (打开被动模式) pasv_min_port=55100 (设置被动模式涉及到的高位端口) pasv_max_port=55900 (高位端口需要在防火墙中打开)
二、SFTP设置
-
SFTP的设置主要是基于ssh协议,主要参数文件/etc/ssh/sshd_conf
vim /etc/ssh/sshd.conf
注释掉#Subsystem sftp /usr/libexec/openssh/sftp-server
-
在文档末尾出添加:
Subsystem sftp internal-sftp #这行指定使用sftp服务使用系统自带的internal-sftp Match User sftpuser #这行用来匹配用户 ChrootDirectory /data/sftp #用chroot将用户的根目录指定到/datas/www,这样用户就只能跟目录下活动 AllowTcpForwarding no ForceCommand internal-sftp #指定sftp命令
[IMPORTANT]
很重要!!!一定要在UseDNS no行后添加!!不然启动会报错!! -
若需要开启日志记录
在修改sshd_config文件时:
LogLevel INFO
Subsystem sftp internal-sftp -l INFO -f local5
,
ForceCommand internal-sftp -l INFO -f local5
然后修改 rsyslog_config文件
vim /etc/rsyslog.conf
添加
auth,authpriv.*,local5.* /var/log/sftp.log
重启 rsyslog服务systemctl restart rsyslog
-
然后重启sshd服务,
systemctl restart sshd.service
[NOTE]
与FTP不同,SFTP设置的ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,权限最大设置只能是755。因此将跟目录属于改为root,然后在指定目录下再新建目录,并修改属主为sftpuser。