Centos7 安装 vsftpd

Centos7 安装 vsftpd

简介: vsftpd(very secure FTP daemon,意为非常安全的FTP守护进程),是一个类Unix系统以及Linux上的FTP服务器软件。它是UbuntuCentOSFedora、NimbleX、SlackwareRed Hat Enterprise LinuxLinux发行版的默认FTP服务器软件。它采用GNU通用公共许可证授权,并支持IPv6TLSFTPS

1. 安装vsftpd

注意:

先查询系统中是否已经安装过其他FTP服务

[root@localhost ~]# rpm -qa|grep ftp
vsftpd-3.0.2-29.el7_9.x86_64
[root@localhost ~]# 

如上面显示系统已经安装vsftpd, 先进行卸载

[root@localhost ~]# rpm -e --nodeps vsftpd-3.0.2-29.el7_9.x86_64
warning: /etc/vsftpd/vsftpd.conf saved as /etc/vsftpd/vsftpd.conf.rpmsave # 系统自动备份配置
warning: /etc/pam.d/vsftpd saved as /etc/pam.d/vsftpd.rpmsave # 系统自动备份配置

开始安装:

​ 不加-y参数会在找到安装包之后, 询问Is this OK[y/d/N], 需要手动选择. 加上-y之后, 会自动选择y, 不需要再手动选择

yum -y install vsftpd

2. 创建虚拟用户配置

为了将vsftpd的用户权限管理和操作系统权限管理分开, 本次教程使用vsftpd的虚拟用户功能

新建一个配置文件/etc/vsftpd/vftpusers, 可以是任意路径, 记住这个路径在下面的生成数据库认证文件文件时需要用到.

在文件中配置配置FTP用户名和密码, 其中奇数行是用户名, 偶数行是密码, 对应的是上一行行的用户名, 如下:

这里定义了2个虚拟用户

  • ftp1: 密码是123456
  • ftp2: 密码时654321
ftp1
123456
ftp2
654321

3. 创建数据库认证文件

根据步骤2创建的配置文件生成数据库认证文件. 后续如果增加/修改/删除FTP用户需要重新生成数据库认证文件, 再次执行如下命令:

db_load -T -t hash -f /etc/vsftpd/vftpusers /etc/vsftpd/vftpusers.db

其中/etc/vsftpd/vftpusers就是步骤2生成的文件路径, /etc/vsftpd/vftpusers.db是生成的数据库认证文件路径.

这部操作完之后/etc/vsftpd/vftpusers这个配置文件就没有用了, 为了安全起见, 防止密码暴露, 可以删除这个文件

4. 设置pam认证文件

配置为vsftpd服务使用步骤3生成的文件

先将默认配置进行备份

# 先备份默认
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.default

在将如下内容写入/etc/pam.d/vsftpd配置文件

注意: db=后面的路径是步骤3生成的数据库认证文件/etc/vsftpd/vftpusers.db去掉.db

#%PAM-1.0
auth    required        pam_userdb.so   db=/etc/vsftpd/vftpusers
account required        pam_userdb.so   db=/etc/vsftpd/vftpusers
session required        pam_loginuid.so

5. 修改vsftpd配置文件

配置文档地址: https://security.appspot.com/vsftpd/vsftpd_conf.html, 其他额外的选项可以根据自己需求自行参考配置

第一步还是备份配置文件

# 备份
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.default

/etc/vsftpd/vsftpd.conf配置文件替换为如下内容:

vim /etc/vsftpd/vsftpd.conf

