做了好久的實驗,網上的好些文章都是或多或少沒說明白問題。這裏把我的實驗過程記下來,可能也會幫助到一些朋友。
情況:
開發、美工、運維組都有相關的資料需要更新、保存(上傳、下載、刪除、建立目錄等),且各個組相互不能進入其他的資料區,看同事們也喜歡用ftp工具,就用linux下的vsftpd搭建服務吧。考慮到安全問題,採用虛擬用戶登錄。
規劃:
開發組:develop
美工組:design
運維組:operate
ip地址:192.168.1.105
用戶名也暫且這樣定吧,密碼和用戶名相同
好了,開始:
一、準備
1、安裝vsftpd軟件:
[root@client ~]# yum install vsftpd –y
2、採用的是pam驗證模塊,所以得安裝相關軟件
[root@client ~]# yum install pam –y
3、採用文本帳號,生成相應數據庫文件,得有db4包支持
[root@client ~]# yum install db4 db4-devel db4-utils –y
4、建立賬戶文件(/etc/vsftpd/vsftpd_login.txt)
[root@client ~]# vim /etc/vsftpd/vsftpd_login.txt
[root@client ~]# cat /etc/vsftpd/vsftpd_login.txt
5、將文本文件內容加載到數據庫
[root@client ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db
-T選項允許應用程序能夠將文本文件轉譯載入進數據庫。由於我們之後是將虛擬用戶的信息以文件方式存儲在文件裏的,爲了讓vsftpd這個應用程序能夠通過文本來載入用戶數據,必須要使用-T。
-t用來指定轉譯載入的數據庫類型。可以指定的數據類型有Btree、Hash、Queue和Recon數據庫。這裏選擇Hash。
查看一下生成的db文件:
[root@client ~]# ll /etc/vsftpd/vsftpd_login*
6、設定驗證文件,指定驗證模塊和需要驗證的db文件
[root@client ~]# vim /etc/pam.d/vsftpd
只需要添加下面兩行,其他的註釋掉吧
二、創建系統賬戶
這裏存在兩個賬戶:
vsftpd服務的宿主用戶,默認爲root。可以自己建一個用戶作爲vsftpd的宿主用戶,也可不用管。這裏還是建立一個vsftpd用戶吧,沒必要登錄。
vsftpd虛擬的宿主用戶,就像develop需要有系統相關權限,就映射成系統的ftp_develop用戶(待會建立)的權限,所以這些用戶也沒有必要登錄系統。
我想把develop、design、operate三個組都放到/var/ftp下,就當是虛擬宿主用戶的家目錄權限去控制訪問吧
1、vsftpd服務的宿主用戶:
[root@client ~]# useradd -s /sbin/nologin vsftpd
2、三個組對應的虛擬宿主用戶:
[root@client ~]# useradd -d /var/ftp/develop -s /sbin/nologin ftp_develop
[root@client ~]# useradd -d /var/ftp/design -s /sbin/nologin ftp_design
[root@client ~]# useradd -d /var/ftp/operate -s /sbin/nologin ftp_operate
查看是否建立文件路徑:
三、改主配置文件 /etc/vsftpd/vsftpd.conf
關鍵的一些解釋一下:
anonymous_enable=NO
設定不允許匿名訪問
local_enable=YES
設定本地用戶可以訪問。注意:主要是爲虛擬宿主用戶,如果該項目設定爲NO那麼所有虛擬用戶將無法訪問
write_enable=YES
設定可以進行寫操作
local_umask=022
設定上傳後文件的權限掩碼
anon_upload_enable=NO
禁止匿名用戶上傳
anon_mkdir_write_enable=NO
禁止匿名用戶建立目錄
xferlog_enable=YES
設定開啓日誌記錄功能
connect_from_port_20=YES
設定端口20進行數據連接
chown_uploads=NO
設定禁止上傳文件更改宿主
xferlog_file=/var/log/vsftpd.log
vsftpd的服務日誌。注意,該文件必須要手動touch出來,必須注意給與該用戶對日誌的寫入權限(vsftpd服務宿主用戶),否則服務將啓動失敗
xferlog_std_format=YES
設定日誌使用標準的記錄格式
nopriv_user=vsftpd
vsftpd服務的宿主用戶vsftpd。必須注意與該服務相關的讀寫文件的讀寫權限問題
async_abor_enable=YES
設定支持異步傳輸功能
ascii_upload_enable=YES
ascii_download_enable=YES
設定支持ASCII模式的上傳和下載功能
ftpd_banner=Welcome to blah FTP service.
設定vsftpd的登陸標語
chroot_list_enable=NO
限定在自己的FTP主目錄裏邊,待會兒可以設置
pam_service_name=vsftpd
設定PAM服務下Vsftpd的驗證配置文件名。剛剛修改的是/etc/pam.d/下的vsftpd文件,可以自己新建文件,目錄要正確
userlist_enable=YES
設定userlist_file中的用戶將不得使用FTP
tcp_wrappers=YES
設定支持TCP Wrappers
好了,需要修改新增的如下:(具體根據需要而定)
anonymous_enable=NO
不允許匿名用戶登錄
anon_upload_enable=NO
不允許匿名用戶上傳
anon_mkdir_write_enable=NO
不允許匿名用戶建立目錄
chown_uploads=NO
設定禁止上傳文件更改宿主。
xferlog_file=/var/log/vsftpd.log
設定Vsftpd的服務日誌保存路徑
async_abor_enable=YES
設定支持異步傳輸功能。
ascii_upload_enable=YES
ascii_download_enable=YES
設定支持ASCII模式的上傳和下載功能也都開啓吧
ftpd_banner=Hello baby,Welcome to blah FTP service.
^_^,開個banner吧
chroot_list_enable=NO
限定在ftp主目錄
nopriv_user=vsftpd
支撐Vsftpd服務的宿主用戶
guest_enable=YES
設定啓用虛擬用戶功能
virtual_use_local_privs=YES
設定虛擬用戶的權限符合他們的宿主用戶
user_config_dir=/etc/vsftpd/vsftpd_config
設定虛擬用戶個人Vsftp的配置文件存放路徑。/etc/vsftpd/vsftpd_config裏面的文件都是虛擬用戶的專用配置文件,注意:配置文件名必須和虛擬用戶名相同
那我們就專門爲虛擬用戶建立一個配置文件目錄吧
四、建立虛擬用戶配置文件及後期處理
[root@client ~]# mkdir /etc/vsftpd/vsftpd_config
[root@client ~]# cd /etc/vsftpd/vsftpd_config/
[root@client vsftpd_config]# touch {develop,design,operate}
[root@client vsftpd_config]# vim develop
guest_enable=YES (在centos下yes必須爲小寫字母)
guest_username=ftp_develop
local_root=/var/ftp/develop
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=100000
這裏可以通過系統用戶權限和參數配置達到各種限制,爲了方便,三個組權限都一樣吧,那就copy了
注意:還有日誌文件沒有處理哦
[root@client vsftpd_config]# touch /var/log/vsftpd.log
[root@client vsftpd_config]# chown vsftpd.vsftpd /var/log/vsftpd.log
五、測試與排錯
實驗之前已關閉selinux和iptables。
1、重啓服務,未報錯
2、本地登錄測試、上傳測試
匿名用戶無法登錄;ok
指定用戶呢,可以登錄上傳文件(注意是不同用戶,上傳的不同文件)
注意vsftpd.conf裏面還有一項可能會導致一些問題哦:userlist_enable=YES (這裏是yes)
查看一下文件 /etc/vsftpd/user_list
如果有問題可以看看這個文件~
3、下載測試
這裏以develop爲例測試,其它配置一樣,結果也是一樣的,可以下載
Linux下:
Windows下:
OK,完成所要的功能了。暫時就這樣吧,先睡了