VSFTP介紹
VSFTP(Very Secure FTP)是一種在Unix/Linux中非常安全且快速穩定的FTP伺服器,目前已經被許多大型站點所采用,如ftp.redhat.com,ftp.gnome.org等。
在vsftpd伺服器中支援3類使用者,分别是匿名使用者,本地使用者,和虛拟賬戶。用途及差別如下。
1)、匿名使用者:名為anonymous 或ftp 的FTP 使用者,匿名FTP 使用者登入後将FTP 伺服器中的/var/ftp 作為FTP 根目錄。匿名使用者通常用于提供公共檔案的下載下傳,如架設公共軟體下載下傳的FTP 伺服器,所有人都可以使用匿名使用者進行軟體下載下傳。
2)、本地使用者:賬号是系統使用者賬号(/etc/passwd),使用FTP 本地使用者賬号登入FTP 伺服器後,登入目錄為本地使用者的宿主目錄。本地FTP使用者賬号通常和Web 伺服器一起提供虛拟主機服務,作為網頁虛拟主機更新網頁的途徑。
3)、虛拟使用者:賬号是為了保證FTP 伺服器的安全性,由vsftpd 伺服器提供的非系統使用者賬号,相對于FTP的本地使用者來說,虛拟使用者隻是FTP伺服器的專有使用者,虛拟使用者隻能通路FTP伺服器所提供的資源。虛拟使用者FTP 登入後将把指定的目錄作為FTP 根目錄。虛拟使用者與本地使用者具有類似的功能,由于虛拟使用者賬号具有較高的安全性,可以替代本地使用者賬号使用。
下面将介紹在測試環境中vsftpd虛拟使用者應用的配置過程,下面介紹兩種方式。
實作基于DB檔案驗證的vsftpd虛拟使用者 yum install vsftpd
1 建立虛拟使用者清單檔案,将文本檔案轉化成特定格式的文本檔案,添加虛拟使用者密碼檔案
[root@centos vsftpd]#vim /etc/vsftpd/ftpvusers.txt ftp1 #使用者名 123456 #密碼 ftp2 centos
2 生成虛拟使用者密碼認證檔案
[root@centos vsftpd]# db_load -T -t hash -f ftpvusers.txt vuser.db

