1. 程式人生 > >配置Vsftpd下的虛擬用戶

配置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

技術分享

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中已經啟用了以下選項:

vim /etc/vsftpd/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時,虛擬用戶只能下載文件,無其他權限。

當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,

anon_upload_enable=YES時,虛擬用戶只能上傳和下載文件,無其他權限。

當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,

anon_mkdir_write_enable=YES時,虛擬用戶只能下載文件和創建文件夾,無其他權限。

當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,

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 #打開刪除和重命名的權限

配置Vsftpd下的虛擬用戶