【centos】【vsftpd】FTP本地用户登录配置

ftp与sftp

  • 差异非常大
  • ftp相当于一种网络协议,可运行在不同操作系统,默认使用21端口和20端口,明文传输且不稳定
  • sftp基于ssh,默认使用22端口,Linux自带,加密传输且稳定
  • vsftpd是用于配置ftp,与sftp无关
  • sftp无需配置,相当于ssh远程连接,本地用户使用sftp user@XX.XX.XX.XX即可

安装vsftpd和ftp

  1. ftp用于测试
    yum install -y vsftpd* ftp*
    
  2. 启动
    systemctl start vsftpd
    
  3. 防火墙开放21端口
    firewall-cmd --zone=public --add-port=21/tcp --permanent
    firewall-cmd --reload
    firewall-cmd --zone=public --list-ports
    
  4. 测试
    systemctl status vsftpd
    netstat -ntlp | grep vsftpd
    ftp XX.XX.XX.XX
    
    默认配置下,匿名用户登录,密码为空
    在这里插入图片描述

本地用户登录-不限制访问目录

不可匿名登录
禁止其他用户访问
仅本地用户ftpuser可访问
默认访问目录/home/ftpuser
可访问其他目录

  1. 新增本地用户ftpuser

    useradd -d /home/ftpuser -s /bin/bash ftpuser
    passwd ftpuser
    
  2. 修改配置
    /etc/vsftpd/vsftpd.conf默认配置如下

    anonymous_enable=YES
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    

    修改后

    anonymous_enable=NO #禁止匿名用户登录服务器
    local_enable=YES #允许本地用户登录服务器
    write_enable=YES #允许写操作
    local_umask=022 
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    
    # YES,user_list用户为黑名单,禁止登录;NO则为白名单,可登录
    userlist_deny=YES
    # chroot_list本地用户可登录ftp名单,且本地用户需要在/etc/shells范围内或者修改/etc/pam.d/vsftpd的pam限制
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    # 设置根目录可写
    allow_writeable_chroot=YES
    
    
  3. /etc/vsftpd/下新建chroot_list文件,然后写入本地用户ftpuser,一行代表一个用户

  4. 重启systemctl restart vsftpd

  5. 本机测试ftp XX.XX.XX.XX 成功

本地用户登录-限制访问目录

不可匿名登录
禁止其他用户访问
仅本地用户ftptest可访问
仅可访问目录/var/ftp

  1. 新增本地用户ftptest
    useradd -d /var/ftp -s /sbin/nologin ftptest
    passwd ftptest
    chmod -R 777 /var/ftp
    
  2. 修改/etc/pam.d/vsftpd,使用户可通过pam验证
    [root@localhost vsftpd]# vi /etc/pam.d/vsftpd
    	#%PAM-1.0
    	session    optional     pam_keyinit.so    force revoke
    	auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
    	#auth       required     pam_shells.so
    	auth       include      password-auth
    	account    include      password-auth
    	session    required     pam_loginuid.so
    	session    include      password-auth
    
  3. 修改配置
    anonymous_enable=NO #禁止匿名用户登录服务器
    local_enable=YES #允许本地用户登录服务器
    write_enable=YES #允许写操作
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    
    # YES,user_list用户为黑名单,禁止登录;NO则为白名单,可登录
    userlist_deny=YES
    # 限制访问目录本地用户仅可访问/var/ftp
    chroot_local_user=YES
    local_root=/var/ftp
    # 设置根目录可写
    allow_writeable_chroot=YES
    
  4. 重启systemctl restart vsftpd
  5. 本机测试ftp XX.XX.XX.XX 成功

有可能影响连接的问题

pam认证

可根据情况注释

  • auth required pam_shells.so: 仅允许用户的shell是 /etc/shells文件内的shell,才能登录
  • auth required pam_listfile.so:/etc/ftpusers 中的用户禁止登陆
# cat /etc/pam.d/vsftpd
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

selinux策略

安全增强模块,根据情况修改

  • ftpd_full_access :影响创建新目录等
  • tftp_home_dir:影响ftp根目录访问等
setsebool -P tftp_home_dir 1
setsebool -P ftpd_full_access 1
systemctl restart vsftpd
# sestatus -b | grep ftp
ftpd_anon_write                             off
ftpd_connect_all_unreserved                 off
ftpd_connect_db                             off
ftpd_full_access                            on
ftpd_use_cifs                               off
ftpd_use_fusefs                             off
ftpd_use_nfs                                off
ftpd_use_passive_mode                       off
httpd_can_connect_ftp                       off
httpd_enable_ftp_server                     off
tftp_anon_write                             off
tftp_home_dir                               on

被动模式

pasv_enable=YES
pasv_min_port=31000
pasv_max_port=31999

防火墙

firewall-cmd --zone=public --add-port=31000-31999/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