chmod 600 vuser.db #為了安全,使密碼不可見
3 建立作業系統的使用者和FTP通路目錄
useradd -d /var/ftpsite -s /sbin/nologin vuser # 建立ftp通路目錄,vuser是系統真是存在使用者,以後虛拟使用者都映射成vuser,/var/ftpsite自動生成家目錄
chmod 555 /var/ftpsite/ # 使vuser使用者有讀寫權限,給目錄權限
setfacl -d /var/ftpsite #删除權限
4 建立pam配置檔案
systemctl restart vsftpd
4 指定vsftp.conf配置檔案
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd #重新開機服務
5 配置各自虛拟使用者的配置檔案
mdkir /etc/vsftpd/vusers.d/ # 建立配置檔案存放的路徑
cd /etc/vsftpd/vusers.d/ # 進入此目錄建立各使用者自已的配置檔案
出現錯誤:500 OOPS: bad bool value in config file for: anon_upload_enable Login failed.
421 Service not available, remote server has closed connection
解決方法:ftp1的配置檔案末尾出現空格
準備ftp2的目錄
mkdir -p /app/ftp2/upload #建立子檔案
chown vuser /app/ftp2/upload #給使用者vuser權限
6 測試虛拟使用者登入FTP
修改ftp2的權限,使其能夠建立檔案,進行測試。
注意:實驗前關閉防火牆和selinux。
基于資料庫MYSQL驗證vsftpd虛拟使用者
Centos7和Centos6的不同:
Centos6: epel源裡放了pam_mysql子產品,可以yum install pam_mysql
Centos7:需要手動編譯pam_mysql子產品
1 實驗準備
兩台虛拟機,一台a主機作為ftp伺服器;一台b主機作為mysql資料庫伺服器。
2 安裝MySQL
①直接yum安裝mysql-server(centos 6)或者 mariadb-server(centos 7)
centos7:systemctl start mariadb.service # 啟動服務
systemctl enable mariadb # 設定為開機啟動
centos6:service mysqld restart # 啟動服務
chkconfig enable mysqld # 設定為開機啟動
②b主機資料庫配置:
1) 建立存儲虛拟使用者的資料庫和連接配接資料庫使用者
注:在這裡我用這種方法添加的虛拟使用者密碼都是經過MySQL加密的,加密後的密碼pam-mysql不能識别(MySQL和pam-mysql相容性有些問題),是以本次實驗使用明文儲存密碼。
select * from users; #檢視使用者資訊
FLUSH PRIVILEGES; #重新整理資料庫
2) 驗證b主機資料庫配置是否成功
3 a主機 ftp伺服器配置vsftpd服務
1)安裝開發包組和服務包
yum install mariadb vsftpd mariadb-devel pam-devel openssl-devel mariadb vsftpd
yum groupinstall "Development Tools"
注意:yum安裝時,出現You could try using --skip-broken to work around the problem.You could try running: rpm -Va --nofiles --nodigest問題。
解決方法:yum remove httpd-tools
yum clean all -->yum update
2)編譯安裝pam_mysql(centos7) 或yum install pam_mysql(centos6)
tar xvf pam_mysql-0.7RC1.tar.gz
make && make install #編譯安裝
3)編譯MySQL的PAM認證子產品
vim /etc/pam.d/vsftp.mysql # 為了友善管理并和以前的pam進行區分,我們建立自己的pam認證配置檔案
注意:參考README文檔,選擇正确的加密方式crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函數加密,3表示md5加密,4表示sha1加密auth 表示認證 pam_mysql.so子產品是預設的相對路徑,是相對/lib64/security/路徑而言,也可以寫絕對路徑;後面為給此子產品傳遞的參數 user=vsftpd 為登入mysql的使用者 passwd=magedu 登入mysql的的密碼 host=mysqlserver mysql伺服器的主機名或ip位址 db=vsftpd 指定連接配接msyql的資料庫名稱 table=users 指定連接配接資料庫中的表名 usercolumn=name 當做使用者名的字段 passwdcolumn=password 當做使用者名字段的密碼 crypt=2 密碼的加密方式為mysql password()函數加密 account 驗證賬号密碼正常使用 required 表示認證要通過
4 建立本地映射使用者并設定宿主目錄權限
# 建立虛拟使用者映射的系統使用者及對應的目錄
useradd -s /sbin/nologin -d /app/ftpsite ftvuser #建立作業系統賬号
# 去除ftp根目錄的寫權限,否者使用者登入将受到檔案系統權限的限制;
chmod 555 /app/ftpsite/
mkdir /app/ftpsite/upload
setfacl –m u:ftvuser:rwx /app/ftpsite/upload #為了使得使用者能上傳檔案,我們以acl方式對相關目錄設定權限,友善單個管理
5 在MySQL中建立使用者密碼資料庫
# 確定/etc/vsftpd.conf中已經啟用了以下選項:
anonymous_enable=YES # 添加使用者映射的選項
guest_enable=YES
guest_username=ftvuser #将普通使用者映射ftvuser
pam_service_name=vsftp.mysql # 修改下面一項,原系統使用者無法登入;而是基于資料驗證登入使用者
user_config_dir=/etc/vsftpd/vusers_config # 建立所需要目錄,并為虛拟使用者提供配置檔案
systemctl start vsftpd #重新開機服務
6 在FTP伺服器上配置虛拟使用者且具有不同的通路權限
# 說明:vsftpd可以在配置檔案目錄中為每個使用者提供單獨的配置檔案以定義其ftp服務通路權限,每個虛拟使用者的配置檔案名同虛拟使用者的使用者名。
配置檔案目錄可以是任意未使用目錄,隻需要在vsftpd.conf指定其路徑及名稱即可
# 配置虛拟使用者的通路權限
虛拟使用者對vsftpd服務的通路權限是通過匿名使用者的相關指令進行的。如果需要讓使用者user1具有上傳檔案的權限,可以修改/etc/vsftpd/vusers_config/user1檔案。
vim /etc/vsftpd/vusers_config/user1 # 在裡面添加如下選項并設定為YES即可,隻讀則設為NO
anon_upload_enable=YES #打開匿名上傳檔案
anon_mkdir_write_enable=YES #打開建立目錄的權限
anon_other_write_enable=YES #打開删除和重命名的權限
7 測試:
vim /etc/vsftpd/vusers_config/user2
anon_upload_enable=YES #打開匿名上傳檔案
local_root=/app/ftpsite2/ # 指定user2的目錄;user2使用者登入上來通路的目錄
mkdir /app/ftpsite2/upload # 友善檢驗
chown ftpvuser /app/ftpsite2/upload #可以讓子目錄有權限,但家目錄不能有權限
注意:需確定對應的映射使用者對于檔案系統有寫權限
測試虛拟使用者登入FTP
1.virtual_use_local_privs參數
當virtual_use_local_privs=YES時,虛拟使用者和本地使用者有相同的權限;
當virtual_use_local_privs=NO時,虛拟使用者和匿名使用者有相同的權限,預設是NO。
當virtual_use_local_privs=YES,write_enable=YES時,虛拟使用者具有寫權限(上傳、下載下傳、删除、重命名)。
當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,
anon_upload_enable=YES時,虛拟使用者不能浏覽目錄,隻能上傳檔案,無其他權限。
當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=NO時,虛拟使用者隻能下載下傳檔案,無其他權限。
anon_upload_enable=YES時,虛拟使用者隻能上傳和下載下傳檔案,無其他權限。
anon_mkdir_write_enable=YES時,虛拟使用者隻能下載下傳檔案和建立檔案夾,無其他權限。
anon_other_write_enable=YES時,虛拟使用者隻能下載下傳、删除和重命名檔案,無其他權限。
2.建立各個虛拟使用者自身的配置檔案
[root@CentOS7 /]#vi /etc/vsftpd/vsftpd.conf
添加:user_config_dir=/etc/vsftpd/vsftpd_user_conf
[root@CentOS7 /]#mkdir /etc/vsftpd/vsftpd_user_conf
編輯user1的配置檔案
[root@CentOS7 /]#vi /etc/vsftpd/vsftpd_user_conf/user1
添加:anon_world_readable_only=NO #開放bobyuan的下載下傳權限(隻能下載下傳)。注意這個地方千萬不能寫成YES,否則user1将不能列出檔案和目錄。
編輯user2的配置檔案
[root@CentOS7 /]#vi /etc/vsftpd/vsftpd_user_conf/user2
添加:
write_enable=YES #打開寫權限
anon_world_readable_only=NO #打開下載下傳權限
anon_upload_enable=YES #打開上傳權限
anon_mkdir_write_enable=YES #打開建立目錄的權限
anon_other_write_enable=YES #打開删除和重命名的權限
本文轉自 優果馥思 51CTO部落格,原文連結:http://blog.51cto.com/youguofusi/1976956