Linux 第80天 vsftpd

Linux 第80天 vsftpd

時間: 20181022



目錄

DAS,SAN,NAS

文件傳輸協議FTP

FTP軟件介紹

FTP服務

vsftpd服務

vsftpd服務配置選項解釋

實現基於SSL的FTPS

vsftpd虛擬用戶

實現基於文件驗證的vsftpd虛擬用戶

實現基於MYSQL驗證的vsftpd虛擬用戶

總結




DAS,SAN,NAS

DAS 只在一臺主機箱內部

SAN Storage Area Network存儲網絡,給主機共享文件系統

NAS Network Attached Storage 基於塊級別輸出給客戶機,客戶機可以在上邊執行分區

格式化等操作



文件傳輸協議FTP


File Transfer Protocol 早期的三個應用級協議之一

基於C/S結構

雙通道協議:數據和命令連接

數據傳輸格式:二進制(默認)和文本


兩種模式:服務器角度

主動(PORT style):服務器主動連接

命令(控制):客戶端:隨機port ---服務器:tcp21

數據:客戶端:隨機port ---服務器:tcp20

被動(PASV style):客戶端主動連接

命令(控制):客戶端:隨機port ---服務器:tcp21

數據:客戶端:隨機port ---服務器:隨機port

服務器被動模式數據端口示例:

227 Entering Passive Mode (172,16,0,1,224,59)

服務器數據端口爲:224*256+59



FTP軟件介紹


FTP服務器程序:

Wu-ftpd,Proftpd,Pureftpd,ServU,IIS

vsftpd:VerySecure FTP Daemon,CentOS默認FTP服務器

高速,穩定,下載速度是WU-FTP的兩倍

ftp.redhat.com數據:單機最多可支持15000個併發

客戶端軟件:

ftp,lftp,lftpget,wget,curl

ftp -A ftpserverport -A主動模式–p 被動模式

lftp–u username ftpserver

lftpusername@ftpserver

lftpgetftp://ftpserver/pub/file

gftp:GUI centos5 最新版2.0.19 (11/30/2008)

filezilla,CuteFtp,FlashFXP,LeapFtp

IE ftp://username:password@ftpserver



FTP服務


狀態碼:

1XX:信息125:數據連接打開

2XX:成功類狀態200:命令OK 230:登錄成功

3XX:補充類331:用戶名OK

4XX:客戶端錯誤425:不能打開數據連接

5XX:服務器錯誤530:不能登錄



用戶認證:

匿名用戶:ftp,anonymous,對應Linux用戶ftp

系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow

虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件

nsswitch:network service switch名稱解析框架

pam:pluggable authentication module 用戶認證

/lib64/security /etc/pam.d/ /etc/pam.conf


vsftpd服務

由vsftpd包提供

不再由xinetd管理

用戶認證配置文件:/etc/pam.d/vsftpd

服務腳本:/usr/lib/systemd/system/vsftpd.service(centos7)

/etc/rc.d/init.d/vsftpd(centos6)

配置文件:/etc/vsftpd/vsftpd.conf

man 5 vsftpd.conf

格式:option=value

注意:= 前後不要有空格

匿名用戶(映射爲系統用戶ftp )共享文件位置:/var/ftp

系統用戶共享文件位置:用戶家目錄

虛擬用戶共享文件位置:爲其映射的系統用戶的家目錄


vsftpd服務配置


命令端口

listen_port=21


主動模式端口

connect_from_port_20=YES 主動模式端口爲20

ftp_data_port=20 (默認)指定主動模式的端口


被動模式端口範圍

linux客戶端默認使用被動模式

windows 客戶端默認使用主動模式

pasv_min_port=6000 0爲隨機分配

pasv_max_port=6010


使用當地時間

use_localtime=YES 使用當地時間(默認爲NO,使用GMT)


匿名用戶配置選項

anonymous_enable=YES 支持匿名用戶

no_anon_password=YES(默認NO) 匿名用戶略過口令檢查

anon_world_readable_only(默認YES) 只能下載全部讀的文件

anon_upload_enable=YES 匿名上傳,注意:文件系統權限

anon_mkdir_write_enable=YES  匿名建目錄

