十五、CentOS下FTP安裝及配置
15.1. FTP的安裝
1、檢測是否安裝了FTP :
[[email protected] ~]# rpm -q vsftpd
vsftpd-2.0.5-16.el5_5.1
否則顯示:[[email protected]~]# package vsftpd is not installed
檢視ftp執行狀態
service vsftpd status
2、如果沒安裝FTP,執行yum install vsftpd命令進行安裝
如果無法下載,需要設定好yum如下
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.save
wget http://centos.ustc.edu.cn/CentOS-Base.repo
3、在linux中新增ftp使用者,並設定相應的許可權,操作步驟如下:
3.1、環境:
ftp為vsftp 被限制使用者名稱為test。被限制路徑為/home/test
3.2、建使用者:在root使用者下:
# useradd -d/home/test test //增加使用者test,並制定test使用者的主目錄為/home/test
# passwd test //為test設定密碼
3.3、更改使用者相應的許可權設定:
# usermod -s/sbin/nologin test //限定使用者test不能telnet,只能ftp
# usermod -s/sbin/bash test //使用者test恢復正常
# usermod -d /testtest //更改使用者test的主目錄為/test
3.4、限制使用者只能訪問/home/test,不能訪問其他路徑:
修改 # /etc/vsftpd/vsftpd.conf 如下:
chroot_list_enable=YES //限制訪問自身目錄
# (default follows)
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
編輯 vsftpd.chroot_list檔案,將受限制的使用者新增進去,每個使用者名稱一行
改完配置檔案,不要忘記重啟vsFTPd伺服器。
# /etc/init.d/vsftpd restart
3.5、如果需要允許使用者修改密碼,但是又沒有telnet登入系統的許可權:
# usermod -s /usr/bin/passwd test //使用者telnet後將直接進入改密介面
4、linux ftp埠怎麼設定
編輯/etc/vsftpd/vsftpd.conf,增加listen_port=2021編輯 /etc/services
檔案,將其中的
ftp 21/tcp 改為 ftp 2021/tcp
ftp 21/udp 改為 ftp 2021/udp執行 service vsftpd restart
重新啟動 vsftpd
服務這樣ftp埠改到了2021
配置防火牆,iptables
在配置檔案iptables 中新增 iptables -A INPUT-p tcp --dport 2021 -j ACCEPT ,將2021埠放開。
注:每次修改過ftp相關的配置檔案,都需要重啟ftp程序來生效。
5、問題:
原因是他的CentOS系統安裝了SELinux,因為預設下是沒有開啟FTP的支援,所以訪問時都被阻止了。
//檢視SELinux設定
# getsebool -a|grep ftp
ftpd_disable_trans --> off
或者
ftp_home_dir-->off
//使用setsebool命令開啟
# setsebool ftpd_disable_trans 1
或者
# setsebool ftp_home_dir 1
//檢視當前狀態是否是on的狀態
# getsebool -a|grep ftp
ftpd_disable_trans --> on
或者
ftp_home_dir-->on
//setsebool使用-P引數,無需每次開機都輸入這個命令
# setsebool -P ftpd_disable_trans 1
或者
# setsebool -P ftp_home_dir 1
# service vsftpd restart
安裝完成,盡情使用吧
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
vsftpd 檔案佈局
檔案 |
檔案描述 |
/etc/vsftpd/vsftpd.conf |
主配置檔案 |
/usr/sbin/vsftpd |
主程式 |
/etc/rc.d/init.d/vsftpd |
啟動指令碼 |
/etc/pam.d/vsftpd |
PAM認證檔案 |
/etc/vsftpd.ftpusers |
禁止使用vsftpd的使用者列表檔案 |
/etc/vsftpd.user_list |
禁止或允許使用vsftpd使用者列表檔案 |
/var/ftp |
匿名使用者主目錄 |
/var/ftp/pub |
匿名使用者下載目錄 |
/etc/logrotate.d/vsftpd.log |
日誌檔案 |
15.2. 系統帳戶
1.建立Vsftpd服務的宿主使用者:
[[email protected]]#adduser -d /data guest -s /sbin/nologin
預設的Vsftpd的服務宿主使用者是root,但是這不符合安全性的需要。www.linuxidc.com這裡建立名字為vsftpd的使用者,用他來作為支援Vsftpd的
建立Vsftpd虛擬宿主使用者:
[[email protected]]# useradd virtusers -s /sbin/nologin
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
15.3. vsftpd的配置
#anonymous_enable=YES
anonymous_enable=NO 設定不允許匿名訪問
local_enable=YES 設定本地使用者可以訪問。注意:如果該專案設定為NO那麼所有虛擬使用者將無法訪問。
write_enable=YES 設定可以進行寫操作。
local_umask=022 設定上傳後文件的許可權掩碼。
anon_upload_enable=NO 禁止匿名使用者上傳。
anon_mkdir_write_enable=NO 禁止匿名使用者建立目錄。
dirmessage_enable=YES 設定開啟目錄標語功能。
xferlog_enable=YES 設定開啟日誌記錄功能。
connect_from_port_20=YES設定埠20進行資料連線。
chown_uploads=NO 設定禁止上傳檔案更改宿主。
chroot_local_user=YES 設定登陸後.只可以訪問自己的屬主目錄.不可訪問上一層目錄檔案
xferlog_file=/var/log/vsftpd.log設定Vsftpd的服務日誌儲存路徑。注意,該檔案預設不存在。必須要手動touch出來,並且由於這裡更改了Vsftpd的服務宿主
使用者為手動建立的Vsftpd。必須注意給與該使用者對日誌的寫入許可權,否則服務將啟動失敗。
xferlog_std_format=YES 設定日誌使用標準的記錄格式
idle_session_timeout=600設定空閒連線超時時間,這裡使用預設。
data_connection_timeout=120設定單次最大連續傳輸時間,這裡使用預設
nopriv_user=vsftpd 設定支撐Vsftpd服務的宿主使用者為手動建立的Vsftpd使用者。注意,一旦做出更改宿主使用者後,必須注意一起與該服務相關的讀寫檔案的讀寫賦權問題
比如日誌檔案就必須給與該使用者寫入許可權等。
async_abor_enable=YES 設定支援非同步傳輸功能。
ascii_upload_enable=YES
ascii_download_enable=YES 設定支援ASCII模式的上傳和下載功能。
ftpd_banner=Welcometo blah FTP service ^_^ 設定Vsftpd的登陸標語。
chroot_list_enable=NO 禁止使用者登出自己的FTP主目錄。
ls_recurse_enable=NO 禁止使用者登陸FTP後使用"ls -R"的命令。該命令會對伺服器效能造成巨大開銷。如果該項被允許,那麼擋多使用者同時使用該命令時將會對該伺服器造成威脅。
listen=YES 設定該Vsftpd服務工作在StandAlone模式下。
pam_service_name=vsftpd 設定PAM服務下Vsftpd的驗證配置檔名。
userlist_enable=YES 設定userlist_file中的使用者將不得使用FTP。
tcp_wrappers=YES 伺服器使用tcp_wrappers作為主機的訪問控制方式。
以下這些是關於Vsftpd虛擬使用者支援的重要配置專案。預設Vsftpd.conf中不包含這些設定專案,需要自己手動新增配置。
guest_enable=YES 設定啟用虛擬使用者功能。
guest_username=virtusers指定虛擬使用者的宿主使用者。
virtual_use_local_privs=YES設定虛擬使用者的許可權符合他們的宿主使用者。
user_config_dir=/etc/vsftpd/vconf 設定虛擬使用者個人Vsftp的配置檔案存放路徑。也就是說,這個被指定的目錄裡,將存放每個Vsftp虛擬使用者個性的配置檔案,
一個需要注意的地方就是這些配置檔名必須和虛擬使用者名稱相同。儲存退出。
max_clients=99 伺服器的最大併發數
max_per_ip=5 使用者最大執行緒數
anon_max_rate=1000000 設定本底賬號最大傳輸率為1Mbps
禁止某些IP段得主機匿名訪問伺服器
tcp_wrappers=YES
編輯 /etc/hosts.allow
增加
vsftpd:192.168.110.11:DENY
檢視ftp日誌
xferlog_enable=YES 上傳和下載日誌檔案記錄 /var/log/vsftpd.log
xferlog_std_format=YES 傳輸日誌檔案將以標準xferlog的格式書寫 /var/log/xferlog
xferlog_file=/var/log/xferlog
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
通過本底資料檔案實現虛擬使用者訪問
安裝db4-utils
yum installdb4-utils
建立本地對映使用者,修改本底對映使用者目錄許可權
useradd -d /data/ftp/temp-s /sbin/nologin game
chmod o=rwx/data/ftp/temp
修改/etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=zqgamexw
生成虛擬使用者檔案
/etc/vsftpd/vsftpuser.txt
test001 虛擬user
123456 虛擬passwd
生成虛擬使用者資料檔案
db_load -T -t hash-f /etc/vsftpd/vsftpuser.txt /etc/vsftpd/vsftpuser.db
修改生成的使用者資料檔案許可權
chmod 600/etc/vsftpd/vsftpuser.db
修改PAM認證檔案 /etc/pam.d/vsftpd登出原有內容後新增
auth required /lib/security/pam_userdb.sodb=/etc/vsftpd/vsftpuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpuse
建立Vsftpd的日誌檔案,並更該屬主為Vsftpd的服務宿主使用者:
[[email protected]]#touch /var/log/vsftpd.log
[[email protected]]#chown vsftpd.vsftpd /var/log/vsftpd.log
建立虛擬使用者配置檔案存放路徑:
[[email protected]]#mkdir /etc/vsftpd/vconf/
製作虛擬使用者資料庫檔案
先建立虛擬使用者名稱單檔案:
[[email protected]]#touch /etc/vsftpd/virtusers
建立了一個虛擬使用者名稱單檔案,這個檔案就是來記錄vsftpd虛擬使用者的使用者名稱和口令的資料檔案,這裡給它命名為virtusers。為了避免檔案的混亂,我把這個名單檔案就放置在/etc/vsftpd/下。
編輯虛擬使用者名稱單檔案:
[[email protected]]#vi /etc/vsftpd/virtusers
----------------------------
ftp001
123456
ftp002
123456
ftp003
123456
----------------------------
編輯這個虛擬使用者名稱單檔案,在其中加入使用者的使用者名稱和口令資訊。格式很簡單:“一行使用者名稱,一行口令”。3.生成虛擬使用者資料檔案:
[[email protected]]#db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
4.察看生成的虛擬使用者資料檔案
[[email protected]]#ll /etc/vsftpd/virtusers.db
-rw-r--r-- 1 rootroot 12288 Sep 16 03:51 /etc/vsftpd/virtusers.db
需要特別注意的是,以後再要新增虛擬使用者的時候,只需要按照“一行使用者名稱,一行口令”的格式將新使用者名稱和口令新增進虛擬使用者名稱單檔案。但是光這樣做還不夠,不會生效的哦!還要再執行一遍“ db_load -T -thash -f 虛擬使用者名稱單檔案虛擬使用者資料庫檔案.db ”的命令使其生效才可以!
設定PAM驗證檔案,並指定虛擬使用者資料庫檔案進行讀取
1.察看原來的Vsftp的PAM驗證配置檔案:
[[email protected]]#cat /etc/pam.d/vsftpd
----------------------------------------------------------------
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=denyfile=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
----------------------------------------------------------------
2.在編輯前做好備份:
[[email protected]]#cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup
3.編輯Vsftpd的PAM驗證配置檔案
[[email protected]]#vi /etc/pam.d/vsftpd
----------------------------------------------------------------
#%PAM-1.0
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
accountrequired /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
以上兩條是手動新增的,上面的全部加#註釋了.內容是對虛擬使用者的安全和帳戶許可權進行驗證。
!!!!!!!這裡有個要注意說明的:如果系統是64位系統在這裡的所有lib後面要加入64!!!!!!
!!!!!!!如下這樣才可以:
#%PAM-1.0
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
accountrequired /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
15.4. 虛擬使用者的配置
1.規劃好虛擬使用者的主路徑:
[[email protected]]#mkdir /opt/vsftp/
2.建立測試使用者的FTP使用者目錄:
[[email protected]]#mkdir /opt/vsftp/ftp001 /opt/vsftp/ftp002 /opt/vsftp/ftp003
3.建立虛擬使用者配置檔案模版:
[[email protected]]#cp /etc/vsftpd/vsftpd.conf.backup /etc/vsftpd/vconf/vconf.tMP4.定製虛擬使用者模版配置檔案:
[[email protected]]#vi /etc/vsftpd/vconf/vconf.tmp
--------------------------------
local_root=/opt/vsftp/virtuser
virtuser 這個就是以後要指定虛擬的具體主路徑。
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 (根據使用者要求.可選)
設定單個客戶端的最大執行緒數,這個配置主要來照顧Flashget、迅雷等多執行緒下載軟體。
local_max_rate=50000 (根據使用者要求.可選)
設定該使用者的最大傳輸速率,單位b/s。
pam_service_name=vsftpd
chroot_local_user=YES
--------------------------------
這裡將原vsftpd.conf配置檔案經過簡化後儲存作為虛擬使用者配置檔案的模版。這裡將並不需要指定太多的配置內容,主要的
框架和限制交由Vsftpd的主配置檔案vsftpd.conf來定義,即虛擬使用者配置檔案當中沒有提到的配置專案將參考主配置檔案中
的設定。而在這裡作為虛擬使用者的配置檔案模版只需要留一些和使用者流量控制,訪問方式控制的配置專案就可以了。這裡的關
鍵項是local_root這個配置,用來指定這個虛擬使用者的FTP主路徑。5.更改虛擬使用者的主目錄的屬主為虛擬宿主使用者:
[[email protected]]#chown -R virtusers.virtusers /opt/vsftp/
6.檢查許可權:
[[email protected]]#ll /opt/vsftp/
total 24
drwxr-xr-x 2overlord overlord 4096 Sep 16 05:14 ftp001
drwxr-xr-x 2overlord overlord 4096 Sep 16 05:00 ftp002
drwxr-xr-x 2overlord overlord 4096 Sep 16 05:00 ftp003
.給測試使用者定製:
1.從虛擬使用者模版配置檔案複製:
[[email protected]]#cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/ftp001
2.針對具體使用者進行定製:
[[email protected]]# vi/etc/vsftpd/vconf/ftp001
---------------------------------
local_root=/opt/vsftp/ftp001 (FTP使用者ftp001的登陸目錄檔案)
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=300
data_connection_timeout=90
max_clients=1
max_per_ip=1
local_max_rate=25000
pam_service_name=vsftpd
chroot_local_user=YES
15.5. CentOS 修改 vsftpd 預設埠21
vsftpd啟動後,預設的ftp埠是21,現在我想把ftp埠改成 801 ,修改後能保證
使用者上傳下載不受影響
1.編輯 /etc/vsftpd/vsftpd.conf檔案,在該配置檔案中新增此行:listen_port=801
2.編輯 /etc/services檔案,將其中的 ftp 21/tcp改為
ftp 801/tcp
ftp 21/udp
改為 ftp801/udp
3.執行 /etc/init.d/vsftpd restart重新啟動 vsftpd服務。啟動完成後可以使用 netstat -ntpl | grep vsftpd命令可以檢視到系統現監聽的 vsftpd的埠為 801
4.使用 lftp 192.168.0.1:801(192.168.0.1是 vsftpd 伺服器的地址 ),這樣既可以訪問到 ftp伺服器了。
---------------------------------
15.6. vsftp 設定修改使用者預設目錄的方法
修改vsftp預設使用者訪問目錄在配置檔案目錄 /etc/vsftpd/下的 vsftpd.conf檔案中。
找到並開啟/etc/vsftpd/vsftpd.conf, 設定新增以下程式碼:
1. local_root=/home/xxf/www.lao8.org
那麼ftp使用者訪問的預設目錄就是(www.lao8.org)這個目錄了。
ftp使用者訪問的預設目錄設定好了, 還可以單獨設定這個目錄的訪問許可權如(777,755等許可權), 方法請參考文章: vsftp 設定ftp使用者訪問目錄許可權的命令
注意設定好了需要重啟vsftp伺服器:
1. service vsftpd restart
15.7. 啟動服務
1. 開啟vsftpd服務
[[email protected]]#service vsftpd start
Starting vsftpd forvsftpd: [ OK ]
2.預設開啟vsftp服務
1 |
|
3.重啟vsftp服務
|
4.centos 解除安裝vsftpd方法
如果伺服器上安裝了vsftpd,配置出錯需要解除安裝vsftpd
1 |
|
vsftpd-2.0.5-16.el5_5.1 #此處是查詢vsftpd的返回結果
1 |
|
#用rpm -e查詢結果進行刪除就ok了。
warning: /etc/vsftpd/user_listsaved as /etc/vsftpd/user_list.rpmsave
warning: /etc/vsftpd/ftpuserssaved as /etc/vsftpd/ftpusers.rpmsave #刪除時將備份vsftp的使用者列表檔案。
看下是否解除安裝了vsftpd,進行stop及start操作:
1 |
|
vsftpd: unrecognized service #找不到vsftpd
1 |
|
vsftpd: unrecognized service #找不到vsftpd記住,在解除安裝vsftpd之前,先停止vsftpd。
15.8. 測試
1.在虛擬使用者目錄中預先放入檔案:
[[email protected]]#touch /opt/vsftp/ftp001/test.txt
2.從其他機器作為客戶端登陸FTP:
可以IE或FTP客戶端軟直接訪問
ie裡輸入 ftp://127.0.0.1 (伺服器IP)
彈出對話方塊後.輸入FTP使用者名稱和密碼
---------------------------------------------
注意:
在/etc/vsftpd/vsftpd.conf中,local_enable的選項必須開啟為Yes,使得虛擬使用者的訪問成為可能,否則會出現以下現象:
----------------------------------
[[email protected]]#ftp
ftp> open192.168.1.22
Connected to192.168.1.22.
500 OOPS: vsftpd:both local and anonymous access disabled!
----------------------------------
原因:虛擬使用者再豐富,其實也是基於它們的宿主使用者virtusers的,如果virtusers這個虛擬使用者的宿主被限制住了,那麼虛擬使用者也將受到限制。
補充:
1.要檢視伺服器自帶的防火牆有無擋住FTP 21埠導致不能訪問
2.檢視 SELinux禁用沒有.要禁用
3.500 OOPS:錯誤有可能是你的vsftpd.con配置檔案中有不能被識別的命令,還有一種可能是命令的YES或 NO 後面有空格。
4.要仔細檢視各個用到的資料夾許可權,及使用者屬主許可權等
1 如何新加FTP使用者
開啟密碼檔案里加入(一行是使用者.一是密碼.依次類推)
#vi/etc/vsftpd/virtusers
加入使用者後儲存退出
#db_load -T -t hash-f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db (然後生成新的虛擬用資料檔案)
#cp/etc/vsftpd/vconf/vconf.tmpd (新建d使用者,用虛擬使用者模板vconf.tmp檔案生成d虛擬使用者檔案)
#vi/etc/vsftpd/vconf/d (開啟D虛擬使用者檔案.在第一行最後加入該使用者對應的FTP目錄)
#mkdir/opt/vsftp/WWW (新建WWW目錄為d FTP使用者登陸目錄)
#service vsftpd restart
-------------------------------------------------------
2 如何修改FTP使用者登陸密碼
開啟密碼檔案里加入(第一行是使用者.第二是密碼.依次類推,只要改對應使用者下面的密碼即可)
#vi/etc/vsftpd/virtusers
#db_load -T -t hash-f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db (然後生成新的虛擬用資料檔案)
#service vsftpd restart