ipv4和ipv6

默认ipv6,可修改为ipv4配置

listen=YES
listen_ipv6=NO

报错

1、 530 Login incorrect

  • 确认用户账密无误

  • 网上的pam_service_name=vsftpd方法无效

  • 查看/etc/pam.d/vsftpd文件,对以下两条要求进行排查,我的用户是/sbin/nologin,不在/etc/shells范围内。

    • auth required pam_shells.so: 仅允许用户的shell是 /etc/shells文件内的shell,才能登录
    • auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed:/etc/ftpusers 中的用户禁止登陆
    [root@localhost vsftpd]# cat /etc/pam.d/vsftpd
    #%PAM-1.0
    session    optional     pam_keyinit.so    force revoke
    auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
    auth       required     pam_shells.so
    auth       include      password-auth
    account    include      password-auth
    session    required     pam_loginuid.so
    session    include      password-auth
    [root@localhost vsftpd]# cat /etc/shells
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash
    
    • 方案一:可以修改/etc/pam.d/vsftpd注释掉 auth required pam_shells.so
    • 方案二:修改用户登录属性,usermod -s /bin/bash ftptest
  • 重启验证,该报错解决,但登录时出现先报错500 OOPS: vsftpd: refusing to run with writable root inside chroot(),见下条

2、500 OOPS: vsftpd: refusing to run with writable root inside chroot()

原因:安装的最新版本,增加了对配置错误的强制检查,要求根目录不可写

Add stronger checks for the configuration error of running with a
writeable root directory inside a chroot(). This may bite people who
carelessly turned on chroot_local_user but such is life.

  • 方案一:配置文件设置allow_writeable_chroot=YES
  • 方案二:设置ftptest用户根目录不可写chmod a-w ftptest

3、227 Entering Passive Mode (10,1,58,5,242,166). ftp: connect: 没有到主机的路由

描述:本机ftp测试没问题;内网其他服务器ftp登陆成功,但执行ls等命令报错
原因:被动模式端口问题

  • 方案一:登录后,输入passive,关掉被动模式
    ftp> passive
    Passive mode off.
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    drwxrwxrwx    2 0        0               6 Jun 09  2021 pub
    drwxr-xr-x    2 1001     1001            6 Feb 20 06:05 test
    226 Directory send OK.
    
  • 方案二:配置文件设置被动模式,并开放防火墙端口31000-31999
    配置
    pasv_enable=YES
    pasv_min_port=31000
    pasv_max_port=31999
    
    防火墙
    firewall-cmd --zone=public --add-port=31000-31999/tcp --permanent
    firewall-cmd --reload
    firewall-cmd --zone=public --list-ports
    

4、425 Failed to establish connection. Error EElFTPSError: Control channel transfer error 114690

描述:内网正常,外网登陆成功但执行其他命令失败
原因:防火墙添加端口后,未firewall-cmd --reload使其生效

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装vsftpd: 在CentOS系统上,可以通过以下命令安装vsftpd: ``` sudo yum install vsftpd ``` 配置vsftpd: 1. 配置用户访问权限 打开vsftpd配置文件: ``` sudo vi /etc/vsftpd/vsftpd.conf ``` 找到以下两行,将其取消注释,并将值改为YES: ``` write_enable=YES local_umask=022 ``` 保存并关闭文件。 2. 配置用户列表 打开vsftpd用户列表文件: ``` sudo vi /etc/vsftpd/user_list ``` 将需要访问FTP服务器的用户添加到列表中,每个用户占一行。 保存并关闭文件。 3. 配置FTP根目录 打开vsftpd配置文件: ``` sudo vi /etc/vsftpd/vsftpd.conf ``` 找到以下行: ``` #chroot_local_user=YES ``` 将其取消注释,并将其值改为YES: ``` chroot_local_user=YES ``` 然后找到以下行: ``` #local_root=/var/www/html ``` 将其取消注释,并将其值改为FTP根目录的路径: ``` local_root=/home/ftp ``` 保存并关闭文件。 4. 开启防火墙端口 如果您的CentOS系统开启了防火墙,需要开启FTP端口21,可以通过以下命令实现: ``` sudo firewall-cmd --zone=public --permanent --add-port=21/tcp ``` 然后重新加载防火墙规则: ``` sudo firewall-cmd --reload ``` 5. 开启SELinux 如果您的CentOS系统开启了SELinux,需要将其设置为允许FTP服务访问: ``` sudo setsebool -P ftpd_full_access on ``` 6. 重启vsftpd服务 在CentOS系统上,可以通过以下命令重启vsftpd服务: ``` sudo systemctl restart vsftpd ``` 完成以上配置后,vsftpd应该已经可以正常使用了。您可以使用FTP客户端连接到FTP服务器并使用添加到用户列表的用户进行身份验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值