1. 程式人生 > >vsftpd使用虛擬賬號功能以及設置相關權限

vsftpd使用虛擬賬號功能以及設置相關權限

linux ftp vsftpd 服務器

我們登錄FTP有三種方式,匿名登錄、本地用戶登錄和虛擬用戶登錄。

匿名登錄:在登錄FTP時使用默認的用戶名,一般是ftp或anonymous。

本地用戶登錄:使用系統用戶登錄,在/etc/passwd中。

虛擬用戶登錄:這是FTP專有用戶,有兩種方式實現虛擬用戶,本地數據文件和數據庫服務器。

FTP虛擬用戶是FTP服務器的專有用戶,使用虛擬用戶登錄FTP,只能訪問FTP服務器提供的資源,大大增強了系統的安全。

例:FTP虛擬賬號

公司為了宣傳最新的產品信息,計劃搭建FTP服務器,為客戶提供相關的文檔的下載。對所有互聯網開放共享目錄,允許下載產品信息,禁止上傳。公司的合作單位能夠使用FTP服務器進行上傳和下載,但不可以刪除數據。需要保證服務器的穩定性並做優化。


創建FTP虛擬賬號。允許客戶使用FTP賬號下載文件。合作夥伴賬號:vip賬號 可以上傳文件。

需考慮到服務器的安全性,所以關閉實體用戶登錄,是用虛擬賬號驗證機制,並對不同賬號設置不同的權限。 保證服務器的性能,還需要根據用戶等級,限制客戶端的連接數以及下載速度。


1、創建用戶數據庫:

(1)創建用戶文本文件

先建立用戶文本文件vsftpd_virtualuser.txt,添加兩個虛擬賬號,公共賬號ftp以及客戶賬號vip

[[email protected] vsftpd]# vim /etc/vsftpd/vsftpd_virtualuser.txt  #寫入以下內容,格式:一行賬號一行密碼。
ftp      #用戶                                      
123456         #密碼
vip                                            
123456

(2)生成數據庫

保存虛擬賬號和密碼的文本文件無法被系統賬號直接調用。我們需要使用db_load命令生成db數據庫文件。

安裝:

[[email protected] vsftpd]# rpm -qf `which db_load`

db4-utils-4.7.25-22.el6.x86_64
[[email protected] vsftpd]# db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt /etc/vsftpd/vsftpd_virtualuser.db

選項:

-T 允許應用程序能夠將文本文件轉譯載入進數據庫。

-t hash 使用hash碼加密。

-f 指定包含用戶名和密碼文本文件。此文件格式:奇數行用戶名、偶數行密碼。

[[email protected] vsftpd]# rm -rf vsftpd_virtualuser.txt        #為了安全,刪除此文件。後期將不再使用此文件。

(3)修改數據庫文件訪問權限

[[email protected] vsftpd]# chmod 600 /etc/vsftpd/vsftpd_virtualuser.db 
[[email protected] vsftpd]# ls -l /etc/vsftpd/vsftpd_virtualuser.db 
-rw------- 1 root root 12288 9月  24 13:16 /etc/vsftpd/vsftpd_virtualuser.db


2、配置PAM文件

為了使服務器能夠使用數據庫文件,對客戶端進行身份驗證,需要調用系統的PAM模塊。

PAM概述:

PAM(Pluggable Authentication Module)為可插拔認證模塊,不必重新安裝應用系統,通過修改指定的配置文件,調整對該程序的認證方式。PAM模塊配置文件路徑為/etc/pam.d/目錄,此目錄下保存著大量與認證有關的配置文件,並以服務名稱命名。

[[email protected] vsftpd]# vim  /etc/pam.d/vsftpd

修改vsfptd對應的PAM配置文件/etc/pam.d/vsftpd。將默認配置使用“#”全部註釋,添加兩行

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_virtualuser

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_virtualuser


3、創建虛擬賬號對應的系統用戶及FTP共享的目錄。

