Centos7 安装 vsftpd
简介: vsftpd(very secure FTP daemon,意为非常安全的FTP守护进程),是一个类Unix系统以及Linux上的FTP服务器软件。它是Ubuntu、CentOS、Fedora、NimbleX、Slackware和Red Hat Enterprise Linux等Linux发行版的默认FTP服务器软件。它采用GNU通用公共许可证授权,并支持IPv6、TLS和FTPS。
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
. 导致服务器启动异常修复方法:
- 断点重启一直按
↑
或↓
, 会进入如下界面
根据提示按
e
进入编辑
找到类似
LANG=en_US.UTF-8
的地方, 在后面加上selinux=0
- 按
Ctrl+x
重启, 系统临时以selinux临时关闭进入系统- 重新编辑
/etc/sysconfig/selinux
, 修改为SELINUX=disabled
, 重启系统得以修复