vsftpd安装详解

来源:互联网 发布:淘宝赚运费险 编辑:程序博客网 时间:2024/05/18 03:32

    windows服务器下的ftp server以前用的是filezilla,linux下还是使用vsftpd,环境centos 6.x。

1、安装软件

rpm -qa vsftpdyum install vsftpd

 

2、编辑配置文件

vim /etc/vsftpd/vsftpd.conf

vim命令行模式下输入:1,$d清空配置信息

将以下配置信息粘进去就好了

listen=YESbackground=YESanonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022anon_upload_enable=NOanon_mkdir_write_enable=NOdirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESchown_uploads=NOxferlog_file=/var/log/vsftpd.logxferlog_std_format=YESasync_abor_enable=YESascii_upload_enable=YESascii_download_enable=YESftpd_banner=Welcome to FTP serverspam_service_name=vsftpdchroot_local_user=NOchroot_list_enable=YESchroot_list_file=/etc/vsftpd/vsftpd.chroot_list

添加用户列表文件并启动服务

touch /etc/vsftpd/vsftpd.chroot_list
service vsftpd start

 

3、添加用户和目录

useradd ftptest -d /home/ftptestchown -R ftptest /home/ftptestpasswd ftptest

将新建的用户添加到chroot_list中

echo  'ftptest'>> /etc/vsftpd/vsftpd.chroot_listservice vsftpd restart

开启服务端口

vim /etc/sysconfig/iptables  -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT  service iptables restart  

 

4、测试连接

选用ftp客户端(我自己用的是chinaftp)

结果报了“cannot change directory /home/ftptest”错误

设置selinux如下:

[ftptest@kristoffer home]$ getsebool -a | grep ftpallow_ftpd_anon_write --> offallow_ftpd_full_access --> offallow_ftpd_use_cifs --> offallow_ftpd_use_nfs --> offftp_home_dir --> offftpd_connect_db --> offftpd_use_passive_mode --> offhttpd_enable_ftp_server --> offtftp_anon_write --> off
[ftptest@kristoffer home]$ setsebool -P ftpd_home_dir 1[ftptest@kristoffer home]$ setsebool -P allow_ftpd_full_access 1


测试连接 OK!

5、vsftpd虚拟用户的配置

    vsftpd中的用户有三种形式,第一种是匿名用户,第二种本地用户,第三种虚拟用户。采用虚拟用户可以很好地保证操作系统的安全性,在大量FTP用户帐号的情况下,减轻操作系统的负担,还有虚拟用户的帐号权限设置更加方便,存储位置更加灵活。

    PAM(Plugable Authentication Module,可拔插认证模块)是一种完成通用认证功能的程序,它可以被程序调用,是vsftpd支持的认证方式。现在开始配置:

    cd ~到用户根目录,vim ftp_user.txt,设置用户和密码,奇数行是用户偶数行是密码:

user1password1user2password2user2password2

    通过rpm -qa | grep db4查看系统是否安装了db4,db4、db4-devel、db4-utils如果都在了就没问题

    然后就是生成数据库并设置文件权限

db_load -T -t hash -f ./ftp_user.txt /etc/vsftpd/ftp_user.dbchmod 600 /etc/vsftpd/ftp_user.db

    然后vim新建/etc/pam.d/vsftpd_login文件(pam运行的脚本),输入内容如下:

auth required pam_userdb.so db=/etc/vsftpd/ftp_useraccount required pam_userdb.so db=/etc/vsftpd/ftp_user

    pam_userdb.so在32位服务器是位于/lib/security/,在64位服务器是位于/lib64/security/

    建立所有FTP虚拟用户帐号使用的操作系统帐号,并设置帐号的工作目录和权限:

useradd -d /home/myweb -s /sbin/nologin ftp_virtchmod 700 /home/myweb

    配置vsftpd.conf,添加虚拟用户:

guest_enable=YESguest_username=ftp_virtpam_service_name=vsftpd_login

    操作系统本身有一套控制用户权限的机制,当vsftpd采用本地用户登录时,本地用户对文件的权限是由操作系统规定的,如果要求所有的虚拟用户对操作系统的权限是一样的,可以在vsftpd.conf中使用virtual_use_local_privs=YES配置,其功能是使虚拟用户权限与操作系统中所对应的用户的权限一样,这样就可以通过设置本地用户权限来决定虚拟用户的权限。但如果不同用户采用不同的权限策略,应该在vsftpd.conf中添加user_config_dir=/etc/vsftpd,然后创建独立目录:mkdir /var/ftp/dir1,mkdir /var/ftp/dir2。设置两个目录的权限chown ftp_virt mkdir /var/ftp/dir1,chown ftp_virt mkdir /var/ftp/dir2。最后,在/etc/vsftpd目录下建立3个文件,文件名为3个对应的虚拟帐号:

#vim /etc/vsftpd/user1local_root=/var/ftp/dir1#vim /etc/vsftpd/user2local_root=/var/ftp/dir2#vim /etc/vsftpd/user3local_root=/var/ftp/dir3write_enable=YESanonymous_enable=NO anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YESanon_other_write_enable=YES local_umask=022download_enable=Yes    
重启测试连接,如果不能连接尝试iptables -F或关闭SELinux后能否连上。 通常情况下同时设置INPUT表和OUTPUT表就能实现PORT模式的连接。
-A INPUT -p tcp --dport 21 -j ACCEPT-A OUTPUT -p tcp --dport 21 -j ACCEPT

     发现虚拟用户用IE做客户端会出现将目录指向系统根目录的危险BUG,所以将vsftpd.conf中的chroot_local_user=YES注释去掉,将用户访问目录限制在当前用户目录。

0 0
原创粉丝点击