# --- 配置
# 控制是否允许匿名登录。如果启用,用户名 ftp 和 anonymous 都会 被识别为匿名登录
anonymous_enable=NO
#控制是否允许本地登录。如果启用,则可以使用 /etc/passwd(或您的 PAM 配置引用的任何地方)中的普通用户帐户登录。必须启用此功能才能使任何非匿名登录工作,包括虚拟用户。
local_enable=YES
# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
write_enable=YES
# 用于文件创建的 umask 为本地用户设置的值。注意: 如果要指定八进制值,请记住“0”前缀,否则该值将被视为十进制整数
local_umask=022
# 是否激活目录欢迎信息功能
# 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息
# 默认情况下,欢迎信息是通过该目录下的.message文件获得的
# 此文件保存自定义的欢迎信息,由用户自己建立
dirmessage_enable=YES
# 是否启用日志, 日志文件路径 /var/log/vsftpd.log,但可以使用配置设置vsftpd_log_file覆盖此位置 
xferlog_enable=YES
# 主动模式是否使用20端口传输数据
connect_from_port_20=YES
# 是否使用xferlog格式记录日志, 默认日志路径是: /var/log/xferlog, 可以修改xferlog_file项修改
xferlog_std_format=YES
# 是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_local_user=YES
# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES
# 设定是否支持IPV6。如要同时监听IPv4和IPv6端口,
# 则必须运行两套vsftpd,采用两套配置文件
# 同时确保其中有一个监听选项是被注释掉的
listen_ipv6=NO
# 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件
# 此文件中file=/etc/vsftpd/ftpusers字段,说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中
pam_service_name=vsftpd
# 是否允许ftpusers文件中的用户登录FTP服务器,默认为NO
# 若此项设为YES,则user_list文件中的用户允许登录FTP服务器
# 而如果同时设置了userlist_deny=YES,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有
userlist_enable=YES
tcp_wrappers=YES
# 是否启用虚拟用户
guest_enable=YES
# 虚拟用户将使用与本地用户相同的权限
virtual_use_local_privs=YES
# 虚拟用户启用时使用, 根据模板为每个虚拟用户自动生成主目录
user_sub_token=$USER
# 用户登录后切换到该目录
local_root=/home/ftp/$USER
# 如果启用,目录列表中的所有用户和组信息将显示为 ftp
hide_ids=YES
allow_writeable_chroot=YES

6. 创建虚拟用户目录

配置已经完成, 接下来为之前创建的虚拟用户创建对应的目录, 根据/etc/vsftpd/vsftpd.conf中的local_root=/home/ftp/$USER创建其对应的文件目录

mkdir -p /home/ftp/ftp1
mkdir -p /home/ftp/ftp2
# 将权限统一修改为, vsftpd默认创建的ftp用户
chown -R ftp:ftp /home/ftp

每个虚拟用户都只能在自己对应的目录下操作(列出目录/文件, 上传, 下载等操作)

7. 测试验证

echo test > /home/ftp/ftp1/test.txt

# 查看文件
[root@localhost wbb]# curl ftp://ftp1:123456@localhost
-rw-r--r--    1 ftp      ftp             5 Sep 08 03:41 test.txt
[root@localhost wbb]# 

# 上传文件
[root@localhost wbb]# curl -T /home/wbb/333 ftp://ftp1:123456@localhost
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
[root@localhost wbb]# 
# 上传成功
[root@localhost wbb]# curl ftp://ftp1:123456@localhost
-rw-r--r--    1 ftp      ftp             0 Sep 08 05:35 333
-rw-r--r--    1 ftp      ftp             5 Sep 08 03:41 test.txt
[root@localhost wbb]# 

8. vsftp操作

# 开启开机启动
systemctl enable vsftpd
# 启动
systemctl start vsftpd
# 状态
systemctl status vsftpd
# 重启
systemctl restart vsftpd
# 停止
systemctl stop vsftpd
# 关闭开机启动
systemctl disable vsftpd

9 SELinux设置

推荐方法:

# 暂时让SELinux进入Permissive模式, 重启vsftpd服务判断是否是SELinux导致的
setenforce 0 
# 如果ftp能获取目录, 下载, 上传, 那么证明就是SELinux导致的

# 运行 getsebool -a | grep ftpd 判断查看权限
getsebool -a | grep ftpd
# 以下是显示出来的权限,off是关闭权限,on是打开权限
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
ftp_home_dir --> off

# 其中, ftp_home_dir和allow_ftpd_full_access必须为on 才能使vsftpd 具有访问ftp根目录,以及文件传输等权限
setsebool -P ftp_home_dir 1
setsebool -P allow_ftpd_full_access 1
# 注意这两条命令一般需要花上十几秒钟才能运行完

# 运行完了以后,我们再重新恢复SELinux进入Enforcing模式。
setenforce 1 #进入Enforcing模式

不推荐方法:


### 下面方法比较暴力, 不推荐
# --- 将SELINNUX的值修改为disabled, 重启服务器生效
vim /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

11. 遇到的问题:

  • 在修改/etc/sysconfig/selinux配置文件的时候将SELINUX=disabled写成了SELINUX=disable. 导致服务器启动异常

    修复方法:

  1. 断点重启一直按, 会进入如下界面
    在这里插入图片描述
  1. 根据提示按e进入编辑

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YQdRPoum-1631255885829)(Centos7 安装 vsftpd.assets/image-20210910133548352.png)]

  1. 找到类似LANG=en_US.UTF-8的地方, 在后面加上selinux=0

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hiqJDuWK-1631255885829)(Centos7 安装 vsftpd.assets/image-20210910133656930.png)]

  1. Ctrl+x 重启, 系统临时以selinux临时关闭进入系统
  2. 重新编辑/etc/sysconfig/selinux, 修改为SELINUX=disabled, 重启系统得以修复
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值