基础介绍什么的就自行搜索了。下面直接从安装配置开始。
环境:centos6
一、安装
yum -y install vsftpd
安装完成后可以直接启动。service vsftpd start
新建一个用户作为虚拟用户的宿主账户:
useradd vuser -s /sbin/nologin
passwd vuser
二、配置
使用pam_mysql或者db_load的认证方式:
a)使用db_load来设置虚拟用户
1、在/etc/vsftpd/下创建两个目录
mkdir /etc/vsftpd/vuser_dir #后续存放虚拟用户的配置文件
mkdir /etc/vsftpd/vuser_db #存放虚拟用户的认证文件
2、生成数据库文件
cd /etc/vsftpd/vuser_db/ vim login_vuser admin #依次单行用户名,密码 123456789 test 987654321
db_load -T -t hash -f /etc/vsftpd/vuser_db/login_vuser /etc/vsftpd/vuser_db/vuser.db #生成虚拟用户的数据库文件
3、更改pam认证模块
cd /etc/pam.d/ vim vsftpd.vuser auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuser #此处注意不要加.db后缀 account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuser
4、更改vsftpd的配置文件
vim /etc/vsftpd/vsftpd.conf anonymous_enable=NO #匿名用户访问控制 local_enable=YES #本地用户访问 write_enable=YES #用户的写权限 local_umask=022 ###################################################### dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES ###################################################### listen=YES user_config_dir=/etc/vsftpd/vuser_dir pam_service_name=/etc/pam.d/vsftpd.vuser userlist_enable=NO tcp_wrappers=YES chroot_list_enable=YES #不允许用户切换家目录 ###################################################### guest_enable=YES #开启匿名用户 guest_username=vuser ###################################################### chown_uploads=YES #是否允许上传的文件改变属主 chown_username=root #改变为哪个属主 ###################################################### pasv_min_port=2222 #iptables放行ftp中的端口段 pasv_max_port=2230 其他未列出的配置选项都是注释了的。具体的含义可以自行搜索 如果需要也可以配置到虚拟用户的配置文件中。
5、为虚拟用户创建对应的配置文件
cd /etc/vsftpd/vuser_dir/ #创建两个虚拟用户的配置文件test,admin vim test anon_upload_enable=YES anon_umask=022 #此处设置的是匿名用户上传文件的umask chown_upload_mode=0644 #此处设置的是长传文件后更改的权限 download_enable=YES anon_other_write_enable=NO anon_mkdir_write_enable=NO local_root=/some/to/path/ ###################################################### vim admin anon_upload_enable=YES download_enable=YES anon_umask=022 chown_upload_mode=0644 anon_other_write_enable=YES anon_mkdir_write_enable=YES anon_world_readable_only=NO local_root=/some/to/path/
6、重启vsftpd测试登陆
service vsftpd restart lftp -u username,password host #测试 # 这里如果无法登陆,在配置文件的目录位置创建一个chroot_list文件在测试。
b)使用pam_mysql来认证用户
1、创建目录存储虚拟用户配置文件
mkdir /etc/vsftpd/vuser_dir
2、安装mysql-server mysql-devel openssl-devel pam_mysql软件
yum -y install mysql-server mysql-devel openssl-devel pam_mysql #epel源里有pam_mysql模块
3、登陆mysql创建vsftpd库文件等
mysql -uroot -p password create database vsftpd grant all on vsftpd.* to 'vsftpd'@'localhost' identified by 'vsftpd'; grant all on vsftpd.* to 'vsftpd'@'127.0.0.1' identified by 'vsftpd'; use vsftpd; CREATE TABLE `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`password` char(48) NOT NULL,PRIMARY KEY (`id`)); INSERT INTO users (name,password) VALUES ('username','password'),('username','password'); flush privileges; mysql -uUSERNAME -pPASSWORD #测试上述创建的用户是否有效
4、创建mysql的pam认证文件
vim vsftpd.mysql auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password cypt=0 account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password cypt=0
5、修改vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf anonymous_enable=YES #开启匿名用户访问 local_enable=YES #本地用户访问 write_enable=YES #用户的写权限 local_umask=022 ###################################################### dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES ###################################################### listen=YES user_config_dir=/etc/vsftpd/vuser_dir pam_service_name=/etc/pam.d/vsftpd.mysql #这里与上面的hash认证是有区别的 userlist_enable=NO tcp_wrappers=YES chroot_list_enable=YES #不允许用户切换家目录 ###################################################### guest_enable=YES #开启匿名用户 guest_username=vuser ###################################################### chown_uploads=YES #是否允许上传的文件改变属主 chown_username=root #改变为哪个属主
6、为虚拟用户创建对应的文件
cd /etc/vsftpd/vuser_dir/ #创建两个虚拟用户的配置文件 vim test anon_upload_enable=YES download_enable=YES anon_umask=022 chown_upload_mode=0644 anon_other_write_enable=NO anon_mkdir_write_enable=NO local_root=/some/to/path/ ###################################################### vim admin anon_upload_enable=YES download_enable=YES anon_umask=022 chown_upload_mode=0644 anon_other_write_enable=YES anon_mkdir_write_enable=YES anon_world_readable_only=NO local_root=/some/to/path/
7、重启vsftpd测试登陆
service vsftpd restart lftp -u username,password host #测试
三、所有的针对于用户权限的配置都可以在包含的虚拟用户配置文件的路径下进行单独的配置选项。
如果其中配置好登陆不上,可以查看安全认证日志。
四、作为补充说明
在线上的Linux搭建的vsftpd,死活连不上。测试是防火墙的问题。
防火墙是使用默认的安全策略;其中有一条是:
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited # 拒绝上述不符的数据包
查看客户端默认使用的是被动连接;于是就放行被动模式指定一段端口分配给ftp做随机端口:
就需要在vsftpd.conf中多添加一段端口用于连接的端口:
pasv_min_port=2222 #iptables放行ftp中的端口段 pasv_max_port=2230
然后在iptables中放行即可。
五、FTP更精细的权限控制
使用cmds_allowed来控制更精细一点的权限。其实也没有多大用处。
# ABOR - abort a file transfer 取消文件传输 # CWD - change working directory 更改目录 # DELE - delete a remote file 删除文件 # LIST - list remote files 列出目录 # MDTM - return the modification time of a file 返回文件的更新时间 # MKD - make a remote directory 新建文件夹 # NLST - name list of remote directory # PASS - send password # PASV - enter passive mode # PORT - open a data port 打开一个传输端口 # PWD - print working directory 显示当前工作目录 # QUIT - terminate the connection 退出 # RETR - retrieve a remote file 下载文件 # RMD - remove a remote directory # RNFR - rename from # RNTO - rename to # SITE - site-specific commands # SIZE - return the size of a file 返回文件大小 # STOR - store a file on the remote host 上传文件 # TYPE - set transfer type # USER - send username # less common commands: # ACCT* - send account information # APPE - append to a remote file # CDUP - CWD to the parent of the current directory # HELP - return help on using the server # MODE - set transfer mode # NOOP - do nothing # REIN* - reinitialize the connection # STAT - return server status # STOU - store a file uniquely # STRU - set file transfer structure # SYST - return system type
以上是cmds的全部命令。