创建FTP用户和指定访问目录
查看创建的账号
cat /etc/passwd
创建一个ftp的访问目录
mkdir -p /www/wwwroot
因为我之前已经创建了/www/wwwroot/
目录,并且这个目录的归属是www
组的www
用户,
所以现在只需要新建一个ftp宿主用户sftp
useradd -g www -s /bin/false -u 1003 sftp
# 更改目录权限
chown www:www /www/wwwroot
chmod -R 775 /www/wwwroot
如果还没有/www/wwwroot/
目录和www
组和www
用户的
# 创建一个组
groupadd www
# 创建一个用户,不允许登陆和不创主目录
useradd -s /bin/false -g www -M www
useradd -g www -s /bin/false -u 1003 sftp
# 更改目录权限
chown www:www /www/wwwroot
chmod -R 775 /www/wwwroot
安装vsftpd
安装依赖
yum -y install gcc gcc-c++ db4-utils pam-devel libcap tcp_wrappers-devel libXtst-devel libcap-devel
进入下载目录
mkdir -p /www/local/src
cd /www/local/src
编译安装配置vsftpd
#下载
wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz
#解压
tar zxvf vsftpd-3.0.3.tar.gz
进入vsftpd目录
cd /www/local/src/vsftpd-3.0.3
编辑
vim builddefs.h
显示如下
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL
## 改成
#define VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL
手动创建这两个目录即可,否则下面make install 会报错
mkdir -p /usr/local/man/man8/
mkdir -p /usr/local/man/man5/
编译源码
make
安装
make install
创建配置目录
mkdir -p /etc/vsftpd
拷贝配置文件
cp vsftpd.conf /etc/vsftpd
拷贝身份验证模块文件,让vsftpd支持本地用户登录
cp RedHat/vsftpd.pam /etc/pam.d/vsftpd
添加vsftpd自启动服务
配置vsftpd独立启动
vim /etc/xinetd.d/vsftpd
将disable = no
改成disable = yes
添加启动脚本
vim /etc/rc.d/init.d/vsftpd
添加如下内容
#!/bin/bash
#
# vsftpd This Shell script takes care of starting and stopping
# standalone vsftpd.
#
# chkconfig: - 60 50
# description: Vsftpd is a ftp daemon, which is the program
# that answers incoming ftp service requests.
# processname: vsftpd
# config: /etc/vsftpd/vsftpd.conf
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x /usr/local/sbin/vsftpd ] || exit 0
RETVAL=0
prog="vsftpd"
start() {
# Start daemons.
if [ -d /etc/vsftpd ] ; then
for i in `ls /etc/vsftpd/*.conf`; do
site=`basename $i .conf`
echo -n $"Starting $prog for $site: "
/usr/local/sbin/vsftpd $i &
RETVAL=$?
[ $RETVAL -eq 0 ] && {
touch /var/lock/subsys/$prog
success $"$prog $site"
}
echo
done
else
RETVAL=1
fi
return $RETVAL
}
stop() {
# Stop daemons.
echo -n $"Shutting down $prog: "
killproc $prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
RETVAL=$?
fi
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
exit $RETVAL
设置启动权限
chmod +x /etc/rc.d/init.d/vsftpd
# 添加开机自动启动服务
chkconfig --add vsftpd
chkconfig vsftpd on
# 查看vsftpd服务状态
service vsftpd status
# 启动vsftpd服务
service vsftpd start
# 重启vsftpd服务
service vsftpd restart
编辑配置文件
直接查看当前有效配置
cat vsftpd.conf | grep -v "#"
这是看看没有注释掉的配置参数
如下
anonymous_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
listen=YES
然而这并不是我们想要的,接下来配置我们需要的参数
备份默认配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.default
删除默认配置文件
rm /etc/vsftpd/vsftpd.conf
新建一份配置文件
vim /etc/vsftpd/vsftpd.conf
写入内容如下
#端口
listen_port=10080
local_root=/www/wwwroot
anonymous_enable=NO
tcp_wrappers=YES
#读写配置
listen=YES
local_enable=YES
write_enable=YES
#功能设置
max_clients=5
max_per_ip=3
local_umask=022
dirmessage_enable=YES
connect_from_port_20=YES
ascii_upload_enable=YES
ascii_download_enable=YES
#日志配置
dual_log_enable=YES
xferlog_std_format=YES
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd/vsftpd.log
xferlog_file=/var/log/vsftpd/xferlog
#限制用户设置
allow_writeable_chroot=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#虚拟用户模式
user_config_dir=/etc/vsftpd/virtual_user
guest_enable=YES
guest_username=sftp
pam_service_name=vsftpd
virtual_use_local_privs=YES
#设置被动模式及端口范围
pasv_enable=YES
pasv_min_port=52800
pasv_max_port=52900
pasv_promiscuous=YES
创建虚拟用户
创建虚拟用户目录
mkdir /etc/vsftpd/virtual_user
创建用户列表,注意奇数行是用户名,偶数行是密码
vim /etc/vsftpd/virtual_user.txt
添加用户如下,注意奇数行是用户名,偶数行是密码
test
123456
test2
123456
生成虚拟口令认证的db文件
db_load -T -t hash -f /etc/vsftpd/virtual_user.txt /etc/vsftpd/virtual_user.db
编辑vsftpd的PAM认证文件
vim /etc/pam.d/vsftpd
保留第一行,将里面其他的都注释掉,在最后增加以下两句
# 32位系统
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/virtual_user
account required /lib/security/pam_userdb.so db=/etc/vsftpd/virtual_user
# 64位系统
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_user
创建虚拟用户目录配置文件
添加账户,文件名等于virtual_user.txt里面的账户名,否则下面设置无效
vim /etc/vsftpd/virtual_user/test
写入内容如下
# 每个虚拟用户的单独配置,会覆盖模板配置文件配置
local_root=/www/wwwroot
anon_umask=022
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
建立限制用户访问目录的空文件
touch /etc/vsftpd/chroot_list
创建日志文件
mkdir -p /var/log/vsftpd
touch /var/log/vsftpd/vsftpd.log
touch /var/log/vsftpd/xferlog
重启vsftpd服务
service vsftpd restart
添加SSL证书支持
建立证书
检查vsftpd是否支持ssl模块
ldd $(which vsftpd) | grep ssl
#显示如下
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f64c2470000)
建立专门给vsftpd使用的凭证数据。CentOS有一个建立凭证的地方/etc/pki/tls/certs/
cd /etc/pki/tls/certs
# 生成密钥文件
make vsftpd.pem
#
# 接下来就是证书的一些签名信息,按照具体的填完即可
#
#
#
# 复制证书到vsftpd目录
cp -a vsftpd.pem /etc/vsftpd/
ll /etc/vsftpd/vsftpd.pem
# -rw------- 1 root root 3145 Aug 13 17:35 /etc/vsftpd/vsftpd.pem
修改vstpd.conf配置文件
#停止服务
service vsftpd stop
#编辑配置文件
vim /etc/vsftpd/vsftpd.conf
添加SSL配置,具体如下
ssl_enable=YES
allow_anon_ssl=YES
force_anon_data_ssl=YES
force_anon_logins_ssl=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
#ssl_sslv2=NO
#ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem
最后保存,重启服务就OK了
#启动服务
service vsftpd start
#重启服务
service vsftpd restart
OK,到此安装完成