前言
vsftpd是一款在Linux發行版中最受推崇的FTP服務器程序,特點是小巧輕快,安全易用,目前在開源操作系統中常用的FTP套件主要有proftpd、pureftp、ServU和wu-ftpd等。本文將講解vsftpd的基本功能和如何基于PAM和MySQL/MariaDB實現虛擬用戶訪問控制。
基礎配置介紹
工作原理
狀態響應碼
1xx:信息碼
2xx:成功狀態碼
3xx:進一步提示補全信息的狀態碼
4xx:客戶端錯誤
5xx:服務器端錯誤
用戶認證
虛擬用戶:僅用于訪問某特定服務中的資源
nsswitch: network server switch, 名稱解析框架 配置文件:/etc/nsswitch.conf 模塊:/lib64/libnss*, /usr/lib64/libnss* pam: pluggable authentication module, 用戶認證框架 模塊:/lib64/security/ 配置文件:/etc/pam.conf, /etc/pam.d/*
系統用戶通過ftp訪問的資源的位置:用戶自己的家目錄
虛擬用戶通過ftp訪問的資源的位置:給虛擬用戶指定的映射成為的系統用戶的家目錄
配置文件
vsftpd在CentOS6.6的配置文件
用戶認證配置文件:/etc/pam.d/vsftpd 服務腳本:/etc/rc.d/init.d/vsftpd 配置文件目錄:/etc/vsftpd 主配置文件:/etc/vsftpd/vsftpd.conf 匿名用戶(映射為ftp用戶)共享資源位置:/var/ftp
配置文件詳解
匿名用戶的設置 anonymous_enable=YES:允許匿名登錄 anonymous_upload_enable=YES:允許上傳文件 anonymous_other_write_enable=YES:允許刪除文件 anonymous_mkdir_write_enable=YES:允許創建目錄 注:啟用此功能,ftp用戶對/var/ftp目錄仍無權限,可在/var/ftp/目錄下新建目錄, 如/var/ftp/upload/,并給ftp用戶設置權限 setfacl -m u:ftp:rw /var/ftp/upload 系統用戶的配置 local_enable=YES:允許登錄 write_enable=YES:允許上傳文件 禁錮所有的ftp本地用戶于其家目錄中 chroot_local_user={YES|NO} 禁錮指定用戶于家目錄中 chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list 日志配置 xferlog_enable=YES xferlog_std_format=YES xferlog_file=/var/log/xferlog 改變上傳文件的屬主 chown_uploads=YES chown_username=whoever 上傳文件的umask anon_umask:匿名用戶上傳文件的umask local_umask:本地用戶上傳文件的umask vsftpd使用pam完成用戶認證,其用到的pam配置文件 pam_service_name=vsftpd 控制用戶登錄:/etc/vsftpd/ftpusers中的用戶都不允許使用ftp服務,基于pam 是否啟用控制用戶登錄的列表文件 userlist_enable=YES userlist_deny=YES|NO 默認文件為/etc/vsftpd/user_list 連接限制 max_clients: 最大并發連接數 max_per_ip: 每個IP可同時發起的并發請求數 傳輸速率 anon_max_rate:匿名用戶的最大傳輸速率,單位是bytes/s local_max_rate:本地用戶的最大傳輸速率,單位是bytes/s 自定義信息配置 ftpd_banner=Welcome to FTP Server #自定義 dirmessage_enable=YES #需創建.message文件
虛擬用戶訪問控制
虛擬用戶
所有的虛擬用戶會被統一映射為一個指定的系統賬號,訪問的共享位置即為此系統賬號的家目錄
各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定
虛擬用戶的存放方式:
hash編碼的文件(奇數行為用戶名,偶數行為密碼)
關系型數據庫(通過第三方模塊pam-mysql實現認證)
工作原理
配置過程
環境準備
FTP服務器:172.16.10.10(CentOS6.6)
數據庫服務器:172.16.10.211(CentOS6.6),MariaDB
安裝所需程序
首先FTP服務器需要安裝vsftpd和pam_mysql,數據庫服務器需要安裝MySQL或者MariaDB,我這里已經安裝完畢了,就直接開始配置了
創建虛擬用戶
[root@MariaDB ~]# mysql MariaDB [(none)]> CREATE DATABASE vsftpd; MariaDB [(none)]> use vsftpd; MariaDB [vsftpd]> GRANT SELECT ON vsftpd.* TO vsftp@'172.16.10.10' IDENTIFIED BY 'vpass'; MariaDB [vsftpd]> FLUSH PRIVILEGES; MariaDB [vsftpd]> CREATE TABLE users ( -> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name VARCHAR(50) BINARY NOT NULL, -> password CHAR(48) BINARY NOT NULL ); #添加虛擬用戶 MariaDB [vsftpd]> INSERT INTO users (name,password) VALUES ('tom',password('scholar')); #password('PASSWORD')加密密碼 MariaDB [vsftpd]> INSERT INTO users (name,password) VALUES ('alice',password('scholar'));
vsftpd配置
[root@lab ~]# vim /etc/pam.d/vsftpd.mysql #創建pam認證文件 auth required pam_mysql.so user=vsftp passwd=vpass host=172.16.10.211 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 #密碼經過加密,crypt值為2 account required pam_mysql.so user=vsftp passwd=vpass host=172.16.10.211 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 [root@lab ~]# useradd -s /sbin/nologin -d /var/ftproot vuser #創建虛擬用戶映射的系統用戶及對應的目錄 [root@lab ~]# chmod go+rx /var/ftproot #給予權限 [root@lab ~]# vim /etc/vsftpd/vsftpd.conf #請確保已經啟用了以下選項 anonymous_enable=YES local_enable=YES write_enable=YES anon_upload_enable=NO anon_mkdir_write_enable=NO chroot_local_user=YES #添加以下選項 guest_enable=YES guest_username=vuser #設置的映射系統用戶 #并確保pam_service_name選項的值如下所示 pam_service_name=vsftpd.mysql #創建的pam認證文件
配置虛擬用戶具有不同的訪問權限
vsftpd可以在配置文件目錄中為每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,只需要在vsftpd.conf指定其路徑及名稱即可。
配置vsftpd為虛擬用戶使用配置文件目錄
[root@lab ~]# vim /etc/vsftpd/vsftpd.conf #添加如下選項 user_config_dir=/etc/vsftpd/vusers_config
創建所需要目錄,并為虛擬用戶提供配置文件
[root@lab ~]# mkdir /etc/vsftpd/vusers_config [root@lab ~]# cd /etc/vsftpd/vusers_config/ [root@lab vusers_config]# touch tom alice
配置虛擬用戶的訪問權限
虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。比如,如果需要讓tom用戶具有上傳文件的權限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下選項即可。
[root@lab vusers_config]# vim tom anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES [root@lab vusers_config]# vim alice anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO
啟動服務,設置開機自啟,查看21端口是否被監聽
測試虛擬用戶
The end
好了,FTP基于PAM和MySQL/MariaDB的虛擬用戶訪問控制,就說到這里啦,配置ftp過程中請確保不要敲多空格,否則是會報錯或者登錄失敗的,我就深受其害,這確實是個坑,部署過程中遇到問題可留言,多謝關注呦。以上僅為個人學習整理,如有錯漏,大神勿噴~~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/3442
一如既往的認真,堅持,堅信,收獲最大的一定是自己。加油