anon_umask=0333 指定匿名上傳文件的umask,默認077

anon_other_write_enable=YES 可刪除和修改上傳的文件

指定上傳文件的默認的所有者和權限

chown_uploads=YES(默認NO)

chown_username=USERNAME

chown_upload_mode=0644


Linux系統用戶配置選項

local_enable=YES 是否允許linux用戶登錄

write_enable=YES 允許linux用戶上傳文件

local_umask=022 指定系統用戶上傳文件的默認權限

guest_enable=YES 所有系統用戶都映射成guest用戶

guest_username=ftp 配合上面選項才生效,指定guest用戶

local_root=/ftprootguest 用戶登錄所在目錄


禁錮所有系統用戶在家目錄中

chroot_local_user=YES(默認NO,不禁錮)禁錮系統用戶

禁錮或不禁錮特定的系統用戶在家目錄中與上面設置功能相反

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

當chroot_local_user=YES時,則chroot_list中用戶不禁錮

當chroot_local_user=NO時,則chroot_list中用戶禁錮


wu-ftp日誌:默認啓用

xferlog_enable=YES (默認)啓用記錄上傳下載日誌

xferlog_std_format=YES (默認)使用wu-ftp日誌格式

xferlog_file=/var/log/xferlog(默認)可自動生成


vsftpd日誌:默認不啓用

dual_log_enable=YES 使用vsftpd日誌格式,默認不啓用

vsftpd_log_file=/var/log/vsftpd.log(默認)可自動生成


登錄提示信息

ftpd_banner=“welcometo mage ftp server"

banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效


目錄訪問提示信息

dirmessage_enable=YES (默認)

message_file=.message(默認) 信息存放在指定目錄下.message


使用pam(Pluggable Authentication Modules)完成用戶認證

pam_service_name=vsftpd

pam配置文件:/etc/pam.d/vsftpd

/etc/vsftpd/ftpusers默認文件中用戶拒絕登錄


是否啓用控制用戶登錄的列表文件

userlist_enable=YES 默認有此設置

userlist_deny=YES(默認值)黑名單,不提示口令,NO爲白名單

userlist_file=/etc/vsftpd/users_list此爲默認值


vsftpd服務指定用戶身份運行

nopriv_user=nobody (默認值)


連接數限制

max_clients=0 最大併發連接數

max_per_ip=0 每個IP同時發起的最大連接數


傳輸速率:字節/秒

anon_max_rate=0 匿名用戶的最大傳輸速率

local_max_rate=0 本地用戶的最大傳輸速率


連接時間:秒爲單位

connect_timeout=60 主動模式數據連接超時時長

accept_timeout=60 被動模式數據連接超時時長

data_connection_timeout=300 數據連接無數據輸超時時長

idle_session_timeout=60 無命令操作超時時長


優先以文本方式傳輸

ascii_upload_enable=YES

ascii_download_enable=YES


配置FTP服務以非獨立服務方運行

vim /etc/vsftpd/vsftpd.conf/

listen=NO,默認爲獨立方式

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

}


實現基於SSL的FTPS


查看是否支持SSL

ldd `which vsftpd` 查看到libssl.so

創建自簽名證書(此前的章節,這裏不作詳細命令操作)

配置vsftpd服務支持SSL:/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/pki/tls/certs/vsftpd.pem  指定證書位置

dsa_private_key_file=/etc/vsftpd/vsftpd.key  指定私鑰位置

用filezilla等工具測試


vsftpd虛擬用戶


虛擬用戶:

所有虛擬用戶會統一映射爲一個指定的系統帳號

訪問共享位置,即爲此係統帳號的家目錄

各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定


虛擬用戶帳號的存儲方式:

文件:編輯文本文件,此文件需要被編碼爲hash格式

奇數行爲用戶名,偶數行爲密碼

db_load -T -t hash -f vusers.txt vusers.db 使用此條命令生成認證數據庫

關係型數據庫中的表中:

實時查詢數據庫完成用戶認證


mysql庫:pam要依賴於pam-mysql.so庫文件來讀取mysql數據庫的內容

/lib64/security/pam_mysql.so

/usr/share/doc/pam_mysql-0.7/README


實現基於文件驗證的vsftpd虛擬用戶

一、創建用戶數據庫文件

vim /etc/vsftpd/vusers.txt

pig

pigpass

cat

catpass

kitty

kittypass

cd /etc/vsftpd/

db_load-T -t hash -f vusers.txt vusers.db

chmod 600 vusers.db


二、創建用戶和訪問FTP目錄

useradd -d /var/ftproot -s /sbin/nologinvuser

chmod +rx /var/ftproot/

centos7 還需要執行以下操作:

chmod -w /var/ftproot/

mkdir /var/ftproot/upload

setfacl -m u:vuser:rwx /var/ftproot/upload


三、創建pam配置文件(!!!!!注意這裏一定不要加上那個後綴.db)

vim /etc/pam.d/vsftpd.db

auth required pam_userdb.so db=/etc/vsftpd/vusers

account required pam_userdb.so db=/etc/vsftpd/vusers

四、指定pam配置文件

vim /etc/vsftpd/vsftpd.conf

guest_enable=YES

guest_username=vuser

pam_service_name=vsftpd.db


五、SELinux設置:

禁用SELinux或者setsebool-P ftpd_full_access1


六、虛擬用戶建立獨立的配置文件

mdkir /etc/vsftpd/vusers.d/ 創建配置文件存放的路徑

vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers.d/

cd /etc/vsftpd/vusers.d/ 進入此目錄

允許pig用戶可讀寫,其它用戶只讀

vim pig創建各用戶自已的配置文件

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

vim mage 創建各用戶自已的配置文件

local_root=/ftproot登錄目錄改變至指定的目錄


實現基於MYSQL驗證的vsftpd虛擬用戶

說明:本實驗在兩臺CentOS主機上實現,一臺做爲FTP服務器,一臺做數據庫服務器

一、安裝所需要包和包組:


在數據庫服務器上安裝包:

Centos7:在數據庫服務器上安裝

yum –y install mariadb-server

systemctl start mariadb.service

systemctl enable mariadb

Centos6:在數據庫服務器上安裝

yum –y install mysql-server

在FTP服務器上安裝vsftpd和pam_mysql包

centos6:pam_mysql由epel6的源中提供

yum install vsftpdpam_mysql


centos7:無對應rpm包,需手動編譯安裝

yum -y groupinstall "Development Tools"

yum -y install mariadb-devel pam-develvsftpd

下載pam_mysql-0.7RC1.tar.gz

tar xvfpam_mysql-0.7RC1.tar.gz

cd pam_mysql-0.7RC1/

./configure --with-pam-mods-dir=/lib64/security \

--with-mysql=/usr \

--with-pam=/usr


make

make install


二、在數據庫服務器上創建虛擬用戶賬號

1.建立存儲虛擬用戶數據庫和連接的數據庫用戶

mysql> CREATE DATABASE vsftpd;

mysql> SHOW DATABASES;

ftp服務和mysql不在同一主機:

mysql> GRANT SELECT ON vsftpd.* TO

vsftpd@'172.16.%.%' IDENTIFIED BY 'vsftpdpass';

ftp服務和mysql在同一主機:

mysql> GRANT SELECT ON vsftpd.* TO

vsftpd@localhost IDENTIFIED BY 'vsftpdpass';

mysql> GRANT SELECT ON vsftpd.* TO

vsftpd@'127.0.0.1' IDENTIFIED BY 'vsftpdpass';

mysql> FLUSH PRIVILEGES;


2.準備相關表

mysql> USE vsftpd;

Mysql> SHOW TABLES;

mysql> CREATE TABLE users (

id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,

name CHAR(50) BINARY NOT NULL,

password CHAR(48) BINARY NOT NULL

);

mysql>DESC users;

測試連接

mysql -uvsftpd -hmysqlserverIP -pvsftpdpass

mysql> SHOW DATABASES;


3.添加虛擬用戶

根據需要添加所需要的用戶,爲了安全應該使用PASSWORD函數加密其密碼後存儲

mysql> DESC users;

mysql> INSERT INTOusers(name,password) 

values ('pig',password('pigpass')),

('pig2',password('pig2pass'))

mysql> SELECT * FROM users WHERE ID=1;


三、在FTP服務器上配置vsftpd服務

1.在FTP服務器上建立pam認證所需文件

vi /etc/pam.d/vsftpd.mysql添加如下兩行

authrequired pam_mysql.so user=vsftpd passwd=vsftpdpass 

host=mysqlserverIP db=vsftpd table=users usercolumn=name 

passwdcolumn=password crypt=2 (此爲一行)

account required pam_mysql.so user=vsftpd passwd=vsftpdpass 

host=mysqlserverIP db=vsftpd table=users usercolumn=name 

passwdcolumn=password crypt=2 (此爲一行)

注意:參考README文檔,選擇正確的加密方式

crypt是加密方式,

0表示不加密,

1表示crypt

2表示使用mysqlpassword()函數加密,

3表示md5加密

4表示sha1加密


配置字段說明

auth表示認證

account 驗證賬號密碼正常使用

required 表示認證要通過

pam_mysql.so模塊是默認的相對路徑,是相對/lib64/security/

路徑而言,也可以寫絕對路徑;後面爲給此模塊傳遞的參數

user=vsftpd爲登錄mysql的用戶

passwd=vsftpdpass登錄mysql的的密碼

host=mysqlservermysql服務器的主機名或ip地址

db=vsftpd指定連接msyql的數據庫名稱

table=users 指定連接數據庫中的表名

usercolumn=name 當做用戶名的字段

passwdcolumn=password 當做用戶名字段的密碼

crypt=2 密碼的加密方式爲mysqlpassword()函數加密


2.建立相應用戶和修改vsftpd配置文件,使其適應mysql認證

建立虛擬用戶映射的系統用戶及對應的目錄

useradd -s /sbin/nologin-d /var/ftprootvuser

chmod 555 /var/ftprootcentos7 需除去ftp根目錄的寫權限

mkdir/var/ftproot/{upload,pub}

setfacl–m u:vuser:rwx /var/ftproot/upload

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

anonymous_enable=YES

添加下面兩項

guest_enable=YES

guest_username=vuser

修改下面一項,原系統用戶無法登錄

pam_service_name=vsftpd.mysql


四、啓動vsftpd服務

service vsftpd start;systemctl start vsftpd

chkconfig vsftpd on;systemctl enable vsftpd

查看端口開啓情況

netstat -tnlp|grep :21

五、Selinux相關設置:在FTP服務器上執行

restorecon -R /lib64/security

setsebool -P ftpd_connect_db1

setsebool -P ftp_home_dir1

chcon -R -t public_content_rw_t /var/ftproot/

六、測試:利用FTP客戶端工具,以虛擬用戶登錄驗證結果

tail /var/log/secure


七、在FTP服務器上配置虛擬用戶具有不同的訪問權限

vsftpd可以在配置文件目錄中爲每個用戶提供單獨的配置文件以定義其ftp服務

訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以

是任意未使用目錄,只需要在vsftpd.conf指定其路徑及名稱即可

1、配置vsftpd爲虛擬用戶使用配置文件目錄

vim /etc/vsftpd/vsftpd.conf

添加如下選項

user_config_dir=/etc/vsftpd/vusers_config

2、創建所需要目錄,併爲虛擬用戶提供配置文件

mkdir/etc/vsftpd/vusers_config/

cd /etc/vsftpd/vusers_config/

touch pig pig2


3、配置虛擬用戶的訪問權限

虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。

如要讓用戶pig具有上傳文件的權限,可修改/etc/vsftpd/vusers_config/pig

文件,在裏面添加如下選項並設置爲YES即可,只讀則設爲NO

注意:需確保對應的映射用戶對於文件系統有寫權限

anon_upload_enable={YES|NO}

anon_mkdir_write_enable={YES|NO}

anon_other_write_enable={YES|NO}

local_root=/ftproot登錄目錄改變至指定的目錄


總結

1. vsftpd配置虛擬用戶時,pam模塊文件寫時模塊不可錯誤,不然法驗證並且無地查錯

2. vsftpd配置虛擬用戶驗證自生成的密碼庫時,在pam認證調用該文件時不需要加後綴.db


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章