配置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下的虛擬用戶