對於公共賬號和客戶賬號,因為需要配置不同的權限,所以可以將兩個賬號的目錄進行隔離,控制用戶的文件訪問。公共賬號ftp對應系統賬號ftpuser,並指定其主目錄為/var/ftp/share,而客戶賬號vip對應系統賬號ftpvip,指定主目錄為/var/ftp/vip。

[[email protected] vsftpd]# useradd -d /var/ftp/share ftpuser
[[email protected] vsftpd]# useradd -d /var/ftp/share ftpvip
[[email protected] vsftpd]# chmod -R 500 /var/ftp/share/                    #修改權限
[[email protected] vsftpd]# chmod -R 700 /var/ftp/vip/
[[email protected]  vsftpd]#  chown ftpuser /var/ftp/share
[[email protected]  vsftpd]#  chown ftpvip /var/ftp/vip

chmod -R 500 /var/ftp/share/ : 公共賬號ftp只允許下載,修改share目錄其他用戶權限 rx 可讀可執行。

chmod -R 500 /var/ftp/vip/ : 客戶賬號vip允許上傳和下載,所以對vip目錄權限設置為 rwx ,可讀可寫可執行。


4、建立配置文件:

一個配置文件無法實現此功能,需要為每個賬戶建立獨立的配置文件,並根據需要進行相應的設置。

(1)修改vsftpd.comf 主配置文件

[[email protected] vsftpd]# cat  /etc/vsftpd/vsftpd.conf | grep -v "#"
anonymous_enable=NO                                #不允許匿名登錄
local_enable=YES                                   
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
max_clients=300                        #設置FTP服務器最大接入客戶端數為300個
max_per_ip=10                         #設置每個IP地址最大連接數為10
user_config_dir=/etc/vsftpd/vuserconfig            #設置虛擬賬號的主目錄為/vuserconfig
userlist_enable=YES
tcp_wrappers=YES

(2)建立虛擬賬號配置文件

在user_config_dir指定路徑下,建立與虛擬賬號同名的配置文件並添加相應的配置字段。

首先建立公共賬號ftp的配置文件

[[email protected] vuserconfig]# mkdir /etc/vsftpd/vuserconfig
[[email protected] vuserconfig]# touch /etc/vsftpd/vuserconfig/ftp
[[email protected] vuserconfig]# touch /etc/vsftpd/vuserconfig/vip

配置虛擬賬號配置文件,寫入以下內容:

[[email protected] vuserconfig]# vim /etc/vsftpd/vuserconfig/ftp 
guest_enable=yes
guest_username=ftpuser
anon_world_readable_only=no
anon_max_rate=50000

解釋:

guest_enable=yes #開啟虛擬賬號登錄

guest_username=ftpuser #設置ftp 對應的系統賬號名稱為ftpuser

anon_world_readable_only=no #允許匿名用戶瀏覽整個服務器的文件系統

anon_max_rate=50000 #限定傳輸速率為50KB/s

註意:

vsftpd對於文件傳輸速度限制並不是絕對鎖定在一個數值上,而是在80%~120%之間變化,比如設置100KB/s,則實際速度在80~120KB/s之間變化。

[[email protected] vuserconfig]# vim /etc/vsftpd/vuserconfig/vip
guest_enable=yes
guest_username=ftpvip
anon_world_readable_only=no
write_enable=yes
anon_mkdir_write_enable=yes
anon_upload_enable=yes
anon_max_rate=100000

解釋:

guest_enable=yes #開啟虛擬賬號登錄

guest_username=ftpvip #設置ftp對應的系統賬號為ftpvip

anon_world_readable_only=no #允許匿名用戶瀏覽整個服務器的文件系統

write_enable=yes #允許在文件系統寫入權限

anon_mkdir_write_enable=yes #允許創建文件夾

anon_upload_enable=yes #開啟匿名賬號的上傳功能

anon_max_rate=100000 #限定傳輸速度為100KB/s


重啟vsftpd服務使配置文件生效

[[email protected] ~]# service vsftpd restart
關閉 vsftpd:                                           [確定]
為 vsftpd 啟動 vsftpd:                                    [確定]


