FTP伺服器管理和配置
FTP服務的簡介
FTP是Internet上使用非常廣泛的一種通訊協議,用於在不同的主機之間進行檔案傳輸。Linux系統下常用的FTP伺服器軟體包括有wu-ftpd;vsftpd(Very Secure ftp Daemon);proftpd;pureftpd等
客戶端軟體有:
CLI:ftp;lftp;(wget,lftpget)下載工具,非互動式
GUI: gftpd;FlashFXP;Cuteftp;Filezilla
FTP採用C/S的工作模式,通過TCP協議建立客戶端和伺服器之間的連線。但與其他大多數的應用協議不同,FTP協議在客戶端和伺服器之間建立了兩套通訊鏈路,分別是控制鏈路和資料鏈路;
FTP客戶端與伺服器之間的通訊過程
1、使用者使用FTP協議的客戶機程式,連線到遠端的FTP伺服器程式上
2、使用者使用客戶端程式進行FTP檔案的上傳或下載,FTP客戶端程式通過控制鏈路向FTP傳送相應的控制命令
3、伺服器程式接收並執行使用者所發出的命令
4、FTP伺服器將執行結果返回到客戶端
FTP通過兩組套接字通訊:控制蓮姐套接字 21/TCP,資料連線套接字 20/TCP。但是傳輸資料又可以分為主動模式與被動模式,其資料傳輸埠有所不同。
主動模式工作的原理:FTP客戶端連線到FTP伺服器的21埠,傳送使用者名稱和密碼登入,登入成功後要list列表或者讀取資料時,客戶端隨機開放一個埠(1024以上),傳送PORT命令到FTP伺服器 ,告訴伺服器客戶端採用主動模式並開放埠;FTP伺服器收到PORT主動模式命令和埠號後,通過伺服器的20埠和客戶端開放的埠連線,傳送資料,原理如下圖:
被動模式工作原理:FTP客戶端連線到FTP伺服器的21埠,傳送使用者名稱和密碼登入,登入成功後要list列表或者讀取資料時,傳送PASV命令到FTP伺服器, 伺服器在本地隨機開放一個埠(1024以上 ),然後把開放的埠告訴客戶端,客戶端再連線到伺服器開放的埠進行資料傳輸,原理如下圖:
VSFTP伺服器的安裝和配置
vsftpd可以通過rpm包或者原始碼安裝,通過rpm安裝只需使用yum命令即可。
檔案的組成:
/etc/vsftpd:配置檔案目錄 /etc/rc.d/init.d/vsftpd:服務指令碼 /usr/sbin/vsftpd: 主程式 /var/ftp:資料檔案目錄(匿名使用者訪問目錄) /etc/pam.d/vsftpd:認證檔案pam(Plugable Authentication Module)外掛式認證模組 模組化庫檔案:/lib64/security/pam*.so 認證配置檔案:/etc/pam.conf和/etc/pam.d/* 基本配置:/etc/vsftpd/vsftpd.conf |
啟動和關閉vsftpd
vsftpd支援兩種啟動方式:xinetd和standalone。其中,xinetd是通過xinetd程序來啟動和關閉vsftpd服務,這是vsftpd預設啟動方式。standalone方式則是採用獨立程序啟動和關閉,與普通程式的啟動方式一樣。
xinetd方式:
採用這種方式時,vsftpd不能單獨管理,當vsftpd需要重啟時,也必須重啟整個xinetd伺服器。不推薦這種方式
standalone方式:
# service vsftpd star
# service vsftpd stop
# service vsftpd restart
或者使用: # chkconfig vsftpd on 使得ftp服務自啟動
vsftpd.conf配置檔案
vsftpd伺服器的配置主要通過其主配置檔案/etc/vsftpd.conf來完成。該檔案以'#'作為註釋,每個選項一行,格式為'選項=值'。
常用選項:
匿名使用者的配置: anonymous_enable=YES登陸許可權 anon_upload_enable=YES上傳許可權 anon_other_write_enable=YES刪除許可權 anon_mkdir_write_enable=YES建立目錄 啟用寫入功能時,ftp使用者對相應的本地檔案系統也有相應的寫入許可權;生效的許可權取決於檔案系統許可權和服務許可權的交集。 禁錮使用者於其家目錄中: chroot_local_user={Yes|No} chroot_list_enable={YES|NO} 只禁錮列表中的使用者在家目錄 chroot_list_file=/etc/vsftpd/chroot_list 禁錮使用者列表 歡迎資訊的定義: ftp_banner=some string 或者banner_file=/path/to/some_banner_file(檔案中寫歡迎資訊) dirmessage_enable=yes(切換目錄時,目錄下的歡迎資訊) 在ftp可訪問的目錄下建立.messages檔案 控制登入使用者的機制: /etc/vsftpd/ftpusers中的使用者都不允許使用ftp服務, 這是在/etc/pam.d/vsftpd中定義。 user_list配置檔案有兩種用法: 黑名單: userlist_enable=YES userlist_deny=YES 白名單: userlist_enable=YES userlist_deny=NO 連線限制: max_clients: 最大併發連線數 max_per_ip: 每IP可同時發起併發請求 傳輸速率: anon_max_rate: 匿名使用者的最大傳輸速率,單位是“位元組/秒”; local_max_rate: 本地使用者的最大傳輸速率,單位是“位元組/秒” 上傳檔案的umask: anno_umask: 匿名使用者上傳檔案的umask; local_umask: 本地使用者上傳檔案的umask; 修改匿名使用者上傳檔案的屬主和屬組: chown_uploads=YES chown_username=someuser |
ftp使用者:
匿名使用者:anonymous_enable
系統使用者:local_enable
虛擬使用者:所有的虛擬使用者會對映會一個系統使用者,訪問時的檔案目錄是為此係統使用者的家目錄。
使用者的存放位置:
虛擬使用者賬戶在 :檔案,MySQL,Oracle,Redis,LDAP...
以檔案存放虛擬使用者的配置步驟:
1.建立用於儲存虛擬使用者檔案,其中奇數行為使用者名稱,偶數行為密碼;
# touch VUSER_FILE
tom
123456
jerry
123123
2.將儲存虛擬使用者賬戶的文字檔案轉換為資料庫檔案:
db_load -T -t hash -f /PATH/TO/VUSER_FILE /PATH/TO/USERDB.db
3.設定PAM的認證檔案
/etc/pam.d/vusers.file
auth required /lib64/security/pam_userdb.so db=/PATH/TO/USERDB
account required /lib64/security/pam_userdb.so db=/PATH/TO/USERDB
4.建立一個用於對映虛擬使用者身份的本地使用者
useradd LOCAL_USER
5.修改此虛擬主機的配置檔案:
anonymous_enable=NO
guest_enable=YES
guest_username=LOCAL_USER
pam_service_name=vusers.file
local_root=/myftp/ftpdata
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
如果想要對於所有的虛擬使用者分別設定許可權,可以使用:
在虛擬主機的主配置檔案中新增指令:
user_config_dir=/PATH/TO/CONFIG_DIR
創建出這個目錄,並且在目錄下創建出與虛擬使用者名稱相同的檔案;
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/myftp/ftpdata/alice
anon_umask=022
基於MySQL存放虛擬使用者
'centos',PASSWORD('qhdlink')
'suse',PASSWORD('link19')
1.編譯安裝pam的mysql驅動
下載地址:http://pam-mysql.sourceforge.net/
需要預先安裝編譯環境,即: Development Tools,Server Platform Development, pam-devel, mysql_devel
# tar xf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/lib64/secutiry
# make -j 4 && make install
2.建立資料庫,資料表,及授權使用者;
mysql> create database vsftpd;
mysql> use vsftpd;
mysql> create table users (username char(20),password char(48));
mysql> insert into users values ('centos',PASSWORD('qhdlink')),('gentoo',PASSWORD('qhdlink'))
mysql> grant all on vsftpd.* to 'vsftpd'@'localhost' identified by 'vsftppass';
mysql> grant all on vsftpd.* to 'vsftpd'@'127.0.0.1' identified by 'vsftppass';
mysql> grant all on vsftpd.* to 'vsftpd'@'172.16.%.%' identified by 'vsftppass';
3.建立pam的認證檔案:
/etc/pam.d/vusers.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftppass host=127.0.0.1 db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftppass host=127.0.0.1 db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
4.建立對映使用者:
useradd mysqluser
5.修改此虛擬主機的配置檔案:
anonymous_enable=NO
guest_enable=YES
guest_username=LOCAL_USER
pam_service_name=vusers.mysql
user_config_dir=/PATH/TO/MYSQL_USER_CONFIG
轉載於:https://blog.51cto.com/shenmengdong/1967277