天天看點

配置Vsftpd下的虛拟使用者

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

配置Vsftpd下的虛拟使用者

chmod 600 vuser.db  #為了安全,使密碼不可見

3 建立作業系統的使用者和FTP通路目錄

useradd -d  /var/ftpsite -s /sbin/nologin vuser   # 建立ftp通路目錄,vuser是系統真是存在使用者,以後虛拟使用者都映射成vuser,/var/ftpsite自動生成家目錄

chmod 555 /var/ftpsite/ # 使vuser使用者有讀寫權限,給目錄權限

配置Vsftpd下的虛拟使用者

setfacl -d /var/ftpsite        #删除權限

4 建立pam配置檔案

配置Vsftpd下的虛拟使用者

systemctl restart vsftpd

4 指定vsftp.conf配置檔案

vim /etc/vsftpd/vsftpd.conf

配置Vsftpd下的虛拟使用者

systemctl restart vsftpd  #重新開機服務

5 配置各自虛拟使用者的配置檔案

mdkir /etc/vsftpd/vusers.d/ # 建立配置檔案存放的路徑

cd /etc/vsftpd/vusers.d/ # 進入此目錄建立各使用者自已的配置檔案

配置Vsftpd下的虛拟使用者

出現錯誤: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權限

配置Vsftpd下的虛拟使用者

6 測試虛拟使用者登入FTP

配置Vsftpd下的虛拟使用者

修改ftp2的權限,使其能夠建立檔案,進行測試。

配置Vsftpd下的虛拟使用者

注意:實驗前關閉防火牆和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) 建立存儲虛拟使用者的資料庫和連接配接資料庫使用者

配置Vsftpd下的虛拟使用者

注:在這裡我用這種方法添加的虛拟使用者密碼都是經過MySQL加密的,加密後的密碼pam-mysql不能識别(MySQL和pam-mysql相容性有些問題),是以本次實驗使用明文儲存密碼。

select * from users;    #檢視使用者資訊

FLUSH PRIVILEGES;   #重新整理資料庫

2) 驗證b主機資料庫配置是否成功

配置Vsftpd下的虛拟使用者
配置Vsftpd下的虛拟使用者

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

配置Vsftpd下的虛拟使用者

make && make install  #編譯安裝

3)編譯MySQL的PAM認證子產品

vim /etc/pam.d/vsftp.mysql # 為了友善管理并和以前的pam進行區分,我們建立自己的pam認證配置檔案

配置Vsftpd下的虛拟使用者
注意:參考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  # 建立所需要目錄,并為虛拟使用者提供配置檔案

配置Vsftpd下的虛拟使用者

systemctl start vsftpd  #重新開機服務

6 在FTP伺服器上配置虛拟使用者且具有不同的通路權限

# 說明:vsftpd可以在配置檔案目錄中為每個使用者提供單獨的配置檔案以定義其ftp服務通路權限,每個虛拟使用者的配置檔案名同虛拟使用者的使用者名。

配置檔案目錄可以是任意未使用目錄,隻需要在vsftpd.conf指定其路徑及名稱即可

配置Vsftpd下的虛拟使用者

# 配置虛拟使用者的通路權限

虛拟使用者對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 測試:

配置Vsftpd下的虛拟使用者

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  #可以讓子目錄有權限,但家目錄不能有權限

注意:需確定對應的映射使用者對于檔案系統有寫權限

配置Vsftpd下的虛拟使用者

測試虛拟使用者登入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