操作系统:CentOS 7.4(阿里云,最小化安装)
软件版本:VSFtpd 3
通过 rpm -qa | grep name
的方式验证以下软件包是否已全部安装。
gcc gcc-c++ libcap libcap-devel tcp_wrappers tcp_wrappers-devel db4-utils pam-devel
如果缺少相关的软件包,可通过 yum -y install
的方式在线安装,或直接从系统安装光盘中找到并通过 rpm -ivh
的方式安装。
// 创建自定义配置目录
$ mkdir -p /usr/local/vsftpd/conf
$ mkdir -p /usr/local/vsftpd/conf/user
$ mkdir -p /usr/local/vsftpd/bin
$ mkdir -p /usr/local/vsftpd/lib
$ mkdir -p /usr/local/vsftpd/empty
$ mkdir -p /var/log/vsftpd
// ftp 系统用户的家目录
// 没有该目录可能导致错误:change directionoot:/var/nginx /home/nginx
$ mkdir -p /var/nginx
$ mkdir -p /home/nginx
$ touch /usr/local/vsftpd/conf/chroot
下载并配置安装文件:
$ cd /usr/local/src
$ wget https://fossies.org/linux/misc/vsftpd-3.0.3.tar.gz
$ tar zxvf vsftpd-3.0.3.tar.gz
$ cd /usr/local/src/vsftpd-3.0.3
$ vim builddefs.h
内容如下:
// 源码安装默认不支持tcp_wrappers和ssl
// 需要修改 builddefs.h
#define VSF_BUILD_TCPWRAPPERS // 表示支持TCP WRAPPERS
#define VSF_BUILD_PAM // 表示支持自定义虚拟用户登录;开启此项后本地用户将无法登录
#define VSF_BUILD_SSL // 表示支持SSL传输
编译:
$ make
注:64位操作系统可能会出现错误,需要执行 #cp /lib64/libcap.so.1 /lib/libcap.so.1
查看编译的vsftpd二进制文件是否加载了PAM:
$ ldd vsftpd // 看到libpam.so.0 => /lib/libpam.so.0表示已成功加载pam认证模块
// 若没有,请安装 pam-devel : #yum install pam-devel
拷贝执行文件:
$ cp vsftpd /usr/local/vsftpd/bin
4.1 设置配置文件
打开配置文件:
$ cp vsftpd.conf /usr/local/vsftpd/conf
$ vim /usr/local/vsftpd/conf/vsftpd.conf
设置配置项内容(虚拟用户):
anonymous_enable=NO // 不允许匿名登录
local_enable=YES // 允许本地用户登录
write_enable=YES // 允许本地用户写的权限
chroot_local_user=YES // 锁定用户根目录,不能切换到其他目录
chroot_list_enable=YES
chroot_list_file=/usr/local/vsftpd/conf/chroot
listen=YES
guest_enable=YES // 启用虚拟用户
guest_username=nginx // 虚拟用户映射的系统用户名为 nginx
pam_service_name=vsftpd // 设置 PAM 认证服务的配置文件名称,该文件存放在 /ect/pam.d 目录下
allow_writeable_chroot=YES // 从2.3.5之后,当锁定用户根目录后,如果发现根目录具有写权限则会报错
virtual_use_local_privs=YES // YES 表示虚拟用户使用与本地用户相同的权限,NO 表示则与匿名用户相同的权限
user_config_dir=/usr/local/vsftpd/conf/user // 定义用户个人配置文件所在的目录
secure_chroot_dir=/usr/local/vsftpd/empty
4.2 配置 VSFtpd 的 pam 认证模块(用于虚拟用户认证)
打开配置文件:
$ vim /etc/pam.d/vsftpd
添加如下内容:
auth required pam_userdb.so db=/usr/local/vsftpd/conf/user/login
account required pam_userdb.so db=/usr/local/vsftpd/conf/user/login
4.3 创建用户名密码文本文件
打开用户配置文件:
$ vim /usr/local/vsftpd/conf/user/login.txt
添加如下内容(一行用户名一行密码):
htdocs
111111
4.4 用 db_load 生成用户数据库
$ db_load -T -t hash -f /usr/local/vsftpd/conf/user/login.txt /usr/local/vsftpd/conf/user/login.db
$ chmod 600 /usr/local/vsftpd/conf/user/login.db
$ chmod 600 /usr/local/vsftpd/conf/user/login.txt
4.5 配置虚拟用户自定义配置文件
$ vim /usr/local/vsftpd/conf/user/htdocs
添加如下内容(htdocs拥有所有权限):
local_root=/data/httpd/htdocs
local_umask=022
write_enable=YES
由于 CentOS 7 使用 systemd 替换了 SysV, 所以 CentOS 6 下的 service 和 chkconfig 开机自启动将不在适用 CentOS
7。下面将介绍如何配置 MySQL 开机自启动。
新建服务文件:
$ vim /usr/lib/systemd/system/vsftpd.service
添加服务代码:
[Unit]
Description=Vsftpd Service
After=network.target syslog.target
[Service]
# start main service
ExecStart=/usr/local/vsftpd/bin/vsftpd /usr/local/vsftpd/conf/vsftpd.conf
# restart main service
ExecReload=/bin/kill -s HUP $MAINPID
# stop main service
ExecStop=/bin/kill -s QUIT $MAINPID
# use private tmp
PrivateTmp=true
[Install]
WantedBy=multi-user.target
启用服务文件:
$ systemctl enable vsftpd.service
$ systemctl stop vsftpd.service
$ systemctl start vsftpd.service
$ systemctl status vsftpd.service