201208231616VSFTP 安裝及設定

vsftpd is a GPL licensed FTP server for UNIX systems。是的,今天就來說說如何架設 FTP server (安裝環境於 CentOS6)。

要完成 FTP 的通訊要有兩個元件 FTP client 與 FTP Server, FTP client 的種類繁多,可以挑自己習慣或喜歡的來用 

~但 CentOS6 上預設是沒安裝 FTP client的(至少我選的安裝模式是如此),那該怎麼裝呢?就輕鬆的使用 yum 的方式來安裝。

yum install ftp -y

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

既然這麼懶直接用 yum 來裝,那 FTP Server 也可以嗎?當然 Server 你也可以用「yum install vsftpd -y」,但我們用圖形化的安裝方式來說明

開始看圖說故事,點選「新增/移除軟體」

分類選 Servers -> FTP伺服器 -> 然後再右邊選「Very Secure FTP Daemon」->最後套用,就開始安裝了

上一個步驟只是安裝,並未開始執行,也未啟動為服務(service),所以下圖就是將他啟動為服務,當然你也可以用 service vsftpd start 。

這時可以從外部連進來了嗎? 當然不行......還要繼續開啟 FTP 所需要的連接埠,一般預設就 port 20 & 21 當然你也可以改成其他埠。

所以你必須依自己的需求修改 /etc/sysconfig/iptables 然後 /etc/init.d/iptables restart 重新啟動 iptables。

過了這麼多關,可以連進去 FTP Server 了吧....答案還是不行

因為你根本還沒開始執行 vsftpd.....直接到 /etc/init.d/vsftpd 去 start 嗎?  不!!!
先修改一些設定吧!

vsftp 的環境設定檔位於 /etc/vsftpd 目錄,主要設定檔為 /etc/vsftpd/vsftpd.conf

詳細的參數設定請參考 鳥哥的大作「http://linux.vbird.org/linux_server/0410vsftpd.php

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

我有使用的設定   (先備份預設的設定檔 vsftpd.conf   sudo cp /etc/vsftpd/vsftpd.conf   /etc/vsftpd/vsftpd_org.conf)  -- 20150210 updated
sudo vi /etc/vsftpd/vsftpd_org.conf
#anonymous_enable=YES                             #  允許匿名登入  FTP
anonymous_enable=NO                                #  不允許匿名登入  FTP
local_enable=YES                                          #  允許本機使用者可以登入
write_enable=YES                                         #  允許使用者可以寫入檔案
#idle_session_timeout=600                         #  預設 600秒
idle_session_timeout=300                            #  idle 多久即斷線 300秒
data_connection_timeout=120                     #  資料連線斷線時間
chroot_local_user=YES                                 #  將使用者可瀏覽的目錄封鎖在自己的家目錄
chroot_list_enable=YES                                #  搭配下一個選項
#allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd/chroot_list     #  在此檔案裡記錄哪些使用者可以「不受」chroot 限制,可以瀏覽非自己的家目錄
listen=YES                                                     #  vsftpd 服務將以 standalone 獨立方式運作
pasv_enable=YES                                         #  啟用 passive 傳送
use_localtime=YES                                       #  使用本地(本機)的時間
connect_timeout=60                                   #  連線斷線時間
accept_timeout=60                                     #  
max_per_ip=1                                             #  允許每個使用者的連線數,0為不限制
local_max_rate=1000000000                    #   最大的傳輸速度,單位 Bytes

參數也可以參考:https://security.appspot.com/vsftpd/vsftpd_conf.html 
**********
假設你的使用者不是全都可以利用 shell 登入到主機來,你可能會設定該使用者的 shell 為 /sbin/nologin 或自行取名 /bin/youcannotlogin (反正就是要他沒有對應的 shell 可以登入)
那在設定 vsftpd 時需要注意,那些用你自行取名的 shell (如 /bin/youcannotlogin) 的使用者可能會無法登入,因為 vsftpd 會參考 /etc/shells  裡的 shells 

