1. 程式人生 > 實用技巧 >FTP伺服器管理和配置

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埠和客戶端開放的埠連線,傳送資料,原理如下圖:

wKiom1k6aRSjDHhoAAEX8HjST3Q076.png-wh_50

被動模式工作原理:FTP客戶端連線到FTP伺服器的21埠,傳送使用者名稱和密碼登入,登入成功後要list列表或者讀取資料時,傳送PASV命令到FTP伺服器, 伺服器在本地隨機開放一個埠(1024以上 ),然後把開放的埠告訴客戶端,客戶端再連線到伺服器開放的埠進行資料傳輸,原理如下圖:

wKioL1k6aRXTcv-oAAEpZ25a88A839.png-wh_50

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