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