所以要把你自行取名的  shell 名稱給加入到 /etc/shells 去

sudo vi /etc/shells

su ; echo "/bin/youcannotlogin" >> /etc/shells

然後重新啟動 vsftpd
sudo service vsftpd restart

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

依需求改好了,vsftpd 也執行了,可以從遠端連進來了吧~ 結果可能是你還會遇到下面的問題「500 OOPS: cannot change directory:/home/your_account」

 

這個問題是因為「SELinux」安全性的關係,你可以使用 「getsebool -a」觀看所有安全性的設定值 (需有管理者權限),然後用下方指令修改(讓使用者可以登入他的 home directory)

setsebool -P ftp_home_dir=1
service vsftpd restart 

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

QQ:如果可以登入、執行FTP命令~但無法上傳檔案到使用者的家目錄,得到「553 Could not create file.」錯誤
$ ftp sharess
Connected to sharess (140.112.77.22).
220 (vsFTPd 2.2.2)
Name (sharess:localuser): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put a
local: a remote: a
227 Entering Passive Mode (140,112,77,22,74,219).
553 Could not create file.
ftp> bye

狀況:使用者 ftpuser 可以正常用 SSH 登入,也有權限寫入檔案,但使用 ftp 就會產生 553 的錯誤
這情況是被 selinux 給擋了,你可以使用「getsebool -a | grep ftp 」來觀察 selinux 跟 FTP 有關之參數,而無法利用FTP上傳檔案,就是被「allow_ftpd_full_access」 給擋了
sudo setsebool -P allow_ftpd_full_access 1       來開啟他,1 或 on 都可以

是不是 vsftp 都必須開啟「allow_ftpd_full_access」~~~不是
這是因為我把特定使用者移到了非正常家目錄所在的位置,因而出現權限不足的問題

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

PS:哪如果得到這樣的結果呢?「200 PORT command successful. Consider using PASV.

這時候就要看你的 passive mode 是主動或被動,如果是主動式連線那表示你在 iptables 忘了開啟 Port:20,那如果是被動式~那就在 vsftpd.conf 加上 pasv_min_port=65400 與 pasv_max_port=65410 連後重新啟動  vsftpd。

Reference:

 

-----20150225 updated.--------------------------------------------------------------------

經過了上面的更新,已經可以使用一般的 FTP 軟體登入,但發現使用 CLI 的 FTP client 可以登入,卻無法正常存取,得到錯誤

230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (140,111,5,60,28,145).
ftp: connect: 找不到通往該主機的路由路徑
ftp> pass
Passive mode off.
ftp> dir
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.

 而原本在 active 或 passive 傳輸模式已經設定「pasv_enable=YES」,怎麼還無法傳輸呢?

解決方式:

M1:修改 sudo vi /etc/vsftpd/vsftpd.conf
可以在原本「pasv_enable=YES」設定下增加兩行
pasv_min_port=5000
pasv_max_port=6000
指定 passive mode 傳輸所用的連接埠範圍由 5000 ~ 6000 之間(只要 PORT > 1024 範圍隨你設定囉)
sudo service vsftpd restart

M2:修改防火牆設定 (動態連接埠防火牆不一定要開啟,但經過上面 M1 步驟後,若還是無法正常存取,可以將你設定的 port 範圍打開)
修改 sudo vi /etc/sysconfig/iptables
增加
-A Firewall-Rules -m state --state NEW -m tcp -p tcp --dport 5000:6000 -j ACCEPT
重新啟動 iptables
sudo service iptables restart

這樣CLI FTP Client 應該就可以正常傳輸了。

~End

 --------20151125--------------------------------------------------------------
限制某些使用者不能使用 vsftp
可以將要拒絕的使用者清單寫在「/etc/vsftpd/user_list」,一行一個帳號名稱
然後增加參數
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list

然後重新啟動  vsftpd 就可以了

 

 

 

回應
Google Search
Google
累積 | 今日
loading......
平均分數:0 顆星
投票人數:0
我要評分:
Google