一、解压 vsftpd-3.0.3.tar.gz 并进入到解压后的目录:
[root@RicenOS ftp]# cd vsftpd-3.0.3
针对 64 位系统,需要修改 vsf_findlibs.sh 文件:
输入命令::%s?lib/?lib64/?
然后保存。接着,修改相关的 lib 链接:
[root@RicenOS vsftpd-3.0.3]# ln -s /lib64/libpam.so.0 /lib/libpam.so.0
对于 32 位系统,上述步骤可以省略。
二、编译:
针对 6.5 版本的 RHEL,这里编译完以后,是没有加载到 libpam.so.0 这一动态库文件,这会导致虚拟用户 530 登录失败。可以使用如下命令来查看是否成功加载了 libpam.so.0 这一动态库文件:
针对 6.5 版本 RHEL 的这一问题,只需要安装 pam-devel 软件包,然后重新编译下即可。
三、拷贝相关的文件:
[root@RicenOS vsftpd-3.0.3]# mkdir -pv /usr/local/man/man5
[root@RicenOS vsftpd-3.0.3]# mkdir -pv /usr/local/man/man8
[root@RicenOS vsftpd-3.0.3]# cp vsftpd.conf.5 /usr/local/man/man5/
[root@RicenOS vsftpd-3.0.3]# cp vsftpd.8 /usr/local/man/man8/
[root@RicenOS vsftpd-3.0.3]# mkdir -pv /etc/vsftpd
[root@RicenOS vsftpd-3.0.3]# cp vsftpd.conf /etc/vsftpd/
四、安装:
五、为虚拟用户创建本地系统用户 vsftpd,并且禁止这个用户登录访问系统:
六、创建虚拟用户列表:
ricen
12345678
smart
87654321
其中,第一行为第一个用户的帐号 ricen,第二行为 ricen 用户的密码。第三行为第二个用户的帐号 smart,第四行为 smart 用户的密码。以此类推……
七、创建虚拟用户数据库,在此之前需要先安装 db4-utils 工具包,该软件包可以在系统镜像安装包里找到:
使用 db_load 命令创建虚拟用户数据库:
设置虚拟用户数据库文件只有所有者有读写权限:
八、配置 PAM 文件:
内容如下:
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
九、配置 vsftpd:
1、anonymous_enable=YES 改为 anonymous_enable=NO,阻止匿名上传。
2、去掉 local_enable=YES、write_enable=YES 和 local_umask=022 前的注释。
3、去掉 ascii_upload_enable=YES 和 ascii_download_enable=YES 前的注释,允许使用 ASCII 模式上传和下载文件。
4、去掉 chroot_local_user=YES 前的注释,阻止用户向上级切换目录。
5、添加 allow_writeable_chroot=YES,解决 vsftpd 用户因为 home 目录为 root 权限而无法登录问题。
6、添加 pam_service_name=vsftpd,允许本地用户登录。
7、添加 guest_enable=YES,开启虚拟用户。
8、添加 guest_username=vsftpd,虚拟用户对应的系统用户 vsftpd。
9、添加 user_config_dir=/etc/vsftpd/vusers,设置用户配置文件的存放目录。
十、创建虚拟用户配置文件:
以 ricen 用户配置为例:
内容如下:
local_root=/opt/websites
# 开放 ricen 的下载权限
anon_world_readable_only=NO
# 开放 ricen 的上传权限
anon_upload_enable=YES
# 开放 ricen 创建目录的权限
anon_mkdir_write_enable=YES
# 开放 ricen 删除和重命名的权限
anon_other_write_enable=YES
# 虚拟用户的上传掩码
anon_umask=022
十一、把虚拟用户根目录的权限赋给虚拟用户映射的本地系统用户 vsftpd:
十二、配置系统服务:
内容如下:
# chkconfig: 35 23 28
# description: vsftpd Server
set -e
DESC="vsftpd"
DAEMON="/usr/local/sbin/vsftpd"
CONFIGFILE="/etc/vsftpd/vsftpd.conf"
PID=`lsof -i :21 | grep vsftpd | awk '{print $2}'`
start(){
if [[ $PID != "" ]]; then
echo "$DESC is already running."
else
echo "Starting $DESC ..."
$DAEMON $CONFIGFILE &
fi
}
stop(){
if [[ $PID != "" ]]; then
echo "Stopping $DESC ..."
lsof -i :21 | grep vsftpd | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1
else
echo "$DESC is not running.";
fi
}
restart(){
if [[ $PID != "" ]]; then
echo "Stopping $DESC ..."
lsof -i :21 | grep vsftpd | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1
fi
echo "Starting $DESC ..."
$DAEMON $CONFIGFILE &
}
status(){
if [[ $PID != "" ]]; then
echo "$DESC is running."
else
echo "$DESC is not running."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
echo "Usage: $0{start | stop | restart | status}"
exit 1
;;
esac
exit 0
[root@RicenOS vsftpd-3.0.3]# chmod +x /etc/rc.d/init.d/vsftpd
[root@RicenOS vsftpd-3.0.3]# chkconfig --level 35 vsftpd on
十三、取消 xinetd 方式启动:
把 disable = no 改成 disable = yes。如果有启用 xinetd 的话,需要重启 xinetd:
Copyright © 2005-2023 by www.ricensoftwares.com.cn All Rights Reserved.