Vsftp搭建(一)與PAM驗證 SSL加密 登錄

以爲有用請頂一下,謝謝 node


先上配置設置 mysql


Vsftp經常使用參數一覽表: c++

算法

參數選項 sql

意義及用法 數據庫

1、全局配置參數(一樣用於本地用戶、匿名用戶、虛擬用戶) vim

登陸信息參數: 數組

 

1 安全

dirmessage_enable=YES 服務器

當切換目錄時,顯示該目錄下.message隱藏文件的內容。

默認狀況下有message_file=.message

2

ftpd_banner=welcome to simon’s ftp server

當登陸服務器成功時顯示的banner信息。

3

banner_file=/etc/vsftpd/banner_file

登陸服務器成功後顯示/etc/vsftpd/banner_file的信息

4

banner_fail=/etc/vsftpd/banner_fail

登陸服務器失敗後顯示/etc/vsftpd/banner_fail的信息。

l 若是設置了ftp_banner=的值,登陸服務器將覆蓋vsftpd默認的鏈接後的信息。

l 若是同時設置了ftp_banner=banner_file=,那麼banner_file將覆蓋ftp_banner=的值。

日誌文件參數:(用於開啓本地用戶匿名用戶和虛擬用戶的上傳和下載的日誌功能)

5

xferlog_enable=YES

xferlog_std_format=YES

xferlog_file=/var/log/vsftpd

激活上傳和下載日誌功能。

啓用xferlog格式的日誌。

指定日誌的存放位置/var/log/vsftpd

性能參數:

6

設置空閒的用戶會話中斷時間:

idle_session_timeout=600

用戶會話閒置10分鐘後被中斷

7

設置空閒的數據鏈接中斷時間:

data_connection_timeout=120

將在數據鏈接空閒2分鐘後被中斷

8

設置客戶端空閒時自動中斷和激活的鏈接時間

accept_timeout=60

connect_timeout=60

 

將客戶空閒一分鐘後自動中斷鏈接

並在中斷一分鐘後自動激活鏈接

9

設置被動鏈接時客戶端鏈接時的端口範圍

pasv_min_port=50000

pasv_max_port=60000

 

將客戶鏈接時的端口範圍在5000060000之間。

10

listen=YES

vsftpd處於獨立的啓動模式下工做開啓ipv4支持

11

listen_port=21   默認21

Vsftpd監聽的端口默認爲21

12

listen_ipv6=YES

開啓ipv6支持。

13

tcp_wrappers=YES

使用tcp_wrappers做爲主機的訪問控制。

14

pam_service_name=vsftpd

設置使用的pam驗證的配置文件名稱,默認路徑在/etc/pam.d

15

nopriv_user=ftp |  nobody

指定vsftp服務運行時的帳號。

16

ls_recurse_enable=YES |NO 默認 YES

是否容許用戶使用ls R遞歸列表比較佔用系統資源

17

dirlist_enable=YES |NO  默認YES

是否容許用戶使用dirls 之類得列目錄命令。

18

download_enable=YES |NO 默認 YES

是否容許用戶下載文件

19

write_enable=YES | NO  默認NO

是否容許用戶上傳(包括本地用戶、匿名用戶上傳的前提條件)

20

local_enable=YES | NO  默認YES

本地用戶是否能夠訪問ftp服務器

21

deny_file={*.exe,*.dll}

設置不容許傳輸的文件類型{}包括上傳下載。

22

max_clients=200

設置最大的鏈接數量

23

max_per_ip=3

同一IP地址最多的鏈接數量,超過將被拒絕。

24

use_localtime=YES

是否使用本地時間?默認使用GMT時間,文件時間比中國晚8個小時,建議設置爲YES

 2、本地用戶配置參數:

25

local_enable=YES | NO 默認 YES

是否容許本地用戶訪問,默認容許。

26

local_umask=xxxx ( 四位)

1.       無論源文件權限如何,上傳後文件根據由xxxx決定。777-xxx

2.       無論源文件權限如何,也無論xxx是否屏蔽1可執行,上傳文件都不可執行。上傳後的文件永遠不可執行。

3.       默認xxx1770077

4.       創建目錄權限爲700

27

local_max_rate=50000   50k