測試:可以通過ftp客戶端和Windows進行測試。

(1)公共賬號ftp測試

在公共賬號測試前,我們先建立個測試文件。

[[email protected] ~]# cp /mnt/Packages/mysql-embedded-5.1.73-8.el6_8.x86_64.rpm /var/ftp/share   #共享的文件要大一些,方面後期測試下載速度。
[[email protected] ~]# cp -r /boot/grub/ /var/ftp/share/                            #復制一個目錄

在Linux下測試。

ftp客戶端命令:

lftp ftpIP -u username,passwd

或:

lftp ftpIP -u username


使用公共賬號ftp,登錄ftp服務器

[[email protected] ftp]# lftp 192.168.2.208 -u ftp,123456
lftp [email protected]:~> ls
drwxr-xr-x    2 0        0            4096 Sep 24 06:30 grub
-r--r--r--    1 0        0         2567552 Sep 24 06:29 mysql-embedded-5.1.73-8.el6_8.x86_64.rpm
-r-x------    1 0        0            2007 Sep 24 05:03 passwd
-r-x------    1 0        0        821772288 Sep 24 05:01 text.txt
lftp [email protected]:/> get mysql-embedded-5.1.73-8.el6_8.x86_64.rpm 
2567552 bytes transferred in 51 seconds (48.8K/s)       #速度限制在50KB/s左右

使用vip賬號登錄ftp服務器

[[email protected] ftp]# lftp 192.168.2.208 -u vip
口令: 
lftp [email protected]:~> ls            
-rw-r--r--    1 0        0        91459584 Sep 24 06:53 text.txt
lftp [email protected]:/> put text.log            #可以上傳
lftp [email protected]:/> ls
-rw-------    1 505      505             0 Sep 24 06:55 text.log
-rw-r--r--    1 0        0        91459584 Sep 24 06:53 text.txt
lftp [email protected]:/> rm -r text.log          #無法刪除
rm: Access failed: 550 Permission denied. (text.log)

[[email protected] ftp]# cp /var/ftp/share/mysql-embedded-5.1.73-8.el6_8.x86_64.rpm /var/ftp/vip/a.zip
lftp [email protected]:~> ls            
-r--r--r--    1 0        0         2567552 Sep 24 07:00 a.zip
-rw-------    1 505      505             0 Sep 24 06:55 text.log
lftp [email protected]:/> get a.zip
2567552 bytes transferred in 26 seconds (97.6K/s)     #速度在100KB/s左右


到這一步,我們已經成功創建了兩個虛擬賬號vip以及ftp,並且權限全部設置完畢。


如果後期vip賬號想要刪除某個文件怎麽辦呢?


drwx------    2 505      505          4096 Sep 24 06:22 text.log
lftp [email protected]:/> rm text.log/
rm: Access failed: 550 Permission denied. (text.log/)     #刪除失敗

編輯vip賬號的配置文件,添加一行。

[[email protected] vuserconfig]# vim vip 
guest_enable=yes
guest_username=ftpvip
anon_world_readable_only=no
write_enable=yes
anon_mkdir_write_enable=yes
anon_upload_enable=yes
anon_max_rate=100000
anon_other_write_enable=yes        #添加此行

重啟vsftpd服務重讀配置文件

[[email protected] vuserconfig]# service vsftpd restart
關閉 vsftpd:                                          [確定]
為 vsftpd 啟動 vsftpd:                                    [確定]


再次嘗試刪除文件

[[email protected] ~]# lftp 192.168.2.208 -u vip
口令: 
lftp [email protected]:~> ls            
-r--r--r--    1 0        0         2567552 Sep 24 07:00 a.zip
-rw-------    1 505      505             0 Sep 24 06:55 text.log
lftp [email protected]:/> rm -r text.log
rm 成功, 刪除 `text.log‘
lftp [email protected]:/>            #成功刪除文件

本文出自 “PooV的博客” 博客,請務必保留此出處http://xyhms.blog.51cto.com/12505169/1968187

vsftpd使用虛擬賬號功能以及設置相關權限