RedHat 5.4 RHCE VSFTPD学习笔记
?
我的博客:http://wqmsl.blog.51cto.com/
制作人:wqmsl
?
目標:1、常規VSFTPD服務器搭建(很簡單的匿名訪問)
????? 2、本地用戶訪問FTP的方式(安全性高)
????? 3、虛擬用戶訪問方式(安全性最高)
????? 4、chroot安全機制,禁錮用戶只在自己的目錄下活動,不可切換到別的目錄下
????? 5、訪問控制機制
1、IP說明:
192.168.0.2——主機名:vsftpd.wqmsl.com?? vsftpd服務器
192.168.0.3——主機名:client.wqmsl.com??? client客戶端
2、前期準備
?? 更改主機名稱(更改三處):1、hostname更改,2、hosts更改,3、/etc/sysconfig/network
3、所需軟件包如下
使用yum來安裝,rpm的方式也是可以的
進入到vsftpd的主配置目錄下:
? (1)ftpusers是用戶控制文件,在這個文件里面的用戶,默認是不可以使用vsftpd服務的。
? (2)user_list默認功能和第一個一樣,但是通過配置,我們可以讓只有在第二個文件里的用戶才能使用vsftpd服務,這樣新加入的用戶就不會自動擁有vsftp的使用權,這樣可以讓vsftpd服務器更加安全
? (3)vsftpd_conf_migrate.sh是vsftpd操作的一些變量和設置,這個不用管的
當然,主角就是 vsftpd.conf ,配置vsftpd,我們操作最多的也就是這個文件了
一、下面開始實現第一個目標(搭建基本的FTP服務器)
我先備份一下vsftpd的主配置文件
以便配置錯誤之后方便恢復
下面看看vsftpd.conf文件的內容吧
大概就這些內容,可以自己more看一下哈!
默認安裝完成vsftpd之后啟動服務客戶端就可以訪問FTP了(匿名訪問的方式),
下面我在客戶端來訪問一下FTP
不用登陸即可訪問FTP的pub目錄,該目錄在FTP服務器的
這樣一個簡單的FTP服務器就搭建完成了,(關于vsftpd.Conf文件里的詳細參數介紹看文章結尾的注意內容)。
二、下面我們來實現第二個實驗的目標(本地用戶訪問FTP的方式)
編輯vsftpd.conf文件,
關閉默認允許的匿名訪問的方式
把其YES改為NO 即可,重啟FTP服務,匿名就不可以訪問了
就要求我填寫用戶名和密碼了
添加用戶ftp1指定到ftp組,并指定ftp1的shell不可以登陸系統(安全起見)
最后設置用戶的密碼,
在ftp1的家目錄下建立一個test的文件用來測試
現我用ftp1賬號現在訪問一下
看看是不是可以了,登陸之后是在ftp1的家目錄下面,然后我們用Linux客戶端來訪問一次
登陸成功
登陸后輸入“?”可以查看可以在ftp模式下敲擊的命令哦!
看我們在自己的家目錄,通過切換之后居然可以切換到/etc下面,當然,這時候就是你下載passwd文件都是沒有問題的,這樣是很不安全的啦
實現目標四 禁錮用戶在自己家目錄
所以我們啟用chroot機制,把用戶禁錮在自己的家目錄,不允許他亂跑的哦。
我們來編輯vsftpd的主配置文件,來啟用cheroot
,
去掉前面注釋#即可,保存
在/etc/vsftpd下添加chroot_list文件,編輯chroot_list添加ftp1用戶,一行一個用戶(在此
文件內的添加的用戶將不能切換目錄,視自己的家目錄為跟目錄)
重新加載vsftpd配置文件。
下面我們重新使用Linux客戶端訪問以下,看看效果
看看,切換目錄失敗,說明我們的實驗是成功的
下面我使用ftp2用戶登陸(ftp2我沒有加入到chroot_list 文件中,所以正常情況下ftp2登陸之后應該是可以切換目錄的)
從上面看到,我們呢使用ftp2用戶登陸之后是可以成功切換目錄的,現在你知道chroot的的作用了吧,也應該知道這個chroot_list文件的作用了吧。
(注意:如果你啟動了chroot機制,卻沒有子啊/etc/vsftpd/下建立chroot_list 這個文件,那么當你登陸的時候會出現失敗的字樣具體如下:421 Service not available, remote server has closed connection,所以啟用之后一定要建立chroot_list 文件的哦)
三、下來我們來實現第三個目標,用虛擬用戶訪問FTP服務器
??? 這個最重要的是
在/etc/vsftpd/下建立vlogin.txt文件,用來存儲虛擬用戶的用戶名和密碼
編輯vlogin.txt這個文件
編輯格式:奇數行:用戶名
????????? 偶數行:密碼
生成數據庫
保存虛擬帳號和密碼的文本文件無法被系統帳號直接調用哈~我們需要使用db_load命令生成db數據庫文件
(注意:rhel5默認只安裝db4-4.3.29-9.fc6.i386.rpm和db4-devel-4.3.29-9.fc6.i386.rpm,
要使用db_load需要將db4-utils-4.3.29-9.fc6.i386.rpm包安裝上哈~否則會出現下圖的錯? 誤:找不到db_load命令。)
修改數據庫文件訪問權限
數據庫文件中保存著虛擬帳號的密碼信息,為了防止非法用戶盜取哈,我們可以修改該文件的訪問權限。生成的認證文件的權限應設置為只對root用戶可讀可寫,即600
chmod 600 /etc/vsftpd/vlogin.db
編輯pam文件(編輯的時候一定要認真,出現錯誤的話客戶端登陸會被530的錯誤提示拒絕登陸)PAM模塊配置文件路徑為/etc/pam.d/目錄,此目錄下保存著大量與認證有關的配置文件,并以服務名稱命名。
用#注釋掉原來的所有參數(如需使用訪問控制ftpusers,則不要注釋這行即可“auth?????? required???? /lib/security/pam_listfile.so item=user sense=deny file=/etc/
ftpusers onerr=succeed”)如上圖
在最后添加auth??????? reguired???? pam_userdb.so?????? db=/etc/vsftpd/vlogin
????????? account????? reguired???? pam_userdb.so?????? db=/etc/vsftpd/vlogin
這兩行,pam_userdb.so 的位置在/lib/security/下面,db=/etc/vsftpd/vlogin中的vlogin為我們生成的db數據文件vlogin.db。
添加一個系統用戶 來對應 虛擬用戶,光有虛擬用戶是無法登陸的,我們需要讓虛擬用戶對應一個系統實際的用戶,這樣所有的用戶登陸之后就會進入到系統實際用戶的家目錄,我們再通過給各個虛擬用戶來分配不同的權限(最后講這個)
這里,-g指定用戶的屬組為ftp組,-s指定用戶的Shell為不可登陸,-d指定用戶的家目錄為/var/share ,它的加目錄的權限如下
編輯/etc/vsftpd/vsftpd.conf? ,
添加如下內容
內容選項解釋:
pam_service_name=vsftpd:????????? 配置vsftpd使用的PAM模塊為vsftpd
user_config_dir=/etc/vsftpd/vuserconfig:設置虛擬帳號權限配置的主目錄為 vuserconfig
guest_enable=yes??????????????????? 允許使用虛擬用戶登陸FTP
guest_username=ftp3???????????????? 虛擬用戶所對應的系統用戶為ftp3(我之前添加的)。
max_clients=1:設置FTP服務器最大接入客戶端數為1個(為了方便測試,你可以根據自己的實際情況設定)
max_per_ip=1:設置每個IP地址最大連接數為1個(為了方便測試,你可以根據自己的實際情況設定)
在/etc/vsftpd/下建立vuserconfig目錄,用于存放用戶的權限配置文件,以便為各個用戶分配不同的權限,
在vuserconfig目錄下面建立用戶的權限配置文件,配置文件的名稱必須要和在vlogin.txt.中添加的用戶名一致
看一下ftp6配置文件的內容:
參數詳解:
anon_world_readable_only=no???? 允許匿名用戶瀏覽器整個服務器的文件系統write_enable=yes??????????????? 允許在文件系統寫入權限
anon_mkdir_write_enable=yes???? 允許創建文件夾
anon_other_write_enable=yes????? 允許用戶改名和刪除文件的權限
anon_upload_enable=yes???????? 開啟匿名帳號的上傳功能
anon_max_rate=100000????????? 限定傳輸速度為100KB/s(以字節為單位的)
重啟服務 service? vsftpd? restart /reload
現在使用ftp6虛擬用戶登陸可以看到,已經登陸成功
而且已經禁錮用戶在家目錄下面,切換用戶目錄失敗。
在用戶的權限配置文件下編輯不同的權限,那么對應的用戶就會擁有不同的權限,
這里就看自己的實際情況了,你也可以在虛擬用戶的權限配置文件中添加對應的系統實際用戶,虛擬用戶可以是? (1)多個虛擬用戶———— 一個實際系統用戶
??????????????????? (2)一個虛擬用戶————? 一個系統用戶
靈活多變,看自己的實際情況去設置。
四、實現第四個目標訪問控制機制
/etc/ftpusers(訪問控制文件)
默認是拒絕這些用戶登陸的(上面添加ftp6用戶) 但可以通過修改/etc/pam.d/ftp中的sense值為allow 就表示只允許登陸的用戶如下:
*****************************************************************************************************************
[root@service root]# more /etc/pam.d/ftp
#%PAM-1.0
auth?????? required????? /lib/security/pam_listfile.so item=user sense=deny file=/etc/
ftpusers onerr=succeed
auth?????? required????? /lib/security/pam_unix.so shadow nullok
auth?????? required????? /lib/security/pam_shells.so
account??? required????? /lib/security/pam_unix.so
session??? required?????? /lib/security/pam_unix.so
****************************************************************************************************************我們先來分析一下auth???????? required /lib/security/pam_listfile.so?? item=user sense=deny file=/etc/ftpusers onerr=succeed 這一句
其中 /lib/security/pam_listfile.so是調用這個模塊用來檢測登陸進來的用戶是不是記記載在/etc/ftpusers中的用戶
而item=user 很明顯是說明要檢測的是用戶
sense=deny則是處理方法deny就是就是拒絕的意思了
我有個用戶名字叫ftp6在默認條件下條件下是可以登陸ftp服務器的我把它加入/etc/ftpusers 后看看情況哦
#echo "ftp6" >> /etc/ftpusers
有時候 你只想允許某部分人登陸ftp服務器 那么 你可以通過修改/etc/pam.d/ftp中的sense值為allow 就表示只允許登陸的用戶,那么你在 /etc/ftpusers 文件加入的 用戶就表示訪問的 沒在文件內的用戶都被拒絕
現在我使用ftp6來登錄一下FTP服務器試試
登錄失敗,說明配置已經生效。
Vsftpd的主配置文件/etc/vsftpd.conf的配置選項解釋:
我們要先了解幾個關鍵的配置選項
anonymous_enable=YES?????????????????? //允許匿名用戶登陸
local_enable=YES??????????????????????? //允許本地用戶登陸 如果這個不打開的話 uid 500以下的人都被訪問拒絕
write_enable=YES??????????????????????? //允許客戶端寫命令
local_umask=022???????????????????????? //本地用戶新文件的umask的值 就等于ground 和other 部分的可寫部分去掉
anon_upload_enable=YES?????????????????? //允許匿名用戶上傳文件
anon_mkdir_write_enable=YES?????????????? //允許匿名用戶創建目錄 這個最好不要打開否則會帶來不可預測的后果
dirmessage_enable=YES????????????????????????? //允許使用目錄的消息
ftpd_banner=Welcome to weihua0722's FTP service.???? //登陸歡迎辭詞
ls_recurse_enable=YES??????????????????????????? //允許使用ls -R命令
listen=YES????????????????????????????????????? //監聽模式 就是要服務器單獨運行
FTP原理嘗試:
后臺進程:vsftpd類型:System V 服務使用端口:20(ftp-data),21(ftp)所需RPM包:vsftpd配置文件:/etc/vsftpd/vsftpd.conf
FTP的主動模式和被動模式很重要
主動模式:
client 先連接服務器的 21端口(命令端口),然后client開放一個大于1024的端口等待服務器的20端口連接,21號端口的鏈接建立以后,服務器就用20去連接client開放的端口,簡單來說就是服務器主動連客戶端啦
基于上面的連接方式,如果client端有個防火墻,服務器的20端口就連接不進入,導致會連接失敗。
被動模式:
就是client開啟大于1024的X端口連接服務器的21(命令端口),同時開啟X+1端口
當21號端口連接成功后,client會發送PASV命令,通知服務器自己處于被動模式,服務器收到這個消息后,就會開放一個大于1024的端口Y通知client,client接到通知后就會用X+1來連接服務器的Y端口,簡單的說就是client主動連接服務器
一般我們使用的是主動模式
大家了解被動模式就可以了,當你架設FTP服務器,出現這樣的情況,你應該想到可以使用被動模式來解決,當然防火墻一般也支持FTP的追蹤模塊,會自動識別自己發出的FTP數據請求。這樣制動模式也能返回數據
會遇到的問題
1、500 OOPS: vsftpd: refusing to run with writable anonymous root
這表示ftp用戶的家目錄的權限不對,應該改過才對;
2、有時候會遇到530的錯誤,一般都是因為你啟用了虛擬用戶之后編輯pam.d/vsftpd文件導致,內容出現錯誤的時候就會被拒絕登陸,所有一定要認真。
?
我的博客:http://wqmsl.blog.51cto.com/
歡迎大家和我一起交流
總結
以上是生活随笔為你收集整理的RedHat 5.4 RHCE VSFTPD学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《开源成长策略——Talend 成功模式
- 下一篇: 学会做“男人”—Linux Man的使用