我准备的操作系统是 64 位的 Red Hat,软件是 vsftpd-2.2.2.tar.gz。
首先,解压 vsftpd-2.2.2.tar.gz,并进入到解压后的目录:
[root@RicenOS softwares]# cd vsftpd-2.2.2
编译:
这里可能会报如下错误:
/lib/libpam.so.0: could not read symbols: File in wrong format
collect2: ld 返回 1
make: *** [vsftpd] 错误 1
出现这种错误,是因为 vsf_findlibs.sh 文件没有考虑到 64 位平台库文件位置,需要做如下修改:
输入命令::%s?lib/?lib64/?
然后保存。
接着,需要修改相关的 lib 链接:
lrwxrwxrwx 1 root root 16 06-10 23:10 /lib/libpam.so.0 -> libpam.so.0.81.5
[root@RicenOS vsftpd-2.2.2]# ls -l /lib64/libpam.so.0
libpam.so.0 libpam.so.0.81.5
[root@RicenOS vsftpd-2.2.2]# rm -rf /lib/libpam.so.0
[root@RicenOS vsftpd-2.2.2]# ln -s /lib64/libpam.so.0 /lib/libpam.so.0
清除之前编译的可执行文件及配置文件:
重新编译:
将编译后的可执行文件 vsftpd 拷贝到 /usr/local/sbin 目录下:
根据 vsftpd 自带的说明文档,创建所需的目录,拷贝相关的文件:
[root@RicenOS vsftpd-2.2.2]# mkdir -p /usr/local/man/man8
[root@RicenOS vsftpd-2.2.2]# cp vsftpd.conf.5 /usr/local/man/man5/
[root@RicenOS vsftpd-2.2.2]# cp vsftpd.8 /usr/local/man/man8/
[root@RicenOS vsftpd-2.2.2]# mkdir -p /etc/vsftpd
[root@RicenOS vsftpd-2.2.2]# cp vsftpd.conf /etc/vsftpd/
安装:
为了让 vsftpd 支持本地用户登录,将身份认证模块文件拷贝到系统中:
因为是 64 位系统,所以还需要对身份认证模块文件做一下修改:
输入命令::%s?lib/?lib64/?
然后将文件中的 file=/etc/ftpusers 修改为 file=/etc/vsftpd/ftpusers,并保存。
建立禁止使用 vsftpd 的用户列表文件:
编辑主配置文件:
1、anonymous_enable=YES 改为 anonymous_enable=NO,阻止匿名上传。
2、去掉 local_enable=YES、write_enable=YES 和 local_umask=022 前的注释。
3、去掉 chroot_list_enable=YES 和 chroot_list_file=/etc/vsftpd.chroot_list 前的注释,同时将chroot_list_file=/etc/vsftpd.chroot_list 修改为 chroot_list_file=/etc/vsftpd/chroot_list,阻止用户向上级切换目录。
4、去掉 ascii_upload_enable=YES 和 ascii_download_enable=YES 前的注释,允许使用 ASCII 模式上传和下载文件。
5、添加 pam_service_name=vsftpd,允许本地用户登录。
创建 Chroot 用户授权文件:
添加一个帐号:ricen
创建帐号 ricen 的主目录:
创建 ricen 帐号:
拷贝三个必需的文件到 ricen 的主目录下:
[root@RicenOS vsftpd-2.2.2]# cp /etc/skel/.bashrc /usr/ricen_file/
[root@RicenOS vsftpd-2.2.2]# cp /etc/skel/.bash_logout /usr/ricen_file/
设置 ricen 用户的密码:
将 ricen 主目录的权限赋予 ricen 用户:
接下来,需要编辑服务启动脚本:
内容如下:
# chkconfig: 35 60 50
# description: vsftpd is a ftp daemon.
#
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
[ ${NETWORKING} = "no" ] && exit 0
[ -x /usr/local/sbin/vsftpd ] || exit 0
RETVAL=0
PROG="vsftpd"
start(){
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(){
echo -n $"Shutting down $PROG: "
killproc $PROG
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$PROG
return $RETVAL
}
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
改变文件权限:
添加服务:
注意,默认安装的 vsftpd 是以 xinetd 的方式启动的。取消 xinetd 方式启动的方法:
把 disable = no 改成 disable = yes。
重启 xinetd:
Copyright © 2005-2023 by www.ricensoftwares.com.cn All Rights Reserved.