vsftpd服務器同時支持匿名用戶、本地用戶、和虛擬用戶三類用戶帳號,使用虛擬用戶帳號可以提供集中管理的ftp根目錄,同時將用於ftp登錄的用戶名、密碼與系統帳號區別開來,進一步增強ftp的安全性。
下面我們看一個實例:
公司對所有權互聯網開放共享目錄,允許下載產品信息,禁止上傳。公司的合作單位能夠使用FTP服務器進行上傳和下載,但不可以刪除數據。並且保證服務器的穩定性,進行適當優化設置??
分析:
公司的服務器對互聯網都是公開的,考慮到安全性我們就可以使用vsftpd的虛擬用戶帳號,而分析這個需求主要涉及到兩類用戶,一類是隻能查看和下載不能上傳,而另一類則是能查看、上傳、下載但不可以刪除數據,在就是爲了服務器的性能我們可以根據用戶的等級限制用戶的連接數和下載速率!
解決方案:
1.建立虛擬用戶的用戶名/密碼數據庫
vim vusers.list
testftp
1234 //當總提示密碼錯誤時檢查下此處是不是多了空格
vipftp
5678 //奇數行用戶名,偶數行是密碼
2.用db_load工具將其轉化爲DB數據庫文件(適用db_load命令工具必須先安裝db4-utils-4.3.29-9.fc6.i386.rpm)
db_load -T -t hash -f vusers.list vusers.db //-T表示允許適用程序將文本轉化爲DB數據文件,-t指定讀取數據的基本方法
-f 指定轉換文件
[root@localhost vsftpd]# chmod 600 vusers.* //降低文件權限來提高安全性
3建立訪問的根目錄及虛擬用戶對應的系統帳號
[root@localhost vsftpd]# useradd -d /var/ftp/share -s /sbin/nologin ftpuser
[root@localhost vsftpd]# useradd -d /var/ftp/vip -s /sbin/nologin vipuser
ll -ld /var/ftp/share/
drwx------ 4 ftp ftp 4096 10-27 13:27 /var/ftp/share/
[root@localhost vsftpd]# chmod -R 500 /var/ftp/share/ //因爲ftp用戶只能查看和下載不能寫入(上傳)
[root@localhost vsftpd]# chmod -R 700 /var/ftp/vip/ //vip用戶可以下載上傳等。。
[root@localhost ~]# touch /var/ftp/share/testftp.txt
[root@localhost ~]# touch /var/ftp/vip/vipftp.txt //建立測試文件
4.建立PAM認證文件
vim /etc/pam.d/vsftpd.vu
#%PAM-1.0 //堅決不能省掉#%PAM-1.0這個內容
auth required pam_userdb.so db=/etc/vsftpd/vusers //db指向剛纔轉換過來的vusers.db,擴展名.db可以省略
account required pam_userdb.so db=/etc/vsftpd/vusers
5建立配置文件
anonymous_enable=NO
local_enable=YES // 啓用虛擬用戶需要啓用本地用戶
guest_enable=YES //啓用用戶名映射功能
guest_username=ftpuser //將映射用戶指定爲ftpuser
chroot_local_user=YES //將本地用戶禁錮在自己的宿主目錄中
user_config_dir=/etc/vsftpd/vconfig //爲不同的虛擬用戶建立獨立的配置文件
max_clients=300 //最多允許300個客戶端同時連接
max_per_ip=10 //來自同一IP最大連接數爲10
anon_max_rate=50000 //設置傳輸速率爲50kb
anon_world_readable_only=NO //允許匿名用戶瀏覽器整個服務器的文件系統,不寫貌似瀏覽不到ftp資源
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu //指明PAM配置文件
userlist_enable=YES
tcp_wrappers=YES
6.爲不同的用戶建立獨立的配置文件:
mkdir /etc/vsftpd/vconfig
vim /etc/vsftpd/vconfig/vipftp
guest_enable=YES //這些就是獨立配置文件的vipftp的內容
guest_username=vipuser
write_enable=YES
anon_upload_enable=YES //允許上傳
anon_mkdir_write_enable=YES
anon_max_rate=100000 //傳輸速率100kb
anon_world_readable_only=NO //允許匿名用戶瀏覽器整個服務器的文件系統,不寫貌似瀏覽不到ftp資源
7.重新啓動服務
service vsftpd restart
8.驗證:
[root@localhost ~]# ftp 192.168.0.60
Connected to 192.168.0.60.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.0.60:root): testftp //使用testftp登錄測試
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,0,60,174,83)
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Oct 27 10:34 testftp.txt
226 Directory send OK. //可以瀏覽資源
ftp> get testftp.txt
local: testftp.txt remote: testftp.txt
227 Entering Passive Mode (192,168,0,60,181,117)
150 Opening BINARY mode data connection for testftp.txt (0 bytes).
226 File send OK. //下載成功
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (192,168,0,60,165,227)
550 Permission denied. //上傳失敗。權限拒絕。。
testftp的所有條件都滿足。。。實驗成功了!!!
[root@localhost ~]# ftp 192.168.0.60
Connected to 192.168.0.60.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.0.60:root): vipftp //vipftp用戶登錄測試
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,0,60,104,76)
150 Here comes the directory listing.
drwx------ 2 501 501 4096 Oct 27 10:40 cmd
drwx------ 2 501 501 4096 Oct 27 10:42 kkkkkk
-rw-r--r-- 1 501 501 0 Oct 27 10:35 vipuser.txt
226 Directory send OK. //能瀏覽資源
ftp> get vipuser.txt
local: vipuser.txt remote: vipuser.txt
227 Entering Passive Mode (192,168,0,60,197,75)
150 Opening BINARY mode data connection for vipuser.txt (0 bytes).
226 File send OK. //下載成功
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (192,168,0,60,76,88)
150 Ok to send data.
226 File receive OK.
43957 bytes sent in 0.051 seconds (8.4e+02 Kbytes/s) //上傳成功
ftp> rm -rf vipuser.txt
550 Permission denied. //不能刪除現有資源
呵呵。。是不是所有條件都滿足了!!
任務完成!!