本文主要介绍在 CentOS 中通过 vsftpd 搭建 FTP。
CentOS 7 vsftpd 搭建 FTP
博主博客
1. 安装 vsftpd
(1) 检查是否安装 vsftpd 软件
#rpm -qa | grep vsftpd
(2)没有安装就进行安装
#yum -y install vsftpd
(3)设置 vsftpd 自启动
#chkconfig vsftpd on
(4)常用操作
#service vsftpd start // 启动 vsftpd 服务器
#service vsftpd restart // 重启 vsftpd 服务器
#service vsftpd stop // 停止 vsftpd 服务器
#service vsftpd status // 查询 vsftpd 服务器
2. 配置 vsftpd 虚拟用户
(1) 修改 vftpd.conf 配置文件
#vim /etc/vsftpd/vsftpd.conf
// 是否允许匿名用户登录
anonymous_enable=YES/NO
// 是否允许本地用户登录, 如果为 NO, 虚拟用户也无法登录
local_enable=YES
// 本地用户是否锁定在宿主目录中
chroot_list_enable=YES
// 指定用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list
// 支持 ASCII 的上传功能
ascii_upload_enable=YES
// 支持 ASCII 的下载功能
ascii_download_enable=YES
// 设置 PAM 认证服务配置文件名, PAM 将根据 /etc/pam.d/vsftpd 文件进行认证
pam_service_name=vsftpd
// 启用虚拟用户
guest_enable=YES
// 设置虚拟用户宿主, CentOS 已经内置 ftp 用户
guest_username=ftp
// 设置用户配置文件所在目录(配置文件名跟虚拟用户名一致)
user_config_dir=/etc/vsftpd/vuser_conf
(2)创建 chroot_list 文件
# 在 /etc/vsftpd/ 文件夹中创建 chroot_list 文件, 里面写入 ftp 即可。
[root@localhost vsftpd]# echo ftp >> chroot_list
(3)创建用户密码文件
在 /etc/vsftpd/
中创建 vuser_password.txt
[root@localhost vsftpd]# vim vuser_password.txt
vuser_password.txt
文件内容:
nukix // 奇数行, 虚拟用户名
123456 // 偶数行, 密码
(4)使用 db_load 工具将列表文本文件转为数据库文件
[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vuser_password.txt /etc/vsftpd/vuser_password.db
生成的 db 文件在 /etc/vsftpd/vuser_password.db
注: 如果没有安装可以安装 db4-utils
。
(5)编辑认证文件
# vim /etc/pam.d/vsftpd
把里面所有项注释掉(前面加#), 然后后面根据系统加入不同的行
32位系统:
- auth required pam_userdb.so db=/etc/vsftpd/vuser_password
- account required pam_userdb.so db=/etc/vsftpd/vuser_password
64位系统:
- auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_password
- account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_password
64位系统如下:
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers one
rr=succeed#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_password
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_password
Ubuntu 位置: /lib/x86_64-linux-gnu/security/pam_userdb.so
(6)创建虚拟用户配置文件
在 /etc/vsftpd/
下执行
# 创建 vuser_conf 文件夹
[root@localhost vsftpd]# mkdir vuser_conf
// 进去 vuser_conf 文件夹
[root@localhost vsftpd]# cd vuser_conf
# 创建 nukix 文件, 这个文件名必须跟虚拟用户名一致, 不然无效
[root@localhost vuser_conf]vim nukix
nukix 文件内容如下:
local_root=/home/ftp # 虚拟用户根目录, 必须有读写权限 chmod -R 777 目录名
write_enable=YES # 允许在文件系统写入权限
anon_umask=022 # 匿名用户上传文件默认权限掩码值
anon_world_readable_only=NO # 允许匿名用户浏览整个服务器的文件系统
anon_upload_enable=YES # 开启匿名帐号的上传功能
anon_mkdir_write_enable=YES # 允许创建文件夹
anon_other_write_enable=YES # 允许其他的写入权限
(7) 开启服务
#service vsftpd start
注意, 如果不禁用 SELinux 的 FTP 传输审核功能则会出现如下错误: “500 OOPS: 无法改变目录”。
SELinux 在 /etc/selinux/
位置, config
为配置文件, 默认配置文件内容如下:
# 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 two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
附录
常见问题
1. Q: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
A: vsftpd 新版本不允许根目录有写入的权限, 需要在 vsftpd.conf
中加入 allow_writeable_chroot=YES
。
2. Q:500 OOPS: bad bool value in config file for: write_enable
A:/etc/vsftpd/vuser_conf/
文件夹下的文件清除空格和中文。
3. Q:500 OOPS: config file not owned by correct user, or not a file
A:sudo chown -R root:root /etc/vsftpd
和 sudo chown -R root:root /etc/vsftpd.conf
把这些文件设置为 root
用户的即可。