天天看點

CentOS6 vsFTP安裝與配置

客戶公司要架設兩台FTP伺服器分别給兩個地點的分公司使用,但是這兩台伺服器都 比較老了,一台HP 380G5 ,一台HP 380 G4,是以他們計劃用linux,用什麼版本他們就沒說,于是我計劃用CentOS6.2,其實安裝和配置vsFTP都很簡單,網上也很多了,不過還是詳 細記錄一下好   

環境:CentOS6.0+vsFTP 0:2.2.2-6.el6_2.1 

第一步:安裝vsftp pam db4    

yum install vsftpd pam* db4*-y    

========================================================================================

Installed:   

  db4-cxx.i686 0:4.7.25-16.el6              db4-devel.i686 0:4.7.25-16.el6  db4-devel-static.i686 0:4.7.25-16.el6  db4-java.i686 0:4.7.25-16.el6    

  db4-tcl.i686 0:4.7.25-16.el6              pam-devel.i686 0:1.1.1-10.el6   pam_ldap.i686 0:185-11.el6             pam_pkcs11.i686 0:0.6.2-11.1.el6     

  pam_ssh_agent_auth.i686 0:0.9-70.el6_2.2  vsftpd.i686 0:2.2.2-6.el6_2.1 

Dependency Installed:   

  pcsc-lite-libs.i686 0:1.5.2-6.el6

========================================================================================   

通過setup對系統服務及防火牆進行配置,然後reboot系統    

或者使用指令将vsftp配置為系統服務    

chkconfig --level 35 vsftpd on

第二步:配置vsftpd服務的宿主    

#useradd vsftpdadmin -s /sbin/nologin    

這個vsftpdadmin隻是用來替換root的,并不需要登入

第三步:建立ftp虛拟宿主帳戶     

#useradd ftpuser -s /sbin/nologin    

這ftpuser隻個虛拟帳戶的宿主,本身是不用登入的

第四步:配置vsftpd.conf    

更改配置前最好備份一下然後再改    

vim /etc/vsftpd/vsftpd.conf

修改下面紅色字型的部分為藍色字型的形式,紫色字型是配置原有的    

anonymous_enable=YES  -->  anonymous_enable=NO   //不允許匿名使用者通路,預設是允許。    

#chroot_list_enable=YES  -->  chroot_list_enable=YES      //不允許FTP使用者離開自己主目錄,預設是被注釋掉的。    

#chroot_list_file=/etc/vsftpd/chroot_list --> chroot_list_file=/etc/vsftpd/chroot_list  //如果開啟了chroot_list_enable=YES,那麼一定要開啟這個,這條是鎖定登入使用者隻能家目錄的位置,如果不開啟使用者登入時就會報500 OOPS的錯。   

注意:/etc/vsftp/chroot_list本身是不存在的,這要建立vim /etc/vsftp/chroot_list,然後将帳戶輸入一行一個,儲存就可以了    

local_enable=YES      //允許本地使用者通路,預設就是YES,不用改    

write_enable=YES      //允許寫入,預設是YES,不用改       

local_umask=022       //上傳後檔案的權限掩碼,不用改    

dirmessage_enable=YES //開啟目錄智語,預設是YES,開不開無所謂,我是預設就行    

xferlog_enable=YES    //開啟日志,預設是YES,不用改    

connect_from_port_20=YES   //設定連接配接端口20    

xferlog_std_format=YES   //設定vsftpd的服務日志儲存路徑,不用改    

(這步後面要有幾個操作才能運作,也就是touch這個檔案(見第五步),因為它本身不存在,而且還要給檔案寫入的權限)       

#idle_session_timeout=600  -->  idle_session_timeout=600  //會話逾時,用戶端連接配接到ftp但未操作,預設被注釋掉,可根據個人情況修改    

#async_abor_enable=YES  -->   async_abor_enable=YES     //支援異步傳輸功能,預設是注釋掉的,去掉注釋    

#ascii_upload_enable=YES  -->   ascii_upload_enable=YES   //支援ASCII模式的下載下傳功能,預設是注釋掉的,去掉注釋    

#ascii_download_enable=YES  -->   ascii_download_enable=YES   //支援ASCII模式的上傳功能,預設是注釋掉的,去掉注釋    

#ftpd_banner=Welcome to blah FTP service  //FTP的登入歡迎語,本身是被注釋掉的,去不去都行    