設置本地用戶傳輸的最大速率(0爲不限制

 囚監本地用戶使其不能切換到自家目錄外選項:

28

chroot_local_user=YES | NO   默認NO

chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list

是否囚監本地用戶使其不能切換到自家目錄。(默承認以切換)

表示轉折開啓囚監列表功能,在列表中的用戶但是例外。

囚監列表文件的存放位置。

 

                                             

29

userlist_enable=YES

userlist_deny=YES | NO

userlist_file=/etc/vsftpd/userlist_file指定列表文件

 

是否開啓userlist訪問控制功能。

列表中的用戶是否被禁止訪問,YES禁止列表中的用戶。NO除列表中用戶外都被禁止。當NO時,只有在列表中加入「ftp」匿名用戶才能夠訪問。或加入「anonymous,anonymous才能夠訪問。當最終文件擁有者仍爲「ftp」用戶。

30

local_root=

默認沒有此參數,將本地用戶引導到自家目錄當中,也可加入此參數,指定本地用戶來登陸後進入其餘目錄中。

3、匿名用戶選項參數:保證1#setsebool P allow_ftpd_anon_write=1  2#chcon R t public_content_rw_t  /var/ftp或第二項#setsebool p allow_ftpd_full_access=1

31

anonymous_enable=YES |NO 默認YES

匿名用戶是否能夠訪問下載。默承認以

匿名用戶上傳選項 保證匿名用戶有寫的權限 如: chmod o+w /var/ftp/pub

32

anon_world_readable_only=YES | NO 默認NO

anon_upload_enable=YES |NO  默認NO

anon_mkdir_write_enable=YES |NO 默認NO

anon_other_write_enable=YES |NO 默認NO

 

匿名用戶是否能夠上傳,默認不能夠。

匿名用戶是否能夠創建目錄,默認不能夠。

匿名用戶是否能夠執行刪除,重命名等

33

anon_max_rate= 單位B

設置匿名用戶傳輸的最大速率(0爲不限制

34

chown_uploads=YES |NO 默認NO

chown_username=

匿名用戶上傳文件是否更改文件的擁有者(擁有組還是FTP)匿名用戶創建文件夾,擁有者還是FTP

更改後的擁有者。

35

anon_umask=xxxx(四位)

local_umask

4、虛擬用戶選項參數:虛擬用戶訪問前提條件:local_enable=YES 默認爲NO 無論anonymous_enable=YESNO

36

guest_enable=YES |NO

guest_username=

開啓虛擬用戶選項

指定虛擬用戶執行FTP時,映射成的本地用戶

37

user_config_dir=/etc/vsftpd/config設置放置虛擬用戶各自的配置文件,以該用戶名字命名

38

local_root= 設置虛擬用戶各自的家目錄

 

虛擬用戶其餘選項參數由匿名用戶的選項參數決定。

5、FTPS配置參數:如下參數除allow_anon_ssl=外 ,其餘對本地用和虛擬用戶有效,但此參數組寫進虛擬用戶各自配置文件當中無效(user_config_dir=

39

ssl_enable=YES | NO 默認NO

ssl_sslv2=YES ssl_sslv3=YES ssl_tlsv1=YES

指定vsftpd支持加密協議

指定vsftpd支持安全套接字層v2,v3,tls加密方式v1

40

force_local_logins_ssl=YES |NO

 強制本地用戶和虛擬用戶 ssl 加密登陸

41

force_local_data_ssl=YES | NO

強制本地用戶和虛擬用戶數據傳輸用ssl

42

rsa_cert_file=/etc/vsftpd/.sslkey/vsftp.pem

指定證書存放位置

43

allow_anon_ssl=YES |NO

容許匿名用戶ssl加密登陸


搭建

------------------------

基於SSL加密

(能夠應用於任何用戶驗證。能夠利用本博的博文抓包驗證)

#mkdir  /etc/vsftpd/.sslkey        //創建存放證書的目錄
#cd  /etc/vsftpd/.sslkey           //進入該目錄以備創建證書
#openssl  req  –new  -x509  -nodes  -out vsftpd.pem  -keyout  vsftpd.pem  //生成證書,Common Name必須是客戶端訪問FTP服務器時的FQDN.


#chmod  -R 400  /etc/vsftpd/.sslkey  //保證證書安全,修改證書目錄的權限。
在/etc/vsftpd/vsftpd.conf配置文件中添加:
ssl_enable=YES   ssl_sslv2=YES   ssl_sslv3=YES   ssl_tlsv1=YES
force_local_logins_ssl=YES   force_local_data_ssl=YES
rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem
#service  vsftpd  restart

------------------------


基於mysql驗證

#setsebool –P ftp_connect_db=1
 mysql正常運行須要per-*軟件包的支持
 pam_mysql須要安裝mysql_devel
 


 

#useradd –d /var/ftp/vuser  -s /sbin/nologin    //在系統中增長一個本地用戶vuser。

#chmod o+rwx /var/ftp/vuser    //讓數據庫中虛擬用戶test1和test2具備可讀寫執行權限。
在vsftpd配置文件中加入兩條:
guest_enable=YES     //容許虛擬用戶登陸
guest_username=vuser //把test1,test2虛擬用戶映射成本地用戶vuser.
(虛擬用戶訪問服務器必須保證前提條件local_enable=YES默認爲NO,與anonymous_enable=是否爲NO無關,
虛擬用戶要上傳文件必須保證前提條件write_enable=YES,虛擬用戶的特殊參數user_config_dir=,在各自的配置文件中能夠加入一條本地用戶配置參數local_root=和userlist(chroot選項不起做用,虛擬用戶不能夠切換到虛擬目錄外的目錄),其它參數由匿名用戶的各個參數和全局配置參數與決定如:
anon_umask= ,anon_upload_enable=,anon_mkdir_write=,anon_other_write_enable=)。


源碼編譯安裝pam_mysql.模塊路徑爲/usr/lib/security/pam_mysql.so


編輯/etc/pam.d/vsftpd註釋掉原來的參數選項,添加:
auth    required  /usr/lib/security/pam_mysql.so  user=simon passwd=redhat host=loclahost db=vftpuser
table=users usercolumn=name passwdcolumn=pwd crypt=2
account required  /usr/lib/security/pam_mysql.so  user=simon passwd=redhat host=loclahost db=vftpuser
table=users usercolumn=name passwdcolumn=pwd crypt=2


------------------------

PAM_MYSQL 驗證登錄實驗

OS: Red Hat Enterprise Linux Server release 6.3 (Santiago) 64位系統
Network: 192.168.1.33/ 255.255.0.0
內核: 2.6.32-279.el6.x86_64
數據庫: mysql-5.1.61-4.el6.x86_64
FTP服務器: vsftpd-2.2.2-11.el6.x86_64
相關聯的其它軟件:mysql-devel-5.1.61-4.el6.x86_64   pam-devel-1.1.1-10.el6_2.1.x86_64 
gcc-4.4.6-4.el6.x86_64            gcc-c++-4.4.6-4.el6.x86_64
注:本次實驗系統配置基本上是默認安裝,所需軟件系統自帶,除pam_mysql-0.7RC1.tar.gz另外下載,SELinux禁用,防火牆經過FTP功能。


第一步:安裝pam_mysql
首先要說下,pam_mysql 在 RHEL6.3裏目前尚未加入,須要自行編譯.準備編譯環境並編譯 pam_mysql.so (mysql-devel pam-devel gcc gcc-c++系統默認安裝自帶)
wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
#tar zxvf pam_mysql-0.7RC1.tar.gz
#cd pam_mysql-0.7RC1
#./configure
#make   
#make install
編譯完的 pam_mysql.so 放在 /lib/security 下是 pam 的默認路徑。
64位系統的全部pam模塊都在/lib64/security/
#ln /lib/security/pam_mysql.* /lib64/security/    要作成硬連接


第二步:建立數據庫信息
[root@shinegoo /]# service mysqld start   啓動數據庫服務器
[root@shinegoo /]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.61 Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
一、創建數據庫
mysql> create database vsftp;
Query OK, 1 row affected (0.02 sec)
二、建立用戶權限
mysql> grant all privileges on vsftp.* to virtual@"%" identified by '123456';
Query OK, 0 rows affected (0.00 sec)
切換數據庫
mysql> use vsftp;
Database changed
三、建立用戶賬號數據表
mysql> create table account (
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(128) NOT NULL UNIQUE,
-> passwd VARCHAR(128) NOT NULL
-> )engine=myisam;  // engine=myisam是性能極高的引擎,支持全文本搜索,不支持事務。
Query OK, 0 rows affected (0.10 sec)
四、建立日誌記錄表,記錄用戶訪問信息
mysql> create table log (
    -> msg varchar(128),
    -> user varchar(128),
    -> pid int,
    -> host varchar(128),
    -> rhost varchar(128),
    -> time timestamp
    -> )engine=innodb;  // engine=innodb支持事務處理,不支持全文本搜索,以上兩項可不要。
Query OK, 0 rows affected (0.08 sec)
五、建立觸發器,自動把更新的密碼用 md5 加密方式加密(本次配置下沒建立,由於md5不是很穩定!)
mysql> CREATE TRIGGER trigger_format_passwd (注刪除:drop trigger trigger_format_passwd)
-> BEFORE INSERT
-> ON account
-> FOR EACH ROW
-> SET NEW.passwd = md5(NEW.passwd);
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TRIGGER trigger_format_passwd_update (注刪除:drop trigger 觸發器名)
-> BEFORE UPDATE
-> ON account
-> FOR EACH ROW
-> SET NEW.passwd = md5(NEW.passwd);
Query OK, 0 rows affected (0.00 sec) 
mysql> quit
Bye
第三步:建立 pam 認證規則內容(注: 只能有兩行不能有空格)
[root@shinegoo pam.d]# vim vsftpd_mysql    建vsftpd_mysql文件名
[root@shinegoo pam.d]# cat /etc/pam.d/vsftpd_mysql
auth required /lib64/security/pam_mysql.so user=virtual passwd=123456 host=192.168.1.33 db=vsftp table=account usercolumn=name passwdcolumn=passwd crypt=0 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time verbose=1
account required /lib64/security/pam_mysql.so user=virtual passwd=123456 host=192.168.1.33 db=vsftp table=account usercolumn=name passwdcolumn=passwd crypt=0 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time verbose=1


[root@localhost pam.d]#
user:鏈接 mysql 的用戶
passwd:鏈接 mysql 的用戶密碼
host:mysql 服務器地址,格式能夠是ip ip:port unix socket,好比/tmp/mysql.sock
db:存放 vsftp 驗證信息的數據庫
table:用戶信息表
usercolumn:用戶信息表用戶名列
passwdcolumn:用戶信息表密碼列
logtable:日誌表
logmsgcolumn:日誌表消息列,記錄日誌消息主體。
logusercolumn:日誌表用戶列,記錄訪問 ftp 的用戶。
logpidcolumn:日誌表 pid 列,記錄調用 pam_mysql.so 的進程的pid。
loghostcolumn:日誌表 host 列,記錄 ftp 服務器 ip。
logrhostcolumn:日誌表 rhost 列,記錄 ftp 客戶端 ip.
logtimecolumn:日誌表時間列,記錄用戶訪問的時間。
crypt:加密方式,一共支持
0 / plain 明文密碼。
1 / Y crypt 加密方式,在 mysql 查詢語句中對應 encrypt 函數。
2 / mysql passwd 加密方式,在 mysql 查詢語句中對應 password 函數。
3 / md5 md5 加密方式,在 mysql 查詢語句中對應 md5 函數。
4 / sha1 sha1 加密方式,在 mysql 查詢語句中對應 sha1 函數。
若是 RHEL6.3 上要使用 3 方式進行加密,務必把/etc/my.cnf 裏面的 old_passwords=1 改爲 old_passwords=0,不然 mysql 會使用老的加密算法,致使和 pam_mysql.so 密碼驗證不成功。
上面配置我不作過多解釋。你們請看 pam_mysql 的 README,有很詳盡的解釋。
#chmod 600 vsftpd_mysql   //(注:vsftpd_mysql 含有密碼信息,因此務必修改權限!)
#chown root.root vsftpd_mysql
第四步:建立虛擬用戶
useradd -d /home/virtual -s /sbin/nologin virtual
chown –R virtual.virtual /home/virtual/ virtual
chmod  -R 700 /home/virtual


第五步:修改 vsftpd 配置文件,指定由pam 配置文件來進行用戶身份驗證
/etc/vsftpd/vsftpd.conf的配置以下
anonymous_enable=NO 
local_enable=YES    //容許本地用戶訪問(/etc/passwd中的用戶)
write_enable=NO   //控制是否容許使用任何能夠修改文件系統的FTP 的指令
local_umask=022 
dirmessage_enable=YES
message_file=.message          //目錄提示信息的內容文件 
xferlog_enable=YES 
xferlog_std_format=YES 
connect_from_port_20=YES 
listen=YES 
#listen_port=21   //綁定到某個端口
#ftp_data_port=20   //數據傳輸端口
pam_service_name=vsftpd_mysql 
guest_enable=YES 
guest_username=virtual
user_config_dir=/etc/vsftpd/user_config 
userlist_enable=YES 
ftpd_banner=Welcome to 先谷科技 FTP service.
#chroot_local_user=YES  //限制用戶在本身的主目錄 整個其它目錄都不能看到 全局性
#ls_recurse_enable=NO    //使用ls -R命令會消耗大量系統資源
#one_process_model=YES    //是否使用單進程模式,此項只有anonymous_enable=NO時纔不會出錯
idle_session_timeout=120   //空閒鏈接超時
data_connection_timeout=300    //數據傳輸超時
accept_timeout=60       //PAVS請求超時
connect_timeout=60      //PROT模式鏈接超時 
reverse_lookup_enable=NO  //解決登錄驗證緩慢問題.〈新加進去的沒實際測試過2011/12/15〉
anon_max_rate=2000000    //匿名用戶的傳輸比率 (b/s) (2M)
local_max_rate=500000000   //本地用戶的傳輸比率(b/s) (500M) 虛擬用戶
max_clients=200    //可接受的最大client數目
max_per_ip=4    //每一個ip的最大client數目
tcp_wrappers=YES
[root@localhost vsftpd]# service vsftpd start    重啓 ftp 服務
Starting vsftpd for vsftpd: [ OK ]
[root@localhost vsftpd]# 第六步:添加用戶權限配置文件 [root@shinegoo vsftpd]# mkdir user_config   //在目錄下/etc/vsftpd/創建存放用戶配置文件夾 [root@shinegoo vsftpd]#cd user_config [root@shinegoo user_config]# vim admin (編輯用戶權限) #local_root=/mdraid5 #write_enable=YES #anon_upload_enable=YES    //控制匿名用戶文件上傳, 只有在write_enable=YES時,此項纔有效 #anon_mkdir_write_enable=YES  //控制文件夾的建立, 只有在write_enable=YES時,此項纔有效 #anon_other_write_enable=YES  //控制對文件和文件夾的刪除和重命名 #anon_world_readable_only=YES //文件下載, 具備全球讀權限的文件(非目錄)能夠下載到本機閱讀 #virtual_use_local_privs=YES  //加上這句用戶能看到目錄和文件顯示信息 #chmod_enable=YES #file_open_mode=0775  //上傳檔案的權限,與chmod 所使用的數值相同。若是但願上傳的文件能夠執行,設此值爲0777。默認值爲0666。 #local_max_rate=500000000  //本地用戶的傳輸比率(b/s) (500M) 虛擬用戶 第七步:建立用戶數據添加用戶名和密碼 [root@shinegoo user_config]# mysql -u root –p mysql> use vsftp; mysql> insert into account (name, passwd) values ("admin", "12345678");  Query OK, 1 row affected (0.00 sec) mysql> select * from account; +----+-------+----------+ | id | name  | passwd   | +----+-------+----------+ |  1 | admin | 12345678 | +----+-------+----------+ 1 row in set (0.00 sec)  mysql> quit Bye 第八步:測試登陸 [root@shinegoo user_config]# ftp 192.168.1.33 Connected to 192.168.1.33 220 Welcome  530 Please login with USER and PASS. Name (192.168.1.33:root): admin 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>  ftp> 第九步:查看日誌 [root@shinegoo vsftpd]# mysql -u root -p mysql> use vsftp; mysql> select * from log; +------------------------------------+-------+------+-----------+--------------+---------------------+ | msg                                | user  | pid  | host      | rhost        | time                | +------------------------------------+-------+------+-----------+--------------+---------------------+ | AUTHENTICATION FALURE (FIRST_PASS) | admin | 5854 | (unknown) | 172.31.0.110 | 2012-08-11 11:56:57 | | AUTHENTICATION SUCCESS             | admin | 5854 | (unknown) | 172.31.0.110 | 2012-08-11 11:56:57 | | QUERYING SUCCESS                   | admin | 5854 | (unknown) | 172.31.0.110 | 2012-08-11 11:56:57 | +------------------------------------+-------+------+-----------+--------------+---------------------+ 3 rows in set (0.00 sec)  mysql>  系統管理 OS:系統用戶名 root  密碼:1 Mysql數據庫:用戶名root和vsftp 密碼:空  和123456(virtual虛擬用戶) VSFTPD管理員:admin  密碼:12345678 

相關文章
相關標籤/搜索