Linux下搭建ftp服務一般都用vsftpd(very secure ftp daemon),因為ftp協議是採用明碼傳輸的,沒有安全性可言,vsftpd則是一個提供較安全的ftp服務軟體,下面簡單介紹一下vsftpd的搭建,測試環境為centos 6.3。
1、檢查是否已安裝軟體
[root@localhost ~]# rpm -qa | grep vsftpd[root@localhost ~]#
什麼都不顯示則表示系統還沒有安裝該軟體,否則會顯示安裝軟體的版本資訊。
2、安裝vsftpd沒有rpm安裝包的話可以到系統安裝盤中的package檔案夾下去找,也可以通過yum安裝,下面用rpm安裝方式。
[root@localhost tmp]# rpm -ivh vsftpd-2.2.2-11.el6.i686.rpm Preparing... ########################################### [100%] 1:vsftpd ########################################### [100%][root@localhost tmp]#
vsftpd安裝成功。
3、查看防護牆
[root@localhost tmp]# chkconfig iptables --listiptables 0:off1:off2:on3:on4:on5:on6:off[root@localhost tmp]#
從上面輸出可以看到防火牆開著,如果想關閉防火牆可以執行下面的命令:
[root@localhost tmp]# chkconfig iptables off[root@localhost tmp]# chkconfig iptables --listiptables 0:off1:off2:off3:off4:off5:off6:off[root@localhost tmp]#
可以看到防火牆都關了,想重啟防火牆則可以執行下面的命令。
[root@localhost tmp]# chkconfig iptables on[root@localhost tmp]# chkconfig iptables --listiptables 0:off1:off2:on3:on4:on5:on6:off
如果不想關閉防火牆的話,那麼就需要添加連接埠號碼,執行下面命令:
[root@localhost tmp]# /sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT[root@localhost tmp]# /etc/init.d/iptables statusTable: filterChain INPUT (policy ACCEPT)num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT)num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT)num target prot opt source destination [root@localhost tmp]#
從上面的status中可以看到21連接埠已經開啟,21連接埠是ftp的預設連接埠號碼,儲存對防火牆的設定執行下面的命令:
[root@localhost tmp]# /etc/init.d/iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ][root@localhost tmp]#
如果僅僅是在防火牆中添加連接埠是不行的,因為服務端的資料通道到了防火牆之後就找不到原始的用戶端了,所以還是串連不上的。要解決這個問題就需要在防火牆中添加ip_nat_ftp和ip_conntrack_ftp兩個模組,如下所示:
[root@localhost ~]# vi /etc/sysconfig/iptables-config # Load additional iptables modules (nat helpers)# Default: -none-# Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which# are loaded after the firewall rules are applied. Options for the helpers are# stored in /etc/modprobe.conf.#IPTABLES_MODULES=""IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
進入iptables-config設定檔中修改IPTABLES_MODULES參數,兩個模組名稱以空格隔開,儲存退出後重啟服務就可以了。
4、查看selinux
[root@localhost tmp]# sestatusSELinux status: enabled <==是否啟動 SELinuxSELinuxfs mount: /selinuxCurrent mode: enforcing <==目前的模式Mode from config file: enforcingPolicy version: 24Policy from config file: targeted[root@localhost tmp]#
4.1、關閉selinux
[root@localhost ~]# vi /etc/sysconfig/selinux# This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:# enforcing - SELinux security policy is enforced.# permissive - SELinux prints warnings instead of enforcing.# disabled - No SELinux policy is loaded.#SELINUX=enforcingSELINUX=disabled# SELINUXTYPE= can take one of these two values:# targeted - Targeted processes are protected,# mls - Multi Level Security protection.SELINUXTYPE=targeted
預設模式為enforcing的將其改為disabled就可以了。(如果不關閉selinux的話,本人在配置過程中發現用戶端串連不上)
以上面方式修改selinux後不要忘記重啟。
4.2、開啟selinux
如果不想關閉selinux的話,可以在selinux中修改ftp的參數設定:
[root@localhost ~]# getsebool -a | grep ftpallow_ftpd_anon_write --> offallow_ftpd_full_access --> offallow_ftpd_use_cifs --> offallow_ftpd_use_nfs --> offftp_home_dir --> offftpd_connect_db --> offftpd_use_passive_mode --> offhttpd_enable_ftp_server --> offtftp_anon_write --> off[root@localhost ~]#
以上是selinux中預設的ftp參數設定,如果想串連ftp需修改allow_ftpd_full_access和ftp_home_dir兩個參數值。
[root@localhost ~]# setsebool -P allow_ftpd_full_access=1[root@localhost ~]# setsebool -P ftp_home_dir=1[root@localhost ~]# service vsftpd restart
執行以上命令後就可以在selinux處於enforcing模式下串連ftp了。
5、vsftpd設定檔
vsftpd安裝好之後設定檔都放在/etc/vsftpd/目錄下面
[root@localhost ~]# cd /etc/vsftpd/[root@localhost vsftpd]# ll -atotal 36drwxr-xr-x. 2 root root 4096 Oct 29 16:03 .drwxr-xr-x. 117 root root 12288 Oct 29 16:03 ..-rw-------. 1 root root 125 Jun 22 15:54 ftpusers-rw-------. 1 root root 361 Jun 22 15:54 user_list-rw-------. 1 root root 4599 Jun 22 15:54 vsftpd.conf <<==主設定檔-rwxr--r--. 1 root root 338 Jun 22 15:54 vsftpd_conf_migrate.sh[root@localhost vsftpd]#
5.1、ftpusers檔案
用於限制實體賬戶無法登入ftp
[root@localhost vsftpd]# cat ftpusers # Users that are not allowed to login via ftprootbindaemonadmlpsyncshutdownhaltmailnewsuucpoperatorgamesnobody[root@localhost vsftpd]#
如上所示代表我系統中的這些使用者無法登入ftp,如果不想讓某個實體使用者不能登入ftp,只需將使用者名稱寫入這個檔案就可以了。
5.3、user_list檔案
該檔案的作用跟ftpusers檔案的作用是一樣的,都是限定使用者登入ftp的,區別在於user_list中的配置是否起作用還要跟vsftpd.conf檔案中的userlist_enable和userlist_deny兩個參數有關係。
5.4、chroot_list檔案
該檔案預設是沒有建立的,主要用於將某些帳號的目錄限制在家目錄下,這樣就提高了安全性,這個檔案要起作用的話還依賴於vsftpd.conf檔案中的chroot_enable和chroot_list_file兩個參數。
5.5、vsftpd.conf主設定檔
[root@localhost vsftpd]# cat vsftpd.conf | grep -v '^#'anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES [root@localhost vsftpd]#
以上參數配置都是安裝好之後的預設參數值,下面簡單介紹一下一些常用的參數。
connect_from_port_20=YES <<==主動串連時,服務端資料轉送的連接埠號碼
listen_port=21 <<==ftp命令通道的連接埠號碼(預設就是21),連接埠適用於standalone啟動模式
dirmessage_enable=YES <<==當使用者進入某個目錄後,顯示需要注意的內容,跟message_file參數有關
message_file=./message <<==當dirmessage_enable=YES顯示指定檔案中的資訊
listen=YES <<==表示vsftpd是以stand alone方式啟動的
pasv_enable=YES <<==支援被動式聯機模式
use_localtime=YES <<==使用本地時間
write_enable=YES <<==允許使用者上傳資料
connect_timeout=60 <<==主動模式下,60秒內得不到用戶端響應則強制斷線
accept_timeout=60 <<==被動模式下,60秒內得不到用戶端響應則強制斷線
data_connection_timeout=180 <<==如果客戶在180秒內無法完成資料的傳輸,則強制斷線
idle_session_timeout=180 <<==180秒內無任何操作則強制斷線
max_clients=10 <<=限制同一時間最多可以有10個用戶端串連到vsftpd(適用於stand alone啟動)
max_per_id=1 <<==表示每個ip來源只能建立一個串連
ftpd_banner=welcome <<==登入vaftpd後的提示資訊
banner_file = /file <<==表明用某個檔案中的內容作為提示資訊
guest_enable=YES <<==任何實體賬戶登入後都被認為是guest
guest_username=ftp <<==當guest_enable有效時,guest所擁有的許可權跟ftp使用者的許可權一樣
local_enable=YES <<== 表示系統使用者能以實體使用者的方式登入ftp
local_max_rate=0 <<==實體使用者的傳輸速度,單位bytes/second,0為不限制
local_umask=022 <<==實體使用者上傳檔案的許可權
chroot_local_user=YES <<==限制實體使用者是否在自己的家目錄下
chroot_list_enable=YES <<==表示只有chroot_list_file參數指定的檔案下的使用者才會chroot
chroot_list_file=/etc/vsftpd/chroot_list <<==指定只有在chroot_list檔案中的使用者才用chroot,如果登入的使用者名稱不在chroot_list中,則使用者無法登入
userlist_enable=YES <<==控制user_list檔案是否有效,但還要看user_deny參數
userlist_deny=YES <<==配合userlist_enable參數來限制某些帳號的登入
userlist_file=/etc/vsftpd/user_list <<==指定userlist檔案所在
anonymous_enable=YES <<==是否允許匿名登入
xferlog_enable=YES <<==使用者上傳下載都會被記錄下來
xferlog_std_format=YES <<==支援wuftp登入格式
tcp_wrappers=YES <<==是否支援tcp wrappers
pam_service_name=vsftpd <<==pam模組的名稱,表示支援pam模組的管理
6、啟動vsftpd服務
vaftpd可以用stand alone和super daemon兩種模式啟動,一般情況下我們都用stand alone啟動。
[root@localhost ~]# chkconfig iptables on[root@localhost ~]# service iptables start [root@localhost ~]# chkconfig iptables --listiptables 0:off1:off2:on3:on4:on5:on6:off[root@localhost ~]# ftp localhost Trying ::1...ftp: connect to address ::1Connection refusedTrying 127.0.0.1...Connected to localhost (127.0.0.1).220 (vsFTPd 2.2.2)Name (localhost:root): yao331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> bye221 Goodbye.[root@localhost ~]#
如果執行ftp localhost時報命令找不到,則需要安裝ftp軟體包。
執行到這裡就表示ftp服務已經搭建好了。