openEuler部署vsftp记录

本文不是项目安装参照步骤,主要记录安装大体步骤和过程中出现的问题。

vsftp安装

按照官方文档安装,只是我遇到了安装依赖包超时的问题。

dnf install vsftpd

依赖包自动下载过程中出现:

Timeout was reached for http://repo.openeuler.org/openEuler-22.09/debuginfo/x86_64/repodata/repomd.xml [Connection timeout after 30000 ms]

open欧拉版本是22.09,具体原因没有细究。解决方法:执行#yum list all,然后在执行dnf install vsftpd

后来又出现curl下载文件超时情况,重新执行yum list all 后,再次执行dnf install vsftpd顺利安装完成。

配置虚拟账号

虚拟账号的整体思路为:

  • 创建一个宿主用户,宿主用户shell设置为/sbin/nologin,并为宿主用户配置一个用户目录;
  • 通过pam方式创建文件数据库,用来保存虚拟用户的账号密码,用户登录是进行验证;
  • 修改vsftp主配置文件,启用虚拟用户;
  • 为每个虚拟用户配置vsftp配置文件,为每个虚拟用户做权限、根目录等配置。

创建宿主用户

为了提高安全性,ftp用户的shell应该设置为“/sbin/nologin”,禁止登录,所以我们先来创建一个宿主用户,并配置用户目录为/home/ftp/vftp,用户名为virtual。

# useradd -s /sbin/nologin -d /home/ftp/vftp virtual

创建文本型用户数据库用于pam验证

网上比较多的方法是使用:

db_load -T -t hash -f /etc/vsftpd/virtual_user /etc/vsftpd/virtual_user.db来创建数据库,但是在我所有的openEuler22.09中并不能使用。通过查看systemctl status vsftpd,看到:pam_faillock(vsftpd:auth): User unknown: 报错。这个问题详细了解可参考:vsftpd搭建ftp服务器不能使用虚拟账户登录 · Issue #I5WRC0 · src-openEuler/vsftpd - Gitee.com
经过查找资料,说是因为pam_userdb使用的数据库由bdb换成了gdbm,需要更换格式。安装gdbm,使用以下命令创建数据库,增加用户:
gdbmtool -n /etc/vsftpd/virtual.pag open
gdbmtool /etc/vsftpd/virtual.pag store ${FtpUserName} ${FtpUserPass} 

例如创建用户vftp,密码为123456:

gdbmtool -n /etc/vsftpd/virtual.pag open
gdbmtool /etc/vsftpd/virtual.pag store vftp 123456

可以重复第二个命令创建多个用户。

配置pam认证:

vim /etc/pam.d/vsftpd在第3行插入:

auth    sufficient pam_userdb.so  db=/etc/vsftpd/virtual #刚才生成的virtual.pag
account sufficient pam_userdb.so  db=/etc/vsftpd/virtual

