[134期]VSFTP服務的日常應用及疑難問題解析
VSFTP是一個基于GPL發(fā)布的類Unix系統上使用的FTP服務器軟件,它的全稱是Very Secure FTP ,從此名稱可以看出來,編制者的初衷是代碼的安全。安全性是編寫VSFTP的初衷,除了這與生俱來的安全特性以外,高速與高穩(wěn)定性也是VSFTP的兩個重要特點。在速度方面,使用ASCII代碼的模式下載數據時,VSFTP的速度是Wu-FTP的兩倍,如果Linux主機使用2.4.*的內核,在千兆以太網上的下載速度可達86MB/S。在穩(wěn)定方面,VSFTP就更加的出色,VSFTP在單機(非集群)上支持4000個以上的并發(fā)用戶同時連接,根據Red Hat的Ftp服務器(ftp.redhat.com)的數據,VSFTP服務器可以支持15000個并發(fā)用戶
VSFTP集合了高效易配置易管理、高安全性為一身,市場應用十分廣范,很多國際性的大公司和自由開源組織在使用,如:Red Hat, Suse,Debian,OpenBSD。
本期門診主要內容就是討論VSFTP在實際使用環(huán)境中遇到的各種問題,以及如何與整體網絡環(huán)境融合,服務器和數據安全等問題。希望本次門診能讓大家充分利用VSFTP的性能,降低VSFTP服務器的安全風險,解決大家平時遇到的疑難問題。
技術門診是51CTO社區(qū)品牌欄目,每周邀請一位客座專家,為廣大技術網友解答疑問。從熱門技術到前沿知識,從技術答疑到職業(yè)規(guī)劃。每期一個主題,站在最新最熱的技術前沿為你引航!
本期技術門診我們邀請到微軟最有價值專家(MVP),高級講師宋楊、王旭忠兩位專家。以linux下vsftp為討論點,和大家討論交流vsftp配置管理中遇到的問題及相應的解決方案。
姓 名:宋楊
擅長領域:服務器,網絡
微軟最有價值專家(MVP),網絡技術高級講師。熟悉Windows / Linux服務搭建,廣域網技術,Voip,Cisco / 華為網絡技術。多年大型企業(yè)網站建設及系統集成經驗。擅長ERP、CRM系統部署,曾長期致力于汽車服務行業(yè)的信息化解決方案。有著豐富的微軟及 Sap公司系統產品實施及部署經驗。項目經驗:成功整合過Windows、IBM、SAP、騰訊E、用友、紹興卓越軟件,北京易車等知名國內外信息化系統。一汽大眾大SAP系列行業(yè)項目,華晨金杯售后服務信息化項目,鄭州日產ERP /CRM項目、上汽奇瑞ERP項目等。
姓 名:王旭忠
擅長領域:Linux/Windows服務器,Exchang,SQL server,Oracle,各種防火墻
linux服務高級講師。有三年基于unix平臺的操作系統定制,三年ISP大型網絡規(guī)劃設計項目經驗。曾擔任高新項目部技術主管,參與Coventive XLinux 操作系統網絡部分軟件開發(fā)及整合,參與公司網絡部分案例的軟硬件方案設計及實施,參與MNARA旗下Kebi.co.kr(韓國最大論壇)郵件系統提供網站建設。
查看本期門診精彩實錄:http://doctor.51cto.com/develop-147.html
參與最新技術門診:http://doctor.51cto.com/
精選本期網友提問與專家解答,以供網友學習參考。
Q:請問VSFTP與MYSQL結合,用MYSQL增加與管理訪問虛擬的用戶,配置過程應如何操作?
A:主要配置如下:
1.設置VSFTPd配置文件
在vsftpd.conf文件中,加入以下選項:
guest_enable=YES
guest_username=vuser
修改的pam_service_name=ftp
2.mysqladmin -u root password 'passw0rd'
mysql -u root -p'passw0rd'
mysql>create database vuser;
mysql>use vuser;
mysql>create table users(name char(16) binary,passwd char(16) binary);
mysql>quit
3.設置MySQL的PAM驗證
mysql進行pam驗證的開源項目(http://sourceforge.net/projects/pam-mysql/)。首先從網站下載它的程序包pam_myql-0.5.tar.gz,復制到/root目錄中。在編譯安裝之前,要確保mysql-devel的RPM包已經安裝在你的機器上,如果沒有請從RHL安裝光盤中安裝該包。然后,執(zhí)行以下命令:
[root@hpe45 root]#tar xvzf pam_mysql-0.5.tar.gz
[root@hpe45 root]#cd pam_mysql
[root@hpe45 pam_mysql]#make
[root@hpe45 pam_mysql]#make install
make install這一步可能會出現錯誤,那只好手動將該目錄下生成的pam_mysql.so復制到/lib/security目錄下。
接下來,我們要設置VSFTPd的PAM驗證文件。打開/etc/pam.d/ftp文件,加入以下內容:
auth required pam_mysql.so user=root passwd=passw0rd host=localhost db=vuser table=users
usercolumn=name passwdcolumn=passwd crypt=2
account required pam_mysql.so user=root passwd=passw0rd host=localhost db=vuser
table=users usercolumn=name passwdcolumn=passwd crypt=2
上面涉及到的參數,只要對應前面數據庫的設置就可以明白它們的含義。這里需要說明的是crypt參數。crypt表示口令字段中口令的加密方式:crypt=0,口令以明文方式(不加密)保存在數據庫中;crypt=1,口令使用UNIX系統的DES加密方式加密后保存在數據庫中;crypt=2,口令經過MySQL的password()函數加密后保存。
5.其余配置可以和虛擬用戶配置一樣,就是使用pam-mysql來進行虛擬用戶的用戶添加。比較簡單。
Q:老師好!我在使用service vsftpd stop命令時無法關閉ftp服務,顯示如下信息:
Shutting down vsftpd: [FAILED]
查看狀態(tài)信息如下:
# service vsftpd status
vsftpd dead but subsys locked
請問應該如何解決?
問題補充:刪除文件/var/lock/subsys/vsftpd 能把服務停止,但是再次啟動vsftpd服務后的狀態(tài)還是:vsftpd dead but subsys locked
A:首先用命令netstat -tlunp|grep 21檢查有沒有其他的FTP SERVER工作,結果如下:
再看grep -i ftp /etc/xinetd.d/*結果如下:
修改/etc/xinetd.d/gssftp這個文件,disable = no改成disable = yes。然后,重啟xinetd,service xinetd restart,再重啟動vsftpd, service vsftpd restart
Q:兩位專家:如何設置vsftpd使之可以將特定用戶限制在特定的目錄內?
A:方法1:adduser -d 目錄 用戶名 ,在/etc/vsftpd/vsftpd.conf中加入chroot_local_user=YES (禁錮所有用戶的/目錄為屬主目錄)。
方法2: adduser -d 目錄 用戶名 修改/etc/vsftpd/vsftpd.conf中的chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list (vsftpd.chroot_list文件內寫入的用戶就限禁錮用戶的/目錄為屬主目錄),vi /etc/vsftpd.chroot_list 加入你要限制的用戶的用戶名稱即可。
Q:專家好!我新增一位使用者 test 加目錄 test 。使用cuteftp可以連上,也可以上傳及下載文檔,但是對 /var/ftp/pub反而是可以下載卻無法上傳,此folder權限設為777. 我使用RPM裝FC5中的VSFTP 。謝謝專家了!
A:修改vsftpd.conf,匿名用戶創(chuàng)建文件 anon_upload_enable=YES ,匿名用戶創(chuàng)建目錄 anon_mkdir_write_enable=YES,是否允許匿名用戶登錄后執(zhí)行其他操作(刪除重命名等)anon_other_write_enable=YES
注意:/var/ftp不能出現other為w,否則ftp匿名無法登陸。
Q:我想請問專家:在vsftpd中怎么限制IP地址。比如只要某個IP或IP段訪問我的FTP,應該怎么配置,是在vsftp.conf中配置還是另外哪個配置文件里?請專家?guī)臀乙幌隆?/FONT>
A:使用Vsftpd+tcp_wrappers控制主機和用戶訪問tcp-wrappers的執(zhí)行順序:
先執(zhí)行hosts.allow,如果hosts.allow里面有名單,則允許名單內的機子訪問;否則,則向下尋找hosts.deny,如果hosts.deny里面有名單,則拒絕名單內的機子訪問,如果也沒有(即allow和deny里面都沒有名單)則允許該主機訪問。在主機(192.168.1.102)上配置vsftpd服務,使得除了192.168.1.100以外允許192.168.1.0/24網段的其他主機訪問此FTP服務。
編輯/etc/hosts.allow
vsftpd:192.168.1.100:DENY
vsftpd:192.168.1.
重啟vsftpd,可達到目的
或
編輯/etc/hosts.deny
vsftpd:192.168.1.100
編輯/etc/hosts.allow
vsftpd:192.168.1.
Q:宋老師,王老師:
linux配置vsftpd服務,配好之后root無法登陸。本地測試顯示如下:
[root@viv ~]# ftp 127.0.0.1
Connected to 127.0.0.1.
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 (127.0.0.1:root): root
530 Permission denied.
Login failed.
遠程登陸同樣報錯:
530 Permission denied.
Login failed.
還有一個問題:為什么我的本地賬戶都無法登陸了,均顯示錯誤:530 login incorrect。希望老師幫幫忙,謝謝啦!
A: root用戶默認是被禁止登陸vsftpd的服務器的。方法1.去掉/etc/vsftpd.ftpusers里面的root用戶。修改vsftpd.conf里面userlist_enable=YES,userlist_deny=NO,重啟服務即可。方法2.去掉/etc/vsftpd.ftpusers里面的root用戶。去掉/etc/vsftpd.user_list里面的root用戶。登錄即可。
Q:老師,在做vsftp的時候,為什么一定要關了selinux,設置成disabled,除了不設置,還有其他的辦法嗎?還有關于selinux能不能詳細的說一下呢? 謝謝了!
附:setsebool -P ftp_home_dir 1 這個命令就可以不用關了selinux了么?
A:這常常是因為SELinux不允許vsftpd線程訪問用戶主目錄造成的。解決方法為:
使用root用戶登錄,然后執(zhí)行以下命令來賦予權限:
setsebool -P ftp_home_dir 1
然后重啟vsftpd服務:
service vsftpd restart
使用用戶登錄即可
SELinux(Security-Enhanced Linux) 是美國國家安全局(NAS)對于強制訪問控制的實現,是 Linux上最杰出的新安全子系統。NSA是在Linux社區(qū)的幫助下開發(fā)了一種訪問控制體系,在這種訪問控制體系的限制下,進程只能訪問那些在他的任務中所需要文件。說下概念吧。SELinux牽扯的東西很多。這次不詳細說了,什么時候可以做個SELinux的門診再說。
Q:我不想讓vsftp默認路徑是 pub,怎么讓默認路徑改為根目錄 / ?最好能指導我怎么修改配置文件的辦法。vsftpd.conf中間有句話chroot_list_file=/etc/vsftpd.chroot_list是不是修改這個?謝謝老師了!
A:在vsftpd.conf中加anon_root=/var/www,另外檢查下權限然后 重起 vsftpd
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list (vsftpd.chroot_list文件內寫入的用戶就禁錮用戶的/目錄為屬主目錄)
Q:感覺VSFTP配置起來還是挺簡單的,再深入一點不知道還能實現什么功能?
A:vsftpd大家用的也只是平常的東西,深入功能很多的:
1.證書支持
2.虛擬用戶和數據庫的結合實現數萬及更多用戶訪問及統計等
3.用戶詳細權限設置
4.支持大量數據訪問的調優(yōu)
5.數據流量的控制
Q:請問老師vsftp在配置過程中如何能做到:
1、只能上傳。不能下載、刪除、重命名。
2、只能下載。不能上傳、刪除、重命名。
3、只能上傳、刪除、重命名。不能下載。
4、只能下載、刪除、重命名。不能上傳。
以下是我關于這四個問題的文章,請老師指點:http://xudeqiang.blog.51cto.com/224075/170040
A:你只寫了辦法挺獨到的,其實用虛擬用戶來做比較常用一些。那樣更加好控制用戶
Q:VSFTP需要的硬件配置如何?和Windows server 2003的文件服務器來說,兩者的優(yōu)點分別是?
A: 王老師:vsftpd根據linux所使用的版本來定的。最低要求cpu 66Hz以上,內存16M以上就可以了。windows文件服務器比較適合于局域網內部使用,ftp服務對interne和局域網內使用都可以,而且ftp比windows文件服務器有更多的控制,比如每用戶流量限制等
A:宋老師:主要是看你的應用,vsftp靈活性強,所以在局域網環(huán)境和互聯網中都可以應用。換句話說:看你的用戶數量和使用場景來選擇物理服務器的配置,ftp服務關心的硬件只有三個CPU(處理效率)、內存(增加ftp業(yè)務的應付處理性能)、硬盤(存儲空間),最低配置王老師已經給了,我省了 嘎嘎。高配服務器,建議不要配置太大的內存,多了反而浪費。我重點說說應用場景好了:
windows server 2003 的文件服務器主要應用場景是小型局域網(廣播域越小,效率越高),他是基于SMB實現的,通過端口445實現數據連接。在局域網內20臺以下PC的應用場景中是比較可觀的,但,PC一旦過多就會大大降低應用效率,因為SMB的數據連接是采用廣播定位服務器的方式工作的,我們很熟悉的netbios協議就是這樣通過139端口定位服務器的。所以局域網內PC越多(主要是對文件服務器的訪問越頻繁)廣播就越多,從而應用效率降低。(補充:也有的公司,使用VPN在互聯網訪問遠程分支機構的文件服務器,這樣的應用也是可以的。)而ftp則是單播實現的,所以對局域內通訊沒有太大的影響。而且在pc臺數過多的情況下可以正常應付大量的業(yè)務訪問。所以在比較大規(guī)模的企業(yè)應用場景,多選擇FTP作為實現文件服務的手段,而兼高效、廉價、安全、易管理配置于一身的VSFTP就更適合了?;ヂ摼W就更不用說了。很多軟件公司checkin的時候都是使用FTP+安全驗證機制來實現的。
Q:vsftp 客戶端是win xp,如何解決客戶端亂碼問題?
A: 修改linux編碼為xp的編碼就好了,方法如下
1.修改/etc/sysconfig/i18n內容為
LANG="zh_CN.GB2312"
SUPPORTED="zh_CN.GB2312"
2.執(zhí)行
export LANG=zh_CN.GB2312
export LC_ALL=zh_CN.GB2312
Q:老師您好,我想請教一下,我前兩天做了個試驗,通過機器A的VMWARE進行虛擬Linux,開啟SAMBA和VSFTP,然后又在機器B的VMWARE上光盤BOOT啟動linux askmethod,通過FTP方式安裝,總是無法安裝成功。但在機器C直接安裝就沒有問題,并且在B/C機器上測試FTP功能也正常。不知道是不是FTP不支持雙VMWARE呢還是有其他的原因,麻煩老師了!注:SAMBA和VSFTP的設置都是最基礎的那種,沒有權限,允許匿名登陸也可以實體登陸。
A:你最好檢查一下你的vmware的B到A的網絡配置,要是服務器有問題,C是無法安裝的。
Q:老師好,我想問的是VSFTP的權限問題,怎么限制用戶具體上傳文件的大小,怎么限制根據下載上傳的次數,適當的給予一定的權限的提升?謝謝老師!
A:解答第一個問題:用戶上傳的文件大小和空間存放大小可以使用Quota進行處理。解答第二個問題:修改vsftpd.conf配置文件中的xferlog_enable=YES (打開流量日志功能)xferlog_file=/var/log/vsftpd.log (日志文件存放地點),分析vsftpd.log文件中某文件的用戶下載次數,上傳次數進行程序控制即可。比如發(fā)現日志出現a用戶下載xxx.rar文件出現3次,則xxx.rar文件權限為000。
Q:看專家的解答真的很細心,很耐心。我想請教一個問題,我的vsftpd使用的是anonymous_enable=NO,使用的用戶的登錄,當時每次登陸都會等很久,大概10秒左右。于是我去抓包分析原因,發(fā)現client端會先使用匿名用戶登錄一次,被拒絕以后,才使用輸入的ID,這個是怎么回事?想了很多辦法,沒有解決,我就沒管他了,但是后來自己又好了。相當郁悶啊。能請專家分析下原因嗎?
A:其實這個問題是您所使用的客戶端軟件中存在緩存或者記錄造成的,與服務器沒有關系的。
Q:老師:為什么通過VSFTP上傳文件后,文件內容的頭部都會被添加進去一些代碼,而且有什么上傳到服務器上的文件大小和這個文件在我本機的大小是不一樣的,差的很多。
A: 在傳輸文件的時候分為文本方式和ASCII方式,如果一個二進制文件(.exe)所使用的是默認文本方式就會被加東西的,你需要選擇為ASCII方式即可。
Q:還有一個問題是關于下載的線程和速度的限制。在公網上分享資源,比如一個游戲客戶端,這種情況線程和速度應該如何限制,我意思是一個ip給多少線程多少帶寬為宜。
A: 一般每ip 5個線程,帶寬64K。
Q:接11樓問題:當我們修改/etc/sysconfig/i18n 這個文件。比如原來是zh_CN.UTF-8 修改成 zh_CN.GB2312,這個時候 客戶端問題沒有了!可是在服務器上我們執(zhí)行service XXX restart 的時候提示都是亂碼 如何處理呢(我在Gnome環(huán)境)?
A:選擇GNOME環(huán)境的登錄語言為zh_CN.GB2312就好了
Q:現在vsftpd不知怎么可以做每個用戶的磁盤配額。老師指點下。
A: 使用Quota來進行限制。第一步 讓分區(qū)支持Quota(包含boot目錄的分區(qū)不要做,出錯)
[root@linux ~]# vi /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/disk1 /disk1 ext3 defaults 1 2
LABEL=/disk2 /disk2 ext3 defaults,usrquota,grpquota 1 2
/dev/hda3 swap swap defaults 0 0
注意到我們所需要設定的那個/disk2的那一行,在第四字段多了usrquota,grpquota注意,在『defaults,usrquota,grpquota』之間都沒有空格!
第二步 重啟,讓修改生效
第三步 生成quota支持文件
[root@linux ~]# quotacheck -avug
quotacheck: Scanning /dev/hdb1 [/disk2] done
quotacheck: Checked 3 directories and 4 files
[root@linux ~]# ll /disk2
-rw------- 1 root root 6144 Sep 6 11:44 aquota.group
-rw------- 1 root root 6144 Sep 6 11:44 aquota.user
第四步 配置用戶或組限制
edquota -u quser1
Disk quotas for user quser1 (uid 502):
Filesystem blocks soft hard inodes soft hard
/dev/hdb1 0 45000 50000 0 0 0
再次強調的是,因為我的/disk2里面并沒有任何數據存在,所以,在上面這個表格當中,blocks與inodes才會都是0,如果您是使用/home來進行quota設定的,那么blocks/inodes肯定不會是0,這里要特別留意的。好了,上面特殊字體的部分就是我們的設定了,分別是45000及50000,那個單位是KBytes啦,轉成MBytes應該是要除以1024才對,不過,簡單算一下就好了,不用太介意!^_^。然后將quser1的設定直接復制給quser2吧!
edquota -p quser1 quser2
接下來要來設定寬限時間,還是使用edquota!
[root@linux ~]# edq!ota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hdb1 1days 7days
將時間改為1天(原本是7days改成1days),好了!查詢一下是否真的有設定進去呢?使用quota -v來查詢:
[root@linux ~]# quota -vu quser1 quser2
Disk quotas for user quser1 (uid 502):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 0 45000 50000 0 0 0
Disk quotas for user quser2 (uid 503):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 0 45000 50000 0 0 0
特別注意到,由于我們的使用者尚未超過45MB,所以grace(寬限時間)就不會出現啦!這樣很夠清楚了吧?!
編輯群組可使用的空間:
[root@linux ~]# edquota -g qgroup
Disk quotas for group qgroup (gid 502):
Filesystem blocks soft hard inodes soft hard
/dev/hdb1 0 80000 90000 0 0 0
[root@linux ~]# quota -vg qgroup
Disk quotas for group qgroup (gid 502):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 0 80000 90000 0 0 0
這樣就設定好了group的quota!同樣的,因為整個群組的總使用量還沒有到達80000KBytes,當然那個grace就不會有任何信息顯示了!但這個地方倒是有很多朋友問到一個小問題,那就是『為什么我兩個用戶quser1、quser2的設定值在soft與hard分別是45/50MB,但為何你的group總量(hard)設定僅有90MB呢?』,也就是說,當某個用戶用了50MB的量,那另一個不就最多可以使用到40MB而已。
Q:聽說Vsftp 不能限制用戶每次上傳下載的文件的大小,有什么方法補救呢?
A:vsftpd沒有這個功能??梢杂胾limit來限制,rh系和debian的可以修改這個文件:
/etc/security/limits.conf
增加一行類似的:
ftpuser1 hard fsize XXXXXXX
這樣就增加了ftpuser1的文件限制。
Q:王老師,您好!您有博客嗎?我看你做網絡規(guī)劃和方案設計,能否介紹點網站服務器方案設計或者規(guī)范設計及實施的案例。期待?。?!
A:您可以隨時關注51cto網站和我的博客makewong.blog.51cto.com
更多精彩技術門診請訪問:http://doctor.51cto.com
【編輯推薦】