CentOS 7 之源码编译安装 VSFtpd

▪ 环境

操作系统:CentOS 7.4(阿里云,最小化安装)

软件版本:VSFtpd 3

▪ 安装

1. 基础软件

通过 rpm -qa | grep name 的方式验证以下软件包是否已全部安装。

gcc gcc-c++ libcap libcap-devel tcp_wrappers tcp_wrappers-devel db4-utils pam-devel

如果缺少相关的软件包,可通过 yum -y install 的方式在线安装,或直接从系统安装光盘中找到并通过 rpm -ivh 的方式安装。

2. 目录设置
// 创建自定义配置目录
$ 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
3. 编译安装

下载并配置安装文件:

$ 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. 配置 VSFtpd

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
5. 配置开机自启动

由于 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
9. 相关命令
$ systemctl stop vsftpd.service
$ systemctl start vsftpd.service
$ systemctl status vsftpd.service

你可能感兴趣的:(服务器端,Linux,CentOS,FTP)