之前一直都用yum安装的vsftpd,但是版本太低了。所以这次在自己的VPS中尝试编译安装。
首先下载安装包,我安装的是3.0.2版本。
安装依赖包
我在安装时提示这个包没有:
yum install libcap-devel.x86_64
编译vsftpd
进入 解压后的目录,运行make命令,就可以开始编译了。非常简单。
编译完成后,会在目录下生成一个名为vsftpd的可执行文件,这个就是主程序了。
安装vsftpd
#创建vsftpd的目录 mkdir /opt/ProgramFiles/vsftp mkdir /opt/ProgramFiles/vsftp/conf #复制文件,到指定的目录 cp vsftpd /opt/ProgramFiles/vsftp/ cp vsftpd.conf /opt/ProgramFiles/vsftp/conf/ cp vsftpd.conf.5 /usr/share/man/man5 cp vsftpd.8 /usr/share/man/man8 #这个是pam认证相关的文件 cp RedHat/vsftpd.pam /etc/pam.d/ftp
修改/etc/pam.d/ftp文件,因为配置文件目录改变了,默认的为/etc/vsftpd。
#%PAM-1.0 auth required /lib/security/pam_listfile.so item=user sense=deny file=/opt/ProgramFiles/vsftpd/conf/ftpusers onerr=succeed auth required /lib/security/pam_unix.so shadow nullok auth required /lib/security/pam_shells.so account required /lib/security/pam_unix.so session required /lib/security/pam_unix.so
创建/etc/init.d/vsftpd文件
我修改后的内容如下,主要修改的是路径,改成自己的就行了。
#!/bin/bash # ### BEGIN INIT INFO # Provides: vsftpd # Required-Start: $local_fs $network $named $remote_fs $syslog # Required-Stop: $local_fs $network $named $remote_fs $syslog # Short-Description: Very Secure Ftp Daemon # Description: vsftpd is a Very Secure FTP daemon. It was written completely from # scratch ### END INIT INFO # 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: /opt/ProgramFiles/vsftpd/conf/vsftpd.conf # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network RETVAL=0 prog="vsftpd" start() { # Start daemons. # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 1 [ -x /opt/ProgramFiles/vsftpd/vsftpd ] || exit 1 if [ -d /opt/ProgramFiles/vsftpd/conf ] ; then CONFS=`ls /opt/ProgramFiles/vsftpd/conf/*.conf 2>/dev/null` [ -z "$CONFS" ] && exit 6 PROC_FAILED=0 for i in $CONFS; do site=`basename $i .conf` echo -n $"Starting $prog for $site: " daemon /opt/ProgramFiles/vsftpd/vsftpd $i RETVAL=$? echo if [ $RETVAL -eq 0 ] && [ ! -f /var/lock/subsys/$prog ]; then touch /var/lock/subsys/$prog elif [ $RETVAL -ne 0 ]; then ps -FC vsftpd | grep "$i" > /dev/null RETVAL=$? if [ $PROC_FAILED -eq 0 ] && [ $RETVAL -ne 0 ]; then PROC_FAILED=1 fi fi done if [ $RETVAL -eq 0 ] && [ $PROC_FAILED -ne 0 ]; then RETVAL=1 fi 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|try-restart|force-reload) if [ -f /var/lock/subsys/$prog ]; then stop start RETVAL=$? fi ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|try-restart|force-reload|status}" exit 1 esac exit $RETVAL
修改配置文件vsftpd.conf
accept_timeout=30 anonymous_enable=NO background=YES connect_from_port_20=YES connect_timeout=60 chown_uploads=YES chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/opt/ProgramFiles/vsftpd/conf/chroot_list data_connection_timeout=60 delete_failed_uploads=YES dirmessage_enable=NO dual_log_enable=NO force_dot_files=YES idle_session_timeout=300 local_enable=YES local_umask=002 local_max_rate=0 listen=YES listen_ipv6=NO listen_port=21 log_ftp_protocol=NO max_clients=5 max_per_ip=10 one_process_model=NO pam_service_name=vsftpd pasv_addr_resolve=YES pasv_enable=YES pasv_min_port=65400 pasv_max_port=65410 syslog_enable=NO tcp_wrappers=NO userlist_enable=YES userlist_deny=NO userlist_file=/opt/ProgramFiles/vsftpd/conf/user_list use_localtime=YES write_enable=YES xferlog_enable=NO #xferlog_file=/var/log/xferlog #xferlog_std_format=NO
默认启用了chroot,所登录的用户被固定在自己的主目录下,如果要某个用户不被chroot,将将其登录名写入chroot_list文件中。
user_list文件则定义了,可以连接ftp的账号,默认是谁都不允许,只有在user_list中的用户才能登陆。
我的user_list文件中目前只有一个账号:myftpuser。
在/etc/pam.d/ftp文件中有用到一个文件ftpusers,这个文件中可以定义不允许登陆ftp的账号,比如各种系统内置账号。
apache mysql root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody ftp
创建ftp用户
#新建一个用户名为myftpuser的ftp账号,主目录为/var/www/web useradd -s /sbin/nologin -d /var/www/web -g ftp myftpuser #修改密码 passwd myftpuser #修改web文件目录html的权限与用户、组 chown -R myftpuser:ftp /var/www/web/html chmod -R 775 /var/www/web/html
需要注意的是,此版本的vsftpd,当chroot_local_user=YES时,登录用户的主目录必须是没有写权限的。
比如,新建的用户myftpuser的主目录为/var/www/web,那么就要使用命令chmod a-w /var/www/web来取消web目录的写权限。
而我的web文件,是放在/var/www/web/html目录下,这个目录我设置了775的权限。
SeLinux中开启FTP读写权限
setsebool -P allow_ftpd_full_access=1