#chroot_local_user=YES  --> chroot_local_user=YES    //禁止本地使用者登出自己的FTP主目錄,本身被注釋掉,去掉注釋    

pam_service_name=vsftpd  //設定pam服務下vsftpdd的驗證配置檔案名,不用改    

userlist_enable=YES    //拒絕登入使用者名單,不用改    

TCP_wrappers=YES    //限制主機對VSFTP伺服器的通路,不用改(通過/etc/hosts.deny和/etc/hosts.allow這兩個檔案來配置)    

增加    

guest_enable=YES    //設定啟用虛拟使用者功能。    

guest_username=ftpuser   //指定虛拟使用者的宿主使用者。    

virtual_use_local_privs=YES   //設定虛拟使用者的權限符合他們的宿主使用者。    

user_config_dir=/etc/vsftpd/vconf   //設定虛拟使用者個人Vsftp的配置檔案存放路徑    

第五步:建立日志檔案    

#touch /var/log/vsftpd.log    //日志檔案    

#chown vsftpdadmin.vsftpdadmin /var/log/vsftpd.log   //屬于vsftpdadmin這個宿主

第六步:建立虛拟使用者檔案    

#mkdir /etc/vsftpd/vconf/    

#touch /etc/vsftpd/vconf/vir_user

第七步:建立虛拟使用者     

#vim /etc/vsftpd/vconf/vir_user     

virtualuser           //使用者名    

12345678           //密碼

注意:第一行使用者名,第二行是上一行使用者名的密碼,其他人的以此類推

第八步:生成資料庫    

#db_load -T -t hash -f /etc/vsftpd/vconf/vir_user /etc/vsftpd/vconf/vir_user.db

第九步:設定資料庫檔案的通路權限    

#chmod 600 /etc/vsftpd/vconf/vir_user.db     

#chmod 600 /etc/vsftpd/vconf/vir_user

第十步:修改/etc/pam.d/vsftpd内容    

echo "auth required pam_userdb.so db=/etc/vsftpd/vconf/vir_user" > /etc/pam.d/vsftpd     

echo "account required pam_userdb.so db=/etc/vsftpd/vconf/vir_user" >> /etc/pam.d/vsftpd      

第十步:建立使用者的配置檔案    

注意:使用者配置檔案的名字要和建立的“虛拟使用者”名字對應      

#touch /etc/vsftpd/vconf/virtualuser     

#vim /etc/vsftpd/vconf/virtualuser      

輸入:    

local_root=/home/virtualuser           //虛拟使用者的個人目錄路徑    

anonymous_enable=NO     

write_enable=YES      

local_umask=022      

anon_upload_enable=NO      

anon_mkdir_write_enable=NO      

idle_session_timeout=600      

data_connection_timeout=120      

max_clients=10      

max_per_ip=5     

local_max_rate=1048576     //本地使用者的最大傳輸速度,機關是Byts/s,我設定的是10M

第十一步:建立虛拟使用者目錄    

如果不建立虛拟使用者的個人目錄,那麼所有的虛拟使用者登入後所在的目錄都是同一個目錄下    

# mkdir /home/virtualuser    

# chown ftpuser.ftpuser ./virtualuser    

# chmod 600 /home/virtualuser    

配置就此完成,如果想增加新的使用者,隻要按照上面的第七步、第十步進行就可以了。

遇到的問題                                                    問題       

其實這回遇到的問題不多。    

1,450:讀取目錄清單失敗       

在配置完第一台vsftp後(上面的配置就是)再用同樣的過程做第二台,完成後用用戶端和浏覽器死活無法登入報錯:    

450:讀取目錄清單失敗    

隻有在指令提示符和Termin下通過ftp 192.168.88.30後ls沒有問題    

對比了之前的配置,每一步都沒錯,難到是PASV問題,于是在vsftpd.conf加上了一句pasv_enable=NO,然後……沒然後了,一切都正常了

2、中文亂碼    

這個是老生常談的問題,好象也一直沒有什麼好的解決辦法,網上也有提出改i18n,不過客戶提出不用改,他們公司主要都是英文檔,也我也省事了,不過還是當個問題記錄吧    

3、500 OOPS:cannot change directory:/home/pmfile

建立使用者後登入報錯,剛開始以為是selinux的問題,後來一想不對,其他的帳号都沒事,肯定剛才己關閉了selinux,那麼就是權限問題了,果然是 剛才忘了把權限給虛拟ftp宿主權限了:chown -R ftpuser.ftpuser /home/publicfile

