1. 實驗需求:
1) 使用RPM包安裝vsftpd服務
2) 實現匿名用戶訪問,驗證僅可以訪問和下載,不可以上傳
3) 實現匿名用戶可上傳、下載、修改等完全權限(現實環境中這樣的需求可能性很小)
4) 實現把登陸的用戶禁錮在自己的家目錄中
5) 實現限制某些用戶的訪問
6) 實現虛擬用戶的訪問
7) 實現針對不同的虛擬用戶擁有不同的權限
2. 實驗環境:
Linux服務器系統版本:Red Hat Enterprise Linux 6.5 IP:192.168.20.3
Windows客戶機系統版本:Windows 7 Ultimate x64 IP:192.168.20.2
vsftpd軟件版本:vsftpd-2.2.2
3. 實驗步驟:
基本安裝操作
A. 掛載系統光盤並安裝vsftpd
這裏我們使用rpm安裝包安裝vsftpd,安裝包放在系統光盤中的Packages目錄中,我們首先掛載系統光盤到系統的mnt目錄下
[root@localhost~]# mount /dev/sr0 /mnt
到Packages目錄下找到vsftpd服務的軟件包並安裝,安裝完成。
[root@localhost~]# rpm -ivh /mnt/Packages/vsftpd-2.2.2-11.el6_4.1.x86_64.rpm
B. 查看vsftpd配置文件
[root@localhost ~]# grep -v "#"/etc/vsftpd/vsftpd.conf #過濾掉配置文件中#號的註釋
anonymous_enable=YES #已開啓匿名用戶的訪問
local_enable=YES #已開啓本地賬號的訪問
write_enable=YES #已開啓寫入的權限
local_umask=022 #本地用戶上傳文件的權限是644,文件夾是755
---------------------以下配置爲服務默認,此實驗中無需關心----------------------
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
實現匿名用戶訪問,驗證僅可以訪問和下載,不可以上傳
根據vsftpd配置文件的默認配置,當vsftpd搭建好之後什麼都不做就可以被匿名用戶和本地用戶訪問了
A. 效果驗證:
[root@localhost~]# service vsftpd start #啓動服務
爲vsftpd 啓動 vsftpd: [確定]
測試之前,必須把防火牆和selinux關掉
[root@localhost ~]# serviceiptables stop
iptables:將鏈設置爲政策 ACCEPT:filter [確定]
iptables:清除防火牆規則: [確定]
iptables:正在卸載模塊: [確定]
[root@localhost ~]# setenforce 0
我們在客戶機上用文件夾的方式訪問 ftp://192.168.20.3
現在來測試一下匿名用戶的上傳和下載權限
注意:我們用匿名賬號ftp登陸(無密碼),查看現在所在的工作目錄爲/,這個/並不是服務器的根目錄,而是匿名用戶自己的家目錄,ls查看發現裏面有一個pub的文件夾
家目錄就是服務器上/var/ftp這個目錄:
我們驗證匿名用戶可不可以下載首先要在ftp這個目錄下新建一個可供下載的文件[root@localhost ~]# cd/var/ftp #切換到ftp目錄下
[root@localhostftp]# echo "this is test ftp" > test.txt #新建一個test.txt文件,內容爲this is test ftp
回到客戶機上的cmd控制檯
C:\Users\Administrator>f:\ //切換到f盤,我們下載的文件就會下載到f盤
用匿名賬號ftp登陸,下載test.txt文件,打開f盤,看到已經下載的文件
現在來驗證匿名用戶是否可以上傳文件,我們把剛纔下載都客戶機上的test.txt文件改名爲tes.txt文件用於上傳測試(避免重名)
上傳時被拒絕,所以我們知道匿名用戶是只可以下載不能夠上傳的。
那如果是系統本地賬號的話可不可以上傳呢?
[root@localhostftp]# useradd tom #新建一個tom的賬戶
[root@localhostftp]# passwd tom #設置tom的密碼
回到客戶機的cmd控制檯,用tom登陸並上傳tes.txt文件,上傳成功。
[root@localhostftp]# ls -l /home/tom #查看上傳的文件的權限爲644(因爲配置文件中local_umask=022)
注意:如果selunux沒有關掉,用本地賬戶也是不可以登陸的,會報以下錯誤
實現匿名用戶可上傳、下載、修改等完全權限
我們要讓匿名用戶可以上傳文件夾,需要修改配置文件:
anon_mkdir_write_enable=YES
注意:當我們不知道如何去配置要添加哪些或要修改哪些選項時,我們可以藉助man手冊來尋求幫助:
[root@localhost vsftpd]# manvsftpd.conf
在手冊裏面查找跟anon相關的內容,我們看到有一項是other write,他的默認值是No,如果設爲yes就可以允許用戶上傳、創建目錄並且刪除、重命名等操作
接着我們到vsftpd.conf腳本中插入一行內容:anon_other_write_enable=YES
修改完畢之後匿名用戶就獲得了最高權限(可讀寫,刪除,重命名)
A. 修改後的腳本
B. 效果驗證
[root@localhostvsftpd]# service vsftpd reload #重新加載配置
關閉 vsftpd: [確定]
爲 vsftpd 啓動 vsftpd: [確定]
回到客戶端的cmd控制檯,以ftp匿名賬號登陸,並刪除文件,提示失敗。
回到服務器查看ftp這個目錄的權限,是沒有寫權限的,所以也就無法刪除
[root@localhostvsftpd]# chmod 777 /var/ftp #將ftp權限設爲最大
回到客戶機,用ftp登陸,發現直接登陸就報錯了,因爲我們把var/ftp這個目錄權限改到最大了,這樣匿名用戶就可以爲所欲爲了,爲了安全,vsftpd設置了直接就不允許登陸了。
那麼如果我們想讓匿名用戶有最大權限應該怎麼做呢?這時我們應該對ftp目錄下的子目錄進行操作
[root@localhostvsftpd]# chmod 755 /var/ftp #把ftp的權限改爲默認的755
[root@localhostvsftpd]# cd /var/ftp
[root@localhostftp]# mkdir anon #在ftp目錄下新建一個anon目錄
[root@localhostftp]# chmod 777 anon #修改目錄權限爲最大
[root@localhostftp]# cp test.txt anon #將test文件拷貝到anon目錄下,用於後面的刪除測試
[root@localhostanon]# ls -l #查看test文件權限爲不可寫就不可以刪除
[root@localhostanon]# chmod 666 test.txt #將文件權限改爲可寫
這樣,test.txt就可以被匿名用戶刪除了。
回到客戶機的cmd控制檯,用ftp登陸,切換到anon目錄,刪除test.txt文件,刪除成功。當然匿名用戶也是可以進行其他操作了這裏就不一一測試了。
實現把登陸的用戶禁錮在自己的家目錄中
現在我們用本地賬號tom登陸,默認的當前工作目錄是tom自己的家目錄,我們可以將他任意切換到服務器的任何目錄下:
這樣是非常不安全的,所以我們要讓用戶登陸之後僅僅只能在他的家目錄這個範圍活動不允許他任意切換到其他目錄,我們需要修改配置文件使這行配置生效:chroot_local_user=YES
A. 修改後的腳本
B. 效果驗證
[root@localhostanon]# service vsftpd reload #重新加載配置
關閉vsftpd: [確定]
爲vsftpd 啓動 vsftpd: [確定]
回到客戶機的cmd控制檯,用tom登陸,切換到根,發現這時候的根是他自己的家目錄,並不是服務器上的根目錄下了,他已經被禁錮在自己的家目錄中了。
實現限制某些用戶的訪問
我們查看vsftpd目錄下的內容,發現有一個user_list文件
查看user_list文件內容,發現這個裏面都是被拒絕登陸的用戶,所以我們要讓誰不可以登陸就把賬號寫進這個文件裏面就可以了,這裏我們測試不讓tom登陸
A. 修改後的腳本
B. 效果驗證
回到客戶機的cmd控制檯,用tom登陸,登陸失敗。
注意:這裏tom登陸失敗的原因是因爲我們把tom寫進了user_list這個文件當中,另外也是因爲配置文件中userlist_enable=YES這行設置,如果配置成userlist_deny=YES那麼就是隻允許user_list中的用戶登陸
實現虛擬用戶的訪問
如果我們只是想要新建vsftpd賬號而不讓他作爲一個系統賬號的話就可以用到虛擬賬號功能了
[root@localhost vsftpd]# vim vuser #新建一個叫做vuser的文件
在這個文件中基數行爲用戶名,偶數行爲密碼,我們新建兩個用戶lisa和jack
[root@localhost vsftpd]# db_load -T -thash -f vuser vuser.db #將vuser轉換成數據庫文件 db_load是命令 -T指定轉換-t 指定轉換類型爲hash -f指定要轉換的文件vuser.db爲轉換後的文件名
[root@localhost vsftpd]# file vuser.db #查看文件類型,可以看到vuser已經被轉換成一個vsftpd能識別的hash數據庫文件
[root@localhost vsftpd]# chmod 600vuser #爲了安全,不想讓其他用戶可以看到這個文件裏有哪些東西,修改權限爲600
[root@localhost vsftpd]# chmod 600vuser.db
虛擬用戶創建之後,要給虛擬用戶映射到一個系統賬號
[root@localhost vsftpd]# useradd -d/opt/vuser -s /sbin/nologin vuser #新建一個虛擬用戶的映射賬號vuser,指定宿主目錄爲opt/vuser,並指定不允許登陸系統
[root@localhost vsftpd]# vim/etc/pam.d/vsftpd.vu #爲虛擬用戶創建pam認證模塊命名爲vsftpd.vu
在認證文件中加入以下兩行認證信息:
auth required pam_userdb.sodb=/etc/vsftpd/vuser
account required pam_userdb.sodb=/etc/vsftpd/vuser
#這裏的vuser其實是vuser.db,這裏省略了db,否則會報錯
之後到vsftpd.conf配置文件中插入以下三行內容:
guest_enable=YES #開啓虛擬用戶訪問
guest_username=vuser #映射到系統賬號vuser
pam_service_name=vsftpd.vu #指定pam認證模塊
注意:vsftpd有一個默認的pam認證模塊,需要註釋掉
A. 修改後的腳本
B. 效果驗證
[root@localhostvsftpd]# service vsftpd restart #重啓服務
關閉 vsftpd: [確定]
爲vsftpd 啓動 vsftpd: [確定]
回到客戶機的cmd控制檯,用lisa登陸並上傳文件成功
[root@localhostvsftpd]# ls -l /opt/vuser #查看上傳的文件的屬主是vuser,說明lisa是映射到vuser這個系統賬號了
接着我們把tes.txt文件改名爲te.txt防止重名,以jack登陸並上傳te.txt
查看jack上傳的文件的屬主依然是vuser
注意:如果虛擬用戶都可以登陸成功但是上傳時提示權限被拒絕的話,需要去vsftpd.conf文件中使這行生效anon_upload_enable=YES
實現針對不同的虛擬用戶擁有不同的權限
以上實驗中lisa和jack的權限是一樣的,現在我們讓lisa上傳的文件權限爲600而jack上傳的文件權限爲644,我們需要開啓這個單獨配置文件功能
打開vsftpd.conf配置文件,加入以下一行配置告訴他去vu_dir目錄下找他們的單獨配置文件:
user_config_dir=/etc/vsftpd/vu_dir
[root@localhost vsftpd]# mkdir vu_dir #在vsftpd目錄下新建vu_dir目錄
[root@localhost vsftpd]# cd vu_dir
[root@localhost vu_dir]# vi jack #在vu_dir目錄下爲jack新建一個單獨的配置文件(暫時不寫任何內容保存退出)
我們用man手冊查看一下anon_umask(匿名上傳)這個選項,發現默認權限是600,所以前面我們看到lisa和jack上傳的文件權限是600
如果要使jack的上傳權限是644,那就把這個值設爲022即可
接着我們就vi jack在文件中加入一行內容:anon_umask=022
A. 修改後的腳本
B. 效果驗證
[root@localhostvu_dir]# service vsftpd restart #重啓服務
關閉 vsftpd: [確定]
爲 vsftpd 啓動 vsftpd: [確定]
回到客戶機的cmd控制檯,用jack登陸並上傳t.txt文件
服務器上查看上傳的文件權限爲644,實驗成功。
4. 實驗總結:
1) vsftpd是一款在Linux發行版中最受推崇的FTP服務器程序。特點是小巧輕快,安全易用。
2) vsftpd中的虛擬用戶又是一個非常實用的功能,滿足不同用戶的不同訪問特性,在配置文件中一定要注意權限的配置,以降低權限虛擬用戶是默認作爲匿名用戶進行處理的。