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。

posted @ 2020-09-30 12:40  灬夜露沁心灬  阅读(1426)  评论(0编辑  收藏  举报