1. 程式人生 > >十、FTP服務器配置和管理

十、FTP服務器配置和管理

網絡共享ftp、vsftpd

10.1、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會話過程中FTP命令的發送和接收,數據鏈路則負責數據的傳輸。FTP客戶端與服務器之間的通信過程如下所示:

1、用戶使用FTP協議的客戶機程序,連接到遠程的FTP服務器程序上

2、用戶使用客戶端程序進行FTP文件的上傳或下載,FTP客戶端程序通過控制鏈路向FTP發送相應的控制命令

3、服務器程序接收並執行用戶所發出的命令

4、FTP服務器將執行結果返回到客戶端

默認情況下,FTP服務器程序使用兩個預分配端口號20和21,分別用於傳輸數據鏈路和控制鏈路。但是傳輸數據又可以分為主動模式與被動模式,其數據傳輸端口有所不同。

主動模式工作的原理:FTP客戶端連接到FTP服務器的21端口,發送用戶名和密碼登錄,登錄成功後要list列表或者讀取數據時,客戶端隨機開放一個端口(1024以上),發送PORT命令到FTP服務器 ,告訴服務器客戶端采用主動模式並開放端口;FTP服務器收到PORT主動模式命令和端口號後,通過服務器的20端口和客戶端開放的端口連接,發送數據,原理如下圖:

技術分享

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

技術分享

參考:https://my.oschina.net/binny/blog/17469

10.2、vsftpd服務器的安裝與配置

vsftpd可以通過rpm包或者源碼安裝,通過rpm安裝只需使用yum命令即可,這裏介紹源碼安裝。其官方地址為http://vsftpd.beasts.org/,這裏以3.0.2版本介紹vsftpd的安裝與配置。

文件的組成:

/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

[[email protected] vsftpd-3.0.2]# useradd nobody              #默認配置需要使用的用戶
[[email protected] vsftpd-3.0.2]# mkdir /usr/share/empty      #默認配置需要使用的目錄
[[email protected] vsftpd-3.0.2]# mkdir /var/ftp              #匿名用戶需要使用的目錄
[[email protected] vsftpd-3.0.2]# useradd -d /var/ftp/ ftp
[[email protected] vsftpd-3.0.2]# chown root.root /var/ftp/
[[email protected] vsftpd-3.0.2]# chmod  og-w /var/ftp/

[[email protected] app]# tar xf vsftpd-3.0.2.tar.gz 
[[email protected] app]# cd vsftpd-3.0.2
[[email protected] vsftpd-3.0.2]# make && make install
[[email protected] vsftpd-3.0.2]# cp vsftpd.conf /etc/         #復制配置文件到
  • 啟動和關閉vsftpd

vsftpd支持兩種啟動方式:xinetd和standalone。其中,xinetd是通過xinetd進程來啟動和關閉vsftpd服務,這是vsftpd默認啟動方式。standalone方式則是采用獨立進程啟動和關閉,與普通程序的啟動方式一樣。

xinetd方式:

采用這種方式時,vsftpd不能單獨管理,當vsftpd需要重啟時,也必須重啟整個xinetd服務器。

standalone方式:

使用這種方式時,vsftpd服務將作為單獨的進程來啟動和關閉,配置standalone啟動方式步驟為:

[[email protected] vsftpd-3.0.2]# vim /etc/xinetd.d/vsftpd   #將diabale選項改為yes
    service ftp
    {
            socket_type             = stream
            wait                    = no
            user                    = root
            server                  = /usr/local/sbin/vsftpd
    #       server_args             =
    #       log_on_success          += DURATION USERID
    #       log_on_failure          += USERID
            nice                    = 10
            disable                 = yes
    }
[[email protected] vsftpd-3.0.2]# vim /etc/vsftpd.conf             #指定standalone啟動方式
    listen=YES
[[email protected] vsftpd-3.0.2]# chkconfig vsftpd --level 3 off   #關閉自啟動服務
[[email protected] vsftpd-3.0.2]# /usr/local/sbin/vsftpd &         #啟動
[1] 1926

登錄ftp:

[[email protected] vsftpd-3.0.2]# ftp localhost       #登錄本機
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (localhost:root): anonymous                 #匿名用戶登錄
331 Please specify the password.
Password:                                        #輸入密碼,匿名用戶可以無需密碼
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,143,37).
150 Here comes the directory listing.
226 Directory send OK.
ftp> quit                                        #退出
221 Goodbye.
[[email protected] vsftpd-3.0.2]#
  • 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

虛擬用戶:所有的虛擬用戶會映射會一個系統用戶,訪問時的文件目錄是為此系統用戶的家目錄。

用戶的存放位置:

hash編碼的文件:奇數行為用戶名,偶數行為密碼

關系型數據庫:pam-mysql實現認證

10.2、vsftpd基於pam-mysql的認證方式

1、安裝mysql和pam_mysql

[[email protected] home]# yum -y install vsftpd mysql-server mysql-devel pam_mysql

2、準備數據庫及相關表

mysql> create database vsftpd;
mysql> grant select on vsftpd.* to [email protected] identified by ‘mylinux‘;
mysql> grant select on vsftpd.* to [email protected] identified by ‘mylinux‘;
mysql> flush privileges;
mysql> use vsftpd;
mysql> create table users (
    -> id int AUTO_INCREMENT NOT NULL,
    -> name char(20) binary NOT NULL,
    -> password char(48) binary NOT NULL,
    -> primary key(id)
    -> );

3、添加測試的虛擬用戶,為了安全起見應該使用PASSWORD函數加密後存儲。

mysql> insert into users(name,password) values(‘tom‘,password(‘123456‘));
mysql> insert into users(name,password) values(‘jerry‘,password(‘123456‘));

4、建立pam認證所需文件#vi /etc/pam.d/vsftpd.mysql

auth required /lib/security/pam_mysql.so user=vsftpd passwd=mylinux host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=vsftpd passwd=mylinux host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

pam_mysql.so基於unix sock連接mysql服務器時可能會出問題,此時,建議授權一個可遠程連接的mysql並訪問vsftpd數據庫的用戶。

5、修改vsftpd的配置文件,使其適應mysql認證,建立虛擬用戶映射的系統用戶及對應的目錄

[[email protected] home]# useradd -s /sbin/nologin -d /var/ftproot vuser
[[email protected] home]# chmod go+rx /var/ftproot

確保/etc/vsftpd.conf中已經啟用了以下選項

anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES

而後添加以下選項

guest_enable=YES
guest_username=vuser

並確保pam_service_name選項的值如下所示

pam_service_name=vsftpd.mysql

6、啟動vsftpd服務

[[email protected] home]# service vsftpd start
Starting vsftpd for vsftpd: [  OK  ]
[[email protected] home]# chkconfig vsftpd on

7、配置虛擬用戶具有不同的訪問權限

配置vsftpd為虛擬用戶使用配置文件目錄

# vim vsftpd.conf

添加

user_config_dir=/etc/vsftpd/vusers_config

創建所需要目錄,並為虛擬用戶提供配置文件

# mkdir /etc/vsftpd/vusers_config/
# cd /etc/vsftpd/vusers_config/
# touch tom jerry

配置虛擬用戶的訪問權限,虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。如果需要讓tom用戶具有上傳文件的權限,可以修改/etc/vsftpd/vusers/tom文件,在裏面添加如下選項即可。

anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}

本文出自 “隨風而飄” 博客,請務必保留此出處http://yinsuifeng.blog.51cto.com/10173491/1934299

十、FTP服務器配置和管理