基礎介紹什麼的就自行搜索了。下面直接從安裝配置開始。python
環境:centos6mysql
1、安裝sql
yum -y install vsftpd
安裝完成後能夠直接啓動。service vsftpd start數據庫
新建一個用戶做爲虛擬用戶的宿主帳戶:vim
useradd vuser -s /sbin/nologincentos
passwd vuser安全
2、配置app
使用pam_mysql或者db_load的認證方式:less
a)使用db_load來設置虛擬用戶tcp
一、在/etc/vsftpd/下建立兩個目錄
mkdir /etc/vsftpd/vuser_dir #後續存放虛擬用戶的配置文件
mkdir /etc/vsftpd/vuser_db #存放虛擬用戶的認證文件
二、生成數據庫文件
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 #生成虛擬用戶的數據庫文件
三、更改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
四、更改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 其餘未列出的配置選項都是註釋了的。具體的含義能夠自行搜索 若是須要也能夠配置到虛擬用戶的配置文件中。
五、爲虛擬用戶建立對應的配置文件
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/
六、重啓vsftpd測試登錄
service vsftpd restart lftp -u username,password host #測試 # 這裏若是沒法登錄,在配置文件的目錄位置建立一個chroot_list文件在測試。
b)使用pam_mysql來認證用戶
一、建立目錄存儲虛擬用戶配置文件
mkdir /etc/vsftpd/vuser_dir
二、安裝mysql-server mysql-devel openssl-devel pam_mysql軟件
yum -y install mysql-server mysql-devel openssl-devel pam_mysql #epel源裏有pam_mysql模塊
三、登錄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 #測試上述建立的用戶是否有效
四、建立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
五、修改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 #改變爲哪一個屬主
六、爲虛擬用戶建立對應的文件
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/
七、重啓vsftpd測試登錄
service vsftpd restart lftp -u username,password host #測試
3、全部的針對於用戶權限的配置均可以在包含的虛擬用戶配置文件的路徑下進行單獨的配置選項。
若是其中配置好登錄不上,能夠查看安全認證日誌。
4、做爲補充說明
在線上的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中放行便可。
5、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的所有命令。