这里注意不能带扩展名,不然会出现pam_userdb(vsftpd:auth): user_lookup: could not init database `/etc/vsftpd/***': No such file 

也有说这里sufficient为required的。但是我是用required的时候一直出现pam_faillock(vsftpd:auth): User unknown:问题,替换为sufficient好像可以认证了。

修改vsftpd.conf主配置文件

参数中需要注意的:

  • chroot部分。下面参数中chroot_local_user、chroot_list_enable、allow_writeable_chroot、chroot_list_file=/etc/vsftpd/chroot_list四个参数限制了所有用户都被限制在主目录,chroot_list文件内的用户不受此限制。这四个参数的具体作用可参考wzlsunice88的文章建立vsftpd权限控制_vsftpd 读写权限-CSDN博客
  • virtual_use_local_privs=YES。虚拟用户和宿主用户有一样的权限。ftp用户上传的文件和目录用户和组都是前面创建的宿主用户,如果宿主用户和虚拟用户权限不一致,则虚拟用户无法在上传的目录中进行写操作,在新建目录上传文件等。
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
chroot_local_user=YES    
chroot_list_enable=YES    
allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
banner_file=/etc/vsftpd/welcome.txt
use_localtime=YES
#宿主用户配置部分
guest_enable=YES
guest_username=virtual    #前面创建的宿主用户
virtual_use_local_privs=YES    #yes表示虚拟用户和宿主用户有一样的权限,no则标识虚拟用户和匿名用户一样的权限
user_config_dir=/etc/vsftpd/vuser_conf    #虚拟用户配置文件目录,每个虚拟用户一个文件,文件名和虚拟用户名相同
reverse_lookup_enable=NO

虚拟用户配置文件

vsftpd的主配置文件中,定义了虚拟用户配置文件的目录为vuser_conf。创建目录、创建和虚拟用户同名的文件vftp,编辑vftp文件。这里因为主配置文件virtual_use_local_privs=YES,设置虚拟用户和宿主用户通权限,所以anon_***的参数都是no。如果virtual_use_local_privs=NO,那么这里需要设置具体的anon_***为yes,来允许vftp具备上传、下载、删除等权限。具体可参照苦心明的文章vsftpd配置详解中虚拟用户设置部分。

# mkdir /etc/vsftpd/vuser_conf
# touch /etc/vsftpd/vuser_conf/vftp

#设置vftp可以上传,下载和删除文件
# vim /etc/vsftpd/vuser_conf/vftp

#指定虚拟用户仓库的具路径
local_root=/home/ftp/vftp
#设定不允许匿名访问
anonymous_enable=NO
#允许写的操作
write_enable=YES
#上传文件的权限掩码
local_umask=022
#不允许匿名上传
anon_upload_enable=NO
#不允许匿名用户建立目录
anon_mkdir_write_enable=NO
#设定空闲链接超时时间
idle_session_timeout=300
#设定单次传输最大时间
data_connection_timeout=1000
#设定并发客户端的访问数量
max_clients=3
#设定客户端的最大线程数
max_per_ip=3
#设定用户的最大传输速率,单位b/s
#local_max_rate=10000

重启vsftpd服务,就可以在本地测试ftp登录了。

# systemctl restart vsftpd

如果要远程登录,可能还需要在防火墙放行ftp协议。永久开放ftp服务

firewall-cmd --add-service=ftp --permanent

本地测试FTP

# ftp localhost
Trying ::1...
Connected to localhost (::1).
220-Welcome to ftp.
220 
Name (localhost:root): vftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

遇到的主要问题

  1. Timeout was reached for http://repo.openeuler.org/openEuler-22.09/debuginfo/x86_64/repodata/repomd.xml [Connection timeout after 30000 ms] 参照上文vsftp安装部分
  2. 登录遇到530问题,具体通过systemctl status vsftpd的报错,有三种情况:
    1. 一个是检查pam.d/vsftpd文件中的路径,不能带db扩展名,否则出现pam_userdb(vsftpd:auth): user_lookup: could not init database `/etc/vsftpd/vuserpam': No such file or directory
    2. 第二种是报错pam_faillock(vsftpd:auth): User unknown:。pam.d/vsftpd文件中添加的两行,使用sufficient还是required的问题,我刚开始使用required报错,换成 sufficient可以正常认证了。
    3. 修改/etc/pam.d/vsftpd,将auth required pam_shells.so修改为->auth required pam_nologin.so 即可。原因是:auth required pam_shells.so 配置项的含义为仅允许用户的shell为 /etc/shells文件内的shell命令时,才能够成功,而创建ftp用户时,为了禁止ssh登录,一般多为/bin/false 、/usr/sbin/nologin 等,显然不是一个有效的bash,也就无法登录了。报错为
      vsftpd:auth): user_lookup: could not init database `/etc/vsftpd/virtual': Permission denied
      (参照L5S5S7ubuntu vsftpd 530 Login incorrect 根本原因和解决方案 - 简书 (jianshu.com)
  3. 500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list。如果chroot_list_enable参数设置为yes,则需要在chroot_list_file指定文件目录,并创建chroot_list文件。
  4. vsftp 550 Permission denied。详细看看virtual_use_local_privs参数,再看看宿主用户是否有主目录读写权限。
  5. vsftp的主根目录是不能有写的权限的,但是虚拟用户在主根目录里分别创建自己的根目录,可以有写权限。例如主根目录为 /homt/ftp,ftp文件夹不能有写权限
    chmod +600 /home/ftp

    而虚拟用户vftp主目录/home/ftp/vftp可以有写的权限

    chmod +755 /home/ftp/vftp
  6. 报错500 OOPS: cannot change directory:/ftphome/ftp。可以试试关闭sellinxu试试 
    setenforce 0    #关闭selinux
    sestatus        #查看selinux状态
    如果关闭selinux后,可以正常登录,启动selinux。执行下面的命令修改selinux配置,-P是写入配置文件,重启也不会失效。
    setenforce 1                        #开启selinux
    setsebool -P ftpd_full_access 1     #修改ftpd的权限
    systemctl restart ftpd

    查看selinux修改情况:sestatus -b | grep ftp,输出如下:

    # 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                               off

参照的优秀教程

vsftpd配置详解 - 苦心明 - 博客园 (cnblogs.com)

vsftp新增用户_vsftp创建用户-CSDN博客

配置vsftpd的遇到的坑及搭建虚拟账户-CSDN博客

ubuntu vsftpd 530 Login incorrect 根本原因和解决方案 - 简书 (jianshu.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值