1.在Centos5.5下搭建ftp服務器
(1)安裝vsftpd
[root@localhost home]#yum install vsftpd
(2)完成安裝後執行
[root@xxzx /]# vi /etc/vsftpd/user_list
將root註釋掉:#root
[root@xxzx /]# vi /etc/vsftpd/ftpusers
將root註釋掉:#root
(3)設置ftp登錄後所在的目錄
[root@xxzx /]# setsebool -P ftpd_disable_trans=1 [root@xxzx vsftpd]# vi /etc/vsftpd/vsftpd.conf
在最後一行添加:local_root=/tmp
(4)重啓服務
[root@xxzx vsftpd]# service vsftpd restart Shutting down vsftpd: [FAILED] Starting vsftpd for vsftpd: [ OK ]
vsftpd.conf配置說明
vsftpd.ftpusers:位於/etc目錄下。它指定了哪些用戶賬戶不能訪問FTP服務器,例如root等。
vsftpd.user_list:位於/etc目錄下。該文件裏的用戶賬戶在默認情況下也不能訪問FTP服務器,僅當vsftpd.conf配置文件裏啓用userlist_enable=NO選項時才允許訪問。
vsftpd.conf:位於/etc/vsftpd目錄下。來自定義用戶登錄控制、用戶權限控制、超時設置、服務器功能選項、服務器性能選項、服務器響應消息等FTP服務器的配置。
高級設置
1. 用戶登錄控制
anonymous_enable=YES,允許匿名用戶登錄。
no_anon_password=YES,匿名用戶登錄時不需要輸入密碼。
local_enable=YES,允許本地用戶登錄。
deny_email_enable=YES,可以創建一個文件保存某些匿名電子郵件的黑名單,以防止這些人使用Dos***。
banned_email_file=/etc/vsftpd.banned_emails,當啓用deny_email_enable功能時,所需的電子郵件黑名單保存路徑(默認爲/etc/vsftpd.banned_emails)。
2. 用戶權限控制
write_enable=YES,開啓全局上傳權限。
local_umask=022,本地用戶的上傳文件的umask設爲022(系統默認是077,一般都可以改爲022)。
anon_upload_enable=YES,允許匿名用戶具有上傳權限,很明顯,必須啓用write_enable=YES,纔可以使用此項。同時我們還必須建立一個允許ftp用戶可以讀寫的目錄(前面說過,ftp是匿名用戶的映射用戶賬號)。
anon_mkdir_write_enable=YES,允許匿名用戶有創建目錄的權利。
chown_uploads=YES,啓用此項,匿名上傳文件的屬主用戶將改爲別的用戶賬戶,注意,這裏建議不要指定root賬號爲匿名上傳文件的屬主用戶!
chown_username=whoever,當啓用chown_uploads=YES時,所指定的屬主用戶賬號,此處的whoever自然要用合適的用戶賬號來代替。
chroot_list_enable=YES,可以用一個列表限定哪些本地用戶只能在自己目錄下活動,如果chroot_local_user=YES,那麼這個列表裏指定的用戶是不受限制的。
chroot_list_file=/etc/vsftpd.chroot_list,如果chroot_local_user=YES,則指定該列表(chroot_local_user)的保存路徑(默認是/etc/vsftpd.chroot_list)。
nopriv_user=ftpsecure,指定一個安全用戶賬號,讓FTP服務器用作完全隔離和沒有特權的獨立用戶。這是vsftpd系統推薦選項。
async_abor_enable=YES,強烈建議不要啓用該選項,否則將可能導致出錯!
ascii_upload_enable=YES;ascii_download_enable=YES,默認情況下服務器會假裝接受ASCⅡ模式請求但實際上是忽略這樣的請求,啓用上述的兩個選項可以讓服務器真正實現ASCⅡ模式的傳輸。(注意:啓用ascii_download_enable選項會讓惡意遠程用戶們在ASCⅡ模式下用“SIZE/big/file”這樣的指令大量消耗FTP服務器的I/O資源。)
這些ASCⅡ模式的設置選項分成上傳和下載兩個,這樣我們就可以允許ASCⅡ模式的上傳(可以防止上傳腳本等惡意文件而導致崩潰),而不會遭受拒絕服務***的危險。
3.用戶連接和超時選項
idle_session_timeout=600,可以設定默認的空閒超時時間,用戶超過這段時間不動作將被服務器踢出。
data_connection_timeout=120,設定默認的數據連接超時時間。
4.服務器日誌和歡迎信息
dirmessage_enable=YES,允許爲目錄配置顯示信息,顯示每個目錄下面的message_file文件的內容。
ftpd_banner=Welcome to blah FTP service,可以自定義FTP用戶登錄到服務器所看到的歡迎信息。
xferlog_enable=YES,啓用記錄上傳/下載活動日誌功能。 xferlog_file=/var/log/vsftpd.log,可以自定義日誌文件的保存路徑和文件名,默認是/var/log/vsftpd.log。
anonymous_enable=YES 允許匿名登錄
local_enable=YES 允許本地用戶登錄
write_enable=YES 開放本地用戶寫權限
local_umask=022 設置本地用戶生成文件的掩碼爲022
#anon_upload_enable=YES 此項設置允許匿名用戶上傳文件 #anon_mkdir_write_enable=YES 開啓匿名用戶的寫和創建目錄的權限 dirmessage_enable=YES 當切換到目錄時,顯示該目錄下的.message隱藏文件的內容 xferlog_enable=YES 激活上傳和下載日誌
connect_from_port_20=YES 啓用FTP數據端口的連接請求
#chown_uploads=YES 是否具有上傳權限. 用戶由chown_username參數指定。 #chown_username=whoever 指定擁有上傳文件權限的用戶。此參數與chown_uploads聯用。 #xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES 使用標準的ftpd xferlog日誌格式 #idle_session_timeout=600 此設置將在用戶會話空閒10分鐘後被中斷 #data_connection_timeout=120 將在數據連接空閒2分鐘後被中斷 #ascii_upload_enable=YES 啓用上傳的ASCII傳輸方式
#ascii_download_enable=YES 啓用下載的ASCII傳輸方式 #ftpd_banner=Welcome to blah FTP service 設置用戶連接服務器後顯示消息
#deny_email_enable=NO 此參數默認值爲NO。當值爲YES時,拒絕使用banned_email_file參數指定文件中所列出的e-mail地址用戶登錄。
#chroot_list_enable=YES 設置本地用戶登錄後不能切換到自家目錄以外的別的目錄
#chroot_list_file=/etc/vsftpd.chroot_list
#ls_recurse_enable=YES
pam_service_name=vsftpd 設置PAM認證服務的配置文件名稱,該文件存放在/etc/pam.d/
userlist_enable=YES 此項配置/etc/vsftpd.user_list中指定的用戶也不能訪問服務器,若添加userlist_deny=No,則僅僅/etc/vsftpd.user_list文件中的用戶可以訪問,其他用戶都不可以訪問服務器。如過userlist_enable=NO,userlist_deny=YES,則指定使文件/etc/vsftpd.user_list中指定的用戶不可以訪問服務器,其他本地用戶可以訪問服務器。
listen=YES 指明VSFTPD以獨立運行方式啓動
tcp_wrappers=YES 在VSFTPD中使用TCP_Wrappers遠程訪問控制機制,默認值爲YES
實例1:
基礎配置:見本文開頭,再進行以下配置
1. 創建一個用戶test
adduser -d /tmp/test -g ftp -s /sbin/nologin test#創建用戶test,用戶路徑爲/tmp/test,用戶組爲ftp,不能登錄 [root@xxzx tmp]# passwd test Changing password for user test. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully.
2. 限制用戶目錄,不得改變目錄到上級
[root@xxzx tmp]# vi /etc/vsftpd/vsftpd.conf#編輯配置文件 chroot_list_enable=YES#註釋去掉 chroot_list_file=/etc/vsftpd/chroot_list#註釋去掉 [root@xxzx tmp]# vi /etc/vsftpd/chroot_list test#填寫需要限制路徑的用戶名 [root@xxzx tmp]# service vsftpd restart#重啓服務 Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ]
3.限制匿名登錄
[root@xxzx tmp]# vi /etc/vsftpd/vsftpd.conf#編輯配置文件 anonymous_enable=NO#不允許匿名登錄 anon_upload_enable=NO#不允許匿名登錄上傳 anon_mkdir_write_enable=NO#不允許匿名登錄創建文件夾 service vsftpd restart#重啓vsftpd服務
4.最後爲了防止服務器由於斷電、重啓等現象發生,導致ftp進程在開機後未啓動,將其添加到開機啓動文件中:
[root@xxzx tmp]# vi /etc/rc.local#編輯開機啓動文件 service vsftpd start#在最後一行添加ftp服務啓動命令,保存
5.登錄測試
如果出現無法訪問,嘗試關閉防火牆測試:
臨時生效,重啓後復原
service iptables start#運行 service iptables stop#終止
永久性生效,重啓後不會復原
chkconfig iptables on#開啓 chkconfig iptables off#關閉
實例2:多用戶
創建4個普通用戶和1個管理員
創建普通用戶自己的文件夾和1個公共文件夾
普通用戶擁有自己文件夾的完全控制權.
普通用戶不能訪問其他用戶的文件夾
普通用戶只能在公共文件夾上傳和下載,不能刪除
管理員擁有所有文件夾的完全控制權
搭建完成後再添加一個普通用戶
[root@xxzx /]# groupadd dep1 [root@xxzx /]# groupadd dep2 [root@xxzx /]# groupadd dep3 [root@xxzx /]# groupadd dep4 [root@xxzx /]# groupadd public#創建用戶組 [root@xxzx /]# useradd -s /sbin/nologin -G dep1,public user1 [root@xxzx /]# useradd -s /sbin/nologin -G dep2,public user2 [root@xxzx /]# useradd -s /sbin/nologin -G dep3,public user3 [root@xxzx /]# useradd -s /sbin/nologin -G dep4,public user4 [root@xxzx /]# useradd -s /sbin/nologin -G dep4,public,dep1,dep2,dep3 admin#創建用戶並關聯組 [root@xxzx /]# mkdir -p /tmp/ftp/dep1 [root@xxzx /]# mkdir -p /tmp/ftp/dep2 [root@xxzx /]# mkdir -p /tmp/ftp/dep3 [root@xxzx /]# mkdir -p /tmp/ftp/dep4 [root@xxzx /]# mkdir -p /tmp/ftp/public#創建文件夾 [root@xxzx /]# chown user1:dep1 /tmp/ftp/dep1 [root@xxzx /]# chown user2:dep2 /tmp/ftp/dep2 [root@xxzx /]# chown user3:dep3 /tmp/ftp/dep3 [root@xxzx /]# chown user4:dep4 /tmp/ftp/dep4 [root@xxzx /]# chown admin:public /tmp/ftp/public#關聯用戶組和文件夾 [root@xxzx /]# chmod 770 /tmp/ftp/dep1 [root@xxzx /]# chmod 770 /tmp/ftp/dep2 [root@xxzx /]# chmod 770 /tmp/ftp/dep3 [root@xxzx /]# chmod 770 /tmp/ftp/dep4 #[root@xxzx /]# chmod 1777 /tmp/ftp/public#其他用戶可以上傳和下載,且可以刪除自己建立的文件,但不能刪除其他人建立的文件.管理員可以完全控制(該權限測試不成功) #[root@xxzx /]# chattr +a /tmp/ftp/public#設置public只能上傳和下載,不能刪除.但管理員也不能刪除(管理員不能控制,不成功) [root@xxzx /]# passwd user1 [root@xxzx /]# passwd user2 [root@xxzx /]# passwd user3 [root@xxzx /]# passwd user4 [root@xxzx /]# vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO xferlog_file=/var/log/xferlog local_umask=000#設置上傳文件的權限(即777-???),例007對應777 chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list local_root=/tmp/ftp#修改用戶登錄後顯示的目錄 user_config_dir=/etc/vsftpd/ftp_config_dir#設置用戶擁有獨立的配置路徑 [root@xxzx /]# cd /etc/vsftpd/ [root@xxzx vsftpd]# vi chroot_list#如果開啓之後缺少此文件會導致無法登錄 [root@xxzx ~]# mkdir /etc/vsftpd/ftp_config_dir [root@xxzx /]# vi /etc/vsftpd/ftp_config_dir/user1#設置用戶獨立權限 cmds_allowed=ABOR,ACCT,APPE,CWD,CDUP,DELE,HELP,LIST,MODE,MDTM,MKD,NOOP,NLST,PASS,PASV,PORT,PWD,QUIT,REIN,RETR,RMD,RNFR,RNTO,SITE,SIZE,STOR,STAT,STOU,STRU,SYST,TYPE,USER#用戶的權限 [root@xxzx /]# cd /etc/vsftpd/ftp_config_dir [root@xxzx ftp_config_dir]# cp user1 user2#將user1的權限拷貝給user2 [root@xxzx ftp_config_dir]# cp user1 user3 [root@xxzx ftp_config_dir]# cp user1 user4 [root@xxzx ~]# vi /etc/rc.local service vsftpd start [root@xxzx ~]# chkconfig iptables off [root@xxzx ~]# service iptables stop [root@xxzx ~]# service vsftpd restart#重啓服務
添加用戶:
[root@xxzx /]# groupadd dep5 [root@xxzx ~]# useradd -G public,dep5 -s /sbin/nologin user5 [root@xxzx ~]# mkdir -p /tmp/ftp/dep5 [root@xxzx ~]# chown user5:dep5 /tmp/ftp/dep5 [root@xxzx ~]# chmod 770 /tmp/ftp/dep5 [root@xxzx ~]# cd /etc/vsftpd/ [root@xxzx vsftpd]# cd ftp_config_dir/ [root@xxzx ftp_config_dir]# cp user1 user5 [root@localhost ~]# echo user5 >> /etc/vsftpd/chroot_list [root@xxzx ftp_config_dir]# passwd user5