一、ftp介紹
常見的文件共享服務有:ftp、nfs和samba。其中ftp是一種應用層的服務,nfs是基於內核來實現的網絡文件共享服務,samba是在Linux上實現CIFS(SMB)協議來解決跨平臺的文件共享服務。
ftp是相當古老的傳輸協議之一,他最主要的功能是在服務器與客戶端之間進行文件的傳輸。這個古老的協議使用的是明碼傳輸方式,因此在使用當中會有相當多的安全問題。爲了更安全的使用ftp協議,主要介紹較爲安全但功能很少的vsftpd這個軟件。
ftp的傳輸使用的是tcp協議,是一種C/S模式架構,服務端通過ftp服務向用戶提供ftp服務,客戶端通過客戶端命令連接服務端來進行指令的執行與數據的傳輸。ftp連接前會先進行三次連接握手以建立TCP會話連接。
二、ftp功能
1、數據的傳輸。ftp的數據傳輸連接還有主動和被動方式。主動方式是指數據傳輸連接服務端主動創建,服務端主動去連接客戶端的某個隨機端口;被動方式是指數據傳輸連接由客戶端的某個隨機端口去連接服務端的某個隨機端口。
2、實現不同等級的用戶身份驗證,這樣就可以根據不同的用戶身份來分配不同的數據操作權限。ftp默認情況下有三種不同的身份,分別是:實體的賬號(real user)、訪客(guest)、匿名用戶(anonymous)。
3、限制用戶的活動目錄。主要是爲了避免用戶在Linux系統中隨意活動,所做的限制是只允許在自己的家目錄裏面活動,防止其他用戶隨意改動家目錄的內容,對系統也起到一定的保護作用。
三、安裝vsftpd
vsftpd全名叫very secure ftp daemon,意思是非常安全的ftp服務。vsftpd所對應的rpm程序包叫做vsftpd,這裏通過yum的方式來進行安裝。
安裝完成之後啓動vsftpd服務,
centos 6 啓動vsftpd
centos 7 啓動vsftpd
這樣FTP服務器便搭建完成。但此時還不能訪問FTP服務器,因爲服務器默認情況下關閉了防火牆,此時我們還需使用‘iptables -F’命令關閉防火牆,這樣客戶端纔可以訪問FTP服務器。
四、vsftpd配置文件及目錄
1、用戶認證配置文件:/etc/pam.d/vsftpd
2、配置文件目錄:/etc/vsftpd
3、主配置文件:vsftpd.conf
4、匿名用戶(映射爲ftp用戶)共享資源位置:/var/ftp
5、系統用戶通過ftp訪問的資源的位置:用戶自己的家目錄
6、虛擬用戶通過ftp訪問的資源的位置:給虛擬用戶指定的映射成爲的系統用戶的家目錄
vsftpd的配置文件常用的修改內容:
1、匿名用戶的設置:
anonymous_enable=YES (Default: NO) 是否開啓匿名用戶 anon_upload_enable=YES (Default: NO) 是否允許匿名用戶上傳,如啓動,還需讓ftp用戶對/var/ftp/pub及其他需要上傳的目錄設置wx權限 anon_mkdir_write_enable=YES (Default: NO) 是否允許匿名用戶創建目錄,如啓動,還需讓ftp用戶對/var/ftp/pub及其他需要上傳的目錄設置wx權限 anon_other_write_enable=YES (Default: NO) 匿名用戶除了具有寫權限外是否可以刪除及重命名或更改服務器上的其他文件 no_anon_password=YES (Default: NO) 使用ftp客戶端登錄匿名時,是否密碼,如爲NO,即默認,則需要輸入任意密碼,如爲YES,直接登錄,不用輸入。 anon_umask (Default: 077) 匿名用戶上傳時的默認掩碼權限。
2、系統用戶的設置:
local_enable=NO (Default: YES) 是否開啓Linux本地用戶登錄 write_enable=NO (Default: NO) 是否允許Linux本地用戶上傳文件 local_umask=022 (Default: 077) 本地用戶上傳文件的默認權限
3、訪客的設置:
guest_enable (Default: NO) 所有的非匿名用戶都映射爲了guest用戶 guest_username (Default: ftp) guest用戶是誰,默認ftp
4、禁錮所有的ftp本地用戶於其家目錄中:
chroot_local_user=YES 將linux系統用戶的根目錄設置爲家目錄,注意在Centos7中該目錄對用戶不能有w權限, 當爲YES時,所有人都不能越獄,當爲NO時,所有人都能越獄。
5、禁錮文件中指定的ftp本地用戶於其家目錄中:
chroot_list_enable=YES 越獄例外,下一行一定要有。當上一行爲YES是,爲白名單,當爲NO時,爲黑名單 chroot_list_file=/etc/vsftpd/chroot_list
6、日誌:
vsftpd_log_file (Default: /var/log/vsftpd.log) vsftpd格式日誌的存放路徑 xferlog_enable=YES (Default: no) 是否開啓上傳、下載日誌 xferlog_std_format (Default: no) 是否使用wuftp格式 xferlog_file (Default: /var/log/xferlog) xferlog的存放路徑,將登陸及文件上傳下載等信息記錄到系統日誌當中 dual_log_enable=YES (Default: NO) ,vsftpd_log_file=/var/log/vsftpd.log 是否同時開啓vsftpd格式的日誌,該格式記錄信息更多,不只upload/downloads
7、改變上傳文件的屬主:
chown_uploads=YES (Default: NO) 匿名用戶上傳文件的所屬人是否要更改。如YES,則更改爲chown_username所指定的 chown_username (Default: root)
8、vsftpd 使用 pam 完成用戶認證,其用到的 pam 配置文件:
pam_service_name=vsftpd
9、是否啓用控制用戶登錄的列表文件
userlist_enable=YES (Default: NO) 是否啓用用戶過濾功能。如YES,則開啓,過濾文件由userlist_file決定 userlist_file (Default: /etc/vsftpd/user_list) 過濾文件路徑 userlist_deny (Default: YES) 當該值爲YES時userlist爲黑名單,反之爲白名單,/etc/vsftpd/ftpuser 固定是黑名單,寫入其中的用戶一定不能登錄ftp
10、連接限制:
max_clients (Default: 2000) 允許同時登錄的最大客戶端請求數 max_per_ip 每個ip可同時發起的併發請求數
11、傳輸速率:
anon_max_rate (Default: 0) 匿名用戶上傳和下載的最大速度,單位字節。 local_max_rate (Default: 0) Linux本地用戶上傳和下載的最大速度,單位字節。
12、主動模式的設置:
ftp_data_port (Default: 20) 主動模式使用的端口 connect_from_port_20 (Default: YES) 是否允許主動傳輸,主動模式的端口號 connect_timeout (Default: 60) 在主動連接方式下,數據連接超時時長,在60秒內得不到客戶端響應時強行斷開
13、被動模式的設置:
pasv_enable=YES (Default: YES) 是否支持數據的被動模式傳輸,這裏一定要設置爲YES pasv_min_port=9527 (Default: 0) 被動模式,服務端開啓的隨機端口的最小值 pasv_max_port=9529 (Default: 0) 被動模式,服務端開啓的隨機端口的最大值 accept_timeout (Default: 60) 在被動模式下,數據連接超時時長,在60秒內得不到客戶端響應時強行斷開
12、其他相關參數:
data_connection_timeout (Default: 300) 數據連接無數據傳輸時的超時時長,300秒後無數據傳輸時斷開連接 listen_port (Default: 21) FTP命令通道的監聽端口 listen=YES (Default: ) 表示vsftpd使用的命令通道監聽端口,即以standalone(單機模式)啓動 banner_file Default: (none) 登錄時的歡迎信息。不是所有客戶端都可見,當該行存在時,則優先於ftpd_banner dirmessage_enable (Default: NO) 每進入一個目錄時,如果該目錄下有.message文件,則將其內容展現出來,不是所有客戶端都可見 max_clients (Default: 2000) 允許同時登錄的客戶端請求數 nopriv_user (Default: nobody) 客戶端建立命令通道時,服務端與之連接的進程的所屬用戶 idle_session_timeout (Default: 300) 無命令操作超時時長 ascii_upload_enable=NO ascii_download_enable=NO
五、ftp用例
1、在centos6中以非獨立方式運行vsftpd
安裝vsftpd和xinetd服務
yum -y install vsftpd xinetd
2.修改配置文件/etc/vsftpd/vsftpd.conf
vim /etc/vsftpd/vsftpd.conf listen=NO
3.修改配置文件/etc/xinetd.d/vsftpd
vim /etc/xinetd.d/vsftpd service ftp { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/vsftpd log_on_failure += USERID disable = no }
4.重啓xinetd服務,並修改/etc/xinetd.d/下某個服務的配置文件,將disable=yes改爲no並重啓/etc/init.d/xinetd服務使之生效。
service xinetd restart chkconfig xinetd on
2、實現基於SSL的FTPS
1.查看是否支持SSL
2.進入/etc/pki/tls/certs路徑下,生成以vsftpd.pem命名的自簽名證書,並複製證書到/etc/vsftpd目錄下
cd /etc/pki/tls/certs/ make vsftpd.pem cp vsftpd.pem /etc/vsftpd/
3.編輯配置文件
vim /etc/vsftpd/vsftpd.conf ssl_enable=YES 啓用SSL allow_anon_ssl=NO 匿名不支持SSL force_local_logins_ssl=YES 本地用戶登錄加密 force_local_data_ssl=YES 本地用戶數據傳輸加密 rsa_cert_file=/etc/vsftpd/vsftpd.pem
4.重啓服務,用客戶端測試
3、實現基於文件驗證的vsftpd虛擬用戶
虛擬用戶:
所有虛擬用戶會統一映射爲一個指定的系統賬號:訪問共享位置,即爲此係統賬號的家目錄
各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定
創建虛擬用戶的賬號密碼數據庫文件
vim ftpvusers meiwenjun redhat chenfangyuan redhat chaoyuanning redhat
db_load -T -t hash -f ftpvusers /etc/vsftpd/ftpvusers.db
cd /etc/vsftpd/ chmod 600 ftpvusers.db
2.創建映射用戶
useradd -d /var/ftpsite -s /sbin/nologin ftpvuser
chmod u-w /var/ftpsite/
3.編輯主配置文件
vim /etc/vsftpd/vsftpd.conf guest_enable=YES guest_username=ftpvuser pam_service_name=vsftpd.vuser
4.編輯pam文件
vim /etc/pam.d/vsftpd.vuser auth required pam_userdb.so db=/etc/vsftpd/ftpvusers account required pam_userdb.so db=/etc/vsftpd/ftpvusers
5.配置子配置文件
vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/configdir
mkdir /etc/vsftpd/configdir 創建配置文件存放的路徑 vim chenfangyuan 創建各用戶自己的配置文件 anon_root=/var/ftpsite 修改登錄目錄爲指定的目錄 anon_max_rate=102800 文件下載的最大速度
6.重啓服務,使生效,並測試
systemctl restart vsftp