匿名通路模式
vsftpd 服務程式預設開啟了匿名開放模式, 我們需要做的就是開放匿名使用者的上傳、下載下傳檔案的權限, 以及讓匿名使用者建立、删除、更名檔案的權限。
# 匿名通路模式主配置檔案 /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
#總結
在vsftpd服務程式的匿名開放認證模式下, 其賬戶統一為anonymous, 密碼為空
連接配接到FTP伺服器後, 預設通路的是/var/ftp目錄, 我們可以在其中進行建立、删除等操作
建立目錄系統顯示拒絕, 這是為什麼呢?
原因:
1. ls -ld /var/ftp/pub 檢視該目錄的權限得知, 隻有root管理者才有寫入權限
2. getsebool -a | grep ftp 檢視與FTP相關的SELinux域政策都有哪些 根據經驗和政策的名稱判斷出是ftpd_full_access--> off政策規則導緻了操作失敗
解決:
1. chown -Rf ftp /var/ftp/pub #開放ftp使用者權限(該賬戶在系統中已經存在)
setsebool -P ftpd_full_access=on
此時, 匿名使用者就可以正常使用FTP服務了
本地使用者模式
#本地使用者模式主配置檔案 /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
connect_from_port_20=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
xferlog_enable=YES
xferlog_std_format=YES
#總結
現在已經完全可以本地使用者的身份登入FTP伺服器了, 但是使用root無法登陸 這是因為, 為了系統的安全, 預設禁止root等使用者登入FTP服務
因為vsftpd服務程式所在的目錄中, 預設存放着兩個名為使用者名單的檔案, ftpusers和user_list 在ftpusers和user_list兩個使用者檔案中将root使用者删除就可以登入了
在采用本地使用者模式登入FTP伺服器後, 預設通路的是該使用者的家目錄, 是以不存在寫入權限不足的情況
如果不關閉SELinux, 則需要再次開啟SELinux域中對FTP服務的允許政策 setsebool -P ftpd_full_access=on
即可以使用系統使用者進行FTP服務的登入了
虛拟使用者模式(文本檔案)
認證模式:vsftpd + pam + file
#第一步:建立用于進行 FTP 認證的使用者資料庫檔案
這裡使用文本檔案 vuser.list 進行使用者認證 資料庫檔案中奇數行為賬戶名, 偶數行為密碼
例如: vuser.list 内容
zhangsan
redhat
lisi
redhat
明文資訊既不安全, 也不符合讓vsftpd服務程式直接加載的格式 是以需要使用db_load指令用雜湊演算法将原始的明文資訊檔案轉換成資料庫檔案 降低資料庫檔案的權限, 然後再把原始的明文資訊檔案删除
db_load -T -t hash -f vuser.list vuser.db
chmod 600 vuser.db
rm -f vuser.list
#第二步:建立 vsftpd 服務程式用于存儲檔案的根目錄以及虛拟使用者映射的系統本地使用者
FTP服務用于存儲檔案的根目錄指的是, 當虛拟使用者登入後所通路的預設位置
可以把這個系統本地使用者的家目錄設定為/var目錄并設定不允許登入FTP伺服器
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod -Rf 755 /var/ftproot/
#第三步:建立支援虛拟使用者的 PAM 認證檔案
PAM是一種認證機制, 通過一些動态連結庫和統一的API把系統提供的服務與認證方式分開
PAM是可插拔認證子產品, 使得系統管理者可以根據需求靈活調整服務程式的不同認證方式
建立一個用于虛拟使用者認證的PAM檔案vsftpd.vu
PAM檔案内的db=參數為使用db_load指令生成的賬戶密碼資料庫檔案的路徑, 但不用寫資料庫檔案的字尾
vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
#第四步:在 vsftpd.conf 檔案中添加支援配置
在vsftpd服務程式的主配置檔案中預設就帶有參數 pam_service_name=vsftpd
表示登入FTP伺服器時是根據/etc/pam.d/vsftpd檔案進行安全認證的 我們要做的就是把vsftpd主配置檔案中原有的 PAM 認證檔案 vsftpd 修改為建立的 vsftpd.vu 檔案即可
虛拟使用者模式(文本檔案) 參數檔案 /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/vusers_dir
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
userlist_enable=YES
tcp_wrappers=YES
#第五步:為虛拟使用者設定不同的權限
隻需建立一個目錄, 在裡面分别建立兩個以zhangsan和lisi命名的檔案 在每個檔案中, 對使用者分别進行配置, 達到管理不用使用者權限的效果
mkdir /etc/vsftpd/vusers_dir/
cd /etc/vsftpd/vusers_dir/
touch lisi
cat > zhangsan<<EOF
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
#第六步:設定 SELinux 域允許政策
setsebool -P ftpd_full_access=on #先按照前面實驗中的步驟開啟SELinux域的允許政策, 以免再次出現操作失敗的情況
getsebool -a | grep ftp
#第七步:使用虛拟 FTP 使用者通路測試
虛拟使用者模式(MySQL資料庫)
#第一步:安裝所需要程式
安裝 mysql 和 pam_mysql, pam_mysql 由epel源提供
yum -y install vsftpd mysql-server mysql-devel pam_mysql
#第二步:建立虛拟使用者賬号
準備資料庫及相關表
首先請確定mysql服務已經正常啟動。而後, 按需要建立存儲虛拟使用者的資料庫即可, 這裡将其建立為vsftpd資料庫
create database vsftpd;
授權vsftpd使用者可以通過localhost主機操作select權限vsftpd庫的所有表, 密碼為123456
grant select on vsftpd.* to vsftpd@localhost identified by '123456';
grant select on vsftpd.* to [email protected] identified by '123456';
flush privileges;
建立相關表
use vsftpd;
create table users (id INT UNSIGNED AUTO_INCREMENT NOT NULL, name VARCHAR(50) BINARY NOT NULL, password char(48) BINARY NOT NULL, PRIMARY KEY(id));
添加測試的虛拟使用者
根據需要添加所需要的使用者, 需要說明的是, 這裡将其密碼為了安全起見應該使用 PASSWORD 函數加密後存儲
INSERT INTO users(name, password) VALUES('tom', password('123456'));
INSERT INTO users(name, password) VALUES('bob', password('123456'));
SELETC * FROM user;
#第三步:配置 vsftpd
建立pam認證所需檔案 /etc/pam.d/vsftpd.mysql 添加如下兩行, 主要32位和64位庫檔案的不同位置, 子產品路徑可不寫表示pam子產品路徑
指定使用者、密碼、主機、資料庫、表、使用者名字段、密碼字段、密碼的加密方式 密碼的加密方式可以通過安裝的 pam_mysql 的文檔檢視, /usr/share/doc/pam_mysql-0.7/README rpm -ql pam_mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
注意:由于mysql的安裝方式不同, pam_mysql.so基于unix sock連接配接mysql伺服器時可能會出問題, 此時, 建議授權一個可遠端連接配接的mysql并通路vsftpd資料庫的使用者。
#修改vsftpd的配置檔案, 使其适應mysql認證
建立虛拟使用者映射的系統使用者及對應的目錄
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod go+rx /var/ftproot
請確定/etc/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
#第四步:啟動 vsftpd 服務
#第五步:配置虛拟使用者具有不同的通路權限
vsftpd可以在配置檔案目錄中為每個使用者提供單獨的配置檔案以定義其ftp服務通路權限, 每個虛拟使用者的配置檔案名同虛拟使用者的使用者名。配置檔案目錄可以是任意未使用目錄, 隻需要在vsftpd.conf指定其路徑及名稱即可。
配置 vsftpd.conf 為虛拟使用者使用配置檔案目錄
user_config_dir=/etc/vsftpd/vusers_config
建立所需要目錄, 并為虛拟使用者提供配置檔案
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch tom bob
配置虛拟使用者的通路權限
虛拟使用者對vsftpd服務的通路權限是通過匿名使用者的相關指令進行的
如果需要讓tom使用者具有上傳檔案的權限, 可以修改 /etc/vsftpd/vusers_config/tom 檔案
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}