4、530錯誤:Login incorrect.

這是一個讓我覺的搞笑的問題,第二台vsftp服務我用自己的本上的用戶端(FileZilla)登入沒問題,而客戶用他的本登入就不行,用的軟體都一 樣,不同的是我用的是Ubuntu,他用的是win7,但在win7的指令提示符下他卻也能登入也能ls,不是權限問題,不是pam問題,這兩塊都着手試 過,結果發現是客戶在終端輸入的密碼錯誤,之前我還一再問他到底有沒有輸錯密碼,他也十分肯定的說沒有,結果……

5、外網無法登入,550錯誤,錯誤: 讀取目錄清單失敗

這個問題很是撓頭,在做完第二台伺服器後讓客戶先從内網登入,一切都很正常,而從外網登入時就會出現“550 Permission denied.”“錯誤: 連接配接逾時”“錯誤: 讀取目錄清單失敗”,難到是權限?

試來試去什麼PASV、什麼權限更改全做了(這一步是我着實不想做的,要是登入使用者權限有問題内網也該無法登入),最後讓客戶的網管帶我去查了一下他們路由器的配置,我才發現他們的内網映射沒有開放TCP20端口,開放後就OK了

---------------------------------------------------------------------------------------------------

1、安裝vsftpd軟體包#yum -y install vsftpd db4 db4-utils

安裝完成後先關閉SELinux及iptables防火牆

2、啟動vsfptd伺服器#service vsftpd start

現在就可以用匿名使用者登入了。預設的匿名使用者為'ftp',密碼為空。根目錄為'/var/ftp'

現在匿名使用者隻能從伺服器上下載下傳檔案,沒有上轉及建立檔案夾等等權限。

3、vsftpd配置(/etc/vsftpd/vsftpd.conf)

a:設定使匿名使用者能夠上傳檔案下載下傳檔案以建立檔案夾等。

anon_upload_enable=YES #設定匿名使用者有上轉檔案的權限

anon_mkdir_write_enable=YES #設定匿名使用者建立檔案夾及檔案權限

anon_other_write_enable=YES #設定匿名使用者有重命名及删除等權限

改完上面的備置後重新開機vsftpd服務

登入vsftp伺服器後發現還是不能上轉檔案等,這裡是因為/var/ftp的目錄所屬權為root。

不過,即使你改了/var/ftp的屬性權為ftp能達到效果,不過你再次登入時你會發現登不了vsftp伺服器了。

所在,是以我們改ftp裡的面的檔案夾才可生效。

#chown ftp /var/ftp/pub

好了,完成上面這步後,我們的匿名用就可以正常登入并可以上傳下載下傳,及建立删除檔案夾等。

b:設定使本地使用者能夠上傳檔案下載下傳檔案以建立檔案夾等。首先我們要先建立一個本地使用者,因為vsftpd為了安全預設的情況下是不允許root等擁有進階權限的使用者登入的。

且體是哪些使用者可以檢視(/etc/vsftpd/ftpusers)

#useradd -s /sbin/nologin micxp  #這裡用 -s /sbin/nologin使該使用者不登入系統。

#passwd micxp    #這裡為給micxp使用者設定密碼為123

Changing password for user micxp.

New password:123

BAD PASSWORD: it is WAY too short

BAD PASSWORD: is too simple

Retype new password:123

passwd: all authentication tokens updated successfully.

好了,在vspftd.conf預設的置設定就可以用本地使用者登入ftp伺服器了。并且也有上轉與下載下傳

删除與建立檔案夾等權限,不過,你會發這個使用者可以切換到系統的根目錄下。這樣是很不安裝的,

是以我們要設定配置檔案,把本地使用者限制在自己的家目錄下。也就是/home/micxp

chroot_local_user=YES  #這裡開啟把所有的本地使用者限制在自己的家目錄下(下面的設定将無效)

如需限制部份使用者把上面的配置設為NO,并把下面的兩個啟用。

chroot_list_enable=YES #這裡開啟是把需要限制的使用者限制在家目。需要限制的使用者須寫入下面的chroot_list檔案中。

# (default follows)

chroot_list_file=/etc/vsftpd/chroot_list  #這個與chroot_list_enable配對使用。

現在我對本地使用者的配置己基本完成。對于一些如果限速及用戶端連結數的設定在後面介紹。

下面是控制本地使用者是否可登入配置

第一種方法

userlist_enable=YES

userlist_deny=YES #則 /etc/vsftpd/user_list檔案中的使用者禁止登入

第二種方法

userlist_deny=NO  #則 /etc/vsftpd/user_list檔案中的使用者可以登入

說明:"/etc/vsftpd/user_list"是預設存在的,還有一個檔案"/etc/vsftpd/ftpusers"這個檔案中的使用者是禁止登入。

c:設定使用虛拟使用者能夠上傳檔案下載下傳檔案以建立檔案夾等。

首先建立一個虛拟使用者密碼的文本檔案,格式為單數行為使用者名,偶數行為密碼

如下:

vi /etc/vsftpd/vuser.txt

輸入以下内容

vmicxp  #虛拟用啟名

456     #使用者密碼

儲存,并用db_load生成使用者密碼庫檔案。如下:

#db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db

#chmod 600 /etc/vsftpd/vuser.db  #為了安全設為隻讀。

現在編輯/etc/vsftpd/vsftpd.conf 檢視是有否有 pam_service_name=vsftpd 確定開啟。如果沒有自行添加。

pam_service_name=vsftpd

guest_enable=YES  #這個是開啟虛拟使用者

guest_username=vsftp  #虛拟使用者所映射的本地使用者

現在來建立一下這個"vsftp"使用者

#useradd vsftp

上面那個vsftpd是在/etc/pam.d/vsftpd 這個文,打開這個檔案用#号注釋掉所有内容。并添加以下兩行。

auth required pam_userdb.so db=/etc/vsftpd/vuser

account required pam_userdb.so db=/etc/vsftpd/vuser

需要注意的是,上面那個db所指的vuser這個檔案不需要加".db"不然會登入不了的。

好了,現在就可以用vmicxp這個使用者登入vsftp伺服器了,不過你會發現能登入但什麼也看不到。是因為虛拟用的預設權限為匿名用權限,需在主配置檔案中設定"virtual_use_local_privs=YES"使虛拟使用者擁有和本地使用者一樣的權限。

virtual_use_local_privs 這個參數具體用法如下。

當virtual_use_local_privs=YES時,虛拟使用者和本地使用者有相同的權限;

當virtual_use_local_privs=NO時,虛拟使用者和匿名使用者有相同的權限,預設是NO。

當virtual_use_local_privs=YES,write_enable=YES時,虛拟使用者具有寫權限(上傳、下載下傳、删除、重命名)。

當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,

anon_upload_enable=YES時,虛拟使用者不能浏覽目錄,隻能上傳檔案,無其他權限。

當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,

anon_upload_enable=NO時,虛拟使用者隻能下載下傳檔案,無其他權限。

anon_upload_enable=YES時,虛拟使用者隻能上傳和下載下傳檔案,無其他權限。

anon_mkdir_write_enable=YES時,虛拟使用者隻能下載下傳檔案和建立檔案夾,無其他權限。

anon_other_write_enable=YES時,虛拟使用者隻能下載下傳、删除和重命名檔案,無其他權限。

注你也可以用user_config_dir=/etc/vsftpd/vsftpd_user_conf來為每個虛拟用設定當獨的權限

#mkdir /etc/vsftpd/vsftpd_user_conf

#vi /etc/vsftpd/vsftpd_user_conf/vmicxp  #vmicxp 這個檔案名對應于你每一個虛拟使用者。

#如為這個用設定他的家目錄。

local_root=/home/vmicxp

好了現在也完成了虛拟使用者的設定了。

umask是unix作業系統的概念,umask決定目錄和檔案被建立時得到的初始權限

umask = 022 時,建立的目錄 權限是755,檔案的權限是 644

umask = 077 時,建立的目錄 權限是700,檔案的權限時 600

vsftpd的local_umask和anon_umask借鑒了它

預設情況下vsftp上傳之後檔案的權限是600,目錄權限是700

想要修改上傳之後檔案的權限,有兩種情況

如果使用vsftp的是本地使用者

則要修改配置檔案中的 local_umask 的值

如果使用vsftp的是虛拟使用者

則要修改配置檔案中的 anon_umask 的值

'

本文轉自leonardos51CTO部落格,原文連結:http://blog.51cto.com/leomars/1551147 ,如需轉載請自行聯系原作者