FTP服務的相關實現
vsftpd介紹
1》vsftpd全名爲very secure FTP daemon,爲很是安全的FTP服務,是針對操做系統的權限來設計的,這個權限是發起者發起該服務進程的權限,一般vsftpd服務的啓動權限很是低。
2》vsftpd可使用chroot函數來將特定的目錄變成vsftpd活動的根目錄。
3》vsftpd服務器是由vsftpd程序包提供,再也不由xinetd管理。
vsftpd服務包和配置文件
1》rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/systemd/system-generators/vsftpd-generator
/usr/lib/systemd/system/vsftpd.service
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/vsftpd@.service
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-3.0.2/
/usr/share/man/man5/vsftpd.conf.5.gz
/usr/share/man/man8/vsftpd.8.gz
/var/ftp
/var/ftp/pub
2》用戶認證配置文件:
/etc/pam.d/vsftpd
3》服務腳本:
/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd
4》配置文件:
/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value
注意:= 先後不要有空格
5》匿名用戶(映射爲系統用戶ftp)共享文件位置:
/var/ftp
6》系統用戶共享文件位置:
用戶本身的家目錄,家目錄不容許有寫權限
7》虛擬用戶經過ftp訪問共享文件位置:
給虛擬用戶指定的映射成爲系統用戶的家目錄
vsftpd服務的配置
/etc/vsftpd/vsftpd.conf
1》命令端口
listen=YES ##表示vsftpd以standalone(單機模式)啓動
listen_port=21
2》主動模式端口
connect_from_port_20=YES 主動模式端口爲20
ftp_data_port=20 指定主動模式的端口
3》被動模式端口範圍
linux 客戶端默認使用被動模式
windows 客戶端默認使用主動模式
pasv_min_port=6000 若設置0爲隨機分配
pasv_max_port=6010
4》使用當地時間
use_localtime=YES 使用當地時間(默認爲NO,使用GMT)
5》匿名用戶
anonymous_enable=YES 支持匿名用戶
no_anon_password=YES ( 默認NO)匿名用戶略過口令 檢查
anon_world_readable_only ( 默認YES) 只能下載所有讀的文件
anon_upload_enable=YES 匿名上傳,注意: 文件系統權限
anon_mkdir_write_enable=YES 匿名用戶是否能夠建立目錄
anon_other_write_enable=YES 可刪除和修改上傳的文件
anon_umask=077 指定匿名上傳umask
chown_uploads=YES (默認NO)上傳是否開啓
chown_username=wang 指定上傳文件的默認的全部者
chown_upload_mode=0644 指定上傳文件的默認的權限
6》Linux 系統用戶
guest_enable=YES 全部系統用戶都映射成guest 用戶
guest_username=ftp 配合上面選項才生效,指定guest 用戶
local_enable=YES 是否容許linux 用戶登陸
write_enable-YES 容許linux 用戶上傳文件
local_umask=022 指定系統用戶上傳文件的默認權限
local_root=/ftproot 非匿名用戶登陸所在目錄
7》禁錮全部系統用戶在家目錄中
chroot_local_user=YES (默認NO,不由錮)禁錮系統用戶
8》禁錮或不由錮特定的系統用戶在家目錄中,與上面設置功能相反
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
當chroot_local_user=YES 時,則chroot_list中用戶不由錮
當chroot_local_user=NO 時,則chroot_list中用戶禁錮
9》wu-ftp 日誌:默認啓用
xferlog_enable=YES (默認)啓用記錄上傳下載日誌
xferlog_std_format=YES (默認)使用wu-ftp日誌格式
xferlog_file=/var/log/xferlog (默認)可自動生成
dual_log_enable=YES,vsftpd_log_file=/var/log/vsftpd.log 使用vsftpd本身的日誌文件
10》vsftpd 日誌:默認不啓用
dual_log_enable=YES 使用vsftpd 日誌格式,默認不啓用
vsftpd_log_file=/var/log/vsftpd.log ( 默認 )可自動生成
11》登陸提示信息
ftpd_banner=「welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效
12》目錄訪問提示信息
dirmessage_enable=YES (默認)
message_file=.message (默認) 信息存放在指定目錄下.message
13》使用pam(Pluggable Authentication Modules)完成用戶認證
pam_service_name=vsftpd
pam 配置文件:
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers 默認文件中用戶拒絕登陸
14》是否啓用控制用戶登陸的列表文件
userlist_enable=YES 默認有此設置
userlist_deny=YES (默認值)黑名單,不提示口令,NO爲白名單
userlist_file=/etc/vsftpd/users_list 此爲默認值
15》鏈接限制
max_clients=0 最大併發鏈接數
max_per_ip=0 每一個IP同時發起的最大鏈接數
16》vsftpd 服務指定用戶身份運行
nopriv_user=nobody
17》傳輸速率:字節/秒
anon_max_rate=0 匿名用戶的最大傳輸速率
local_max_rate=0 本 地用戶的最大傳輸速率
18》鏈接時間:秒爲單位
connect_timeout=60 主動模式數據鏈接超時時長
accept_timeout=60 被動模式數據鏈接超時時長
data_connection_timeout=300 數據鏈接無數據輸超時時長
idle_session_timeout=60 無命令操做超時時長
19》優先以文本方式傳輸
ascii_upload_enable=YES
ascii_download_enable=YES
20》配置FTP 服務以非獨立服務方運行: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
1》查看是否支持SSL
ldd `which vsftpd` 查看到libssl.so
2》建立自簽名證書
cd /etc/pki/tls/certs/
make vsftpd.pem
openssl x509 -in vsftpd.pem -noout –text
3》配置vsftpd 服務支持SSL :
vim /etc/vsftpd/vsftpd.conf
ssl_enable=YES 啓用SSL
allow_anon_ssl=NO 匿名不支持SSL
force_local_logins_ssl=YES 本地用戶登陸加密
force_local_data_ssl=YES 本地用戶數據傳輸加密
force_anon_logins_ssl=YES
force_anon_data_ssl=YES 匿名用戶的可用在虛擬用戶上
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
還能夠根據本身的需求來修改或添加對應的參數信息,需注意的是,在修改配置文件後是須要重啓vsftpd服務才能生效的。
4》用filezilla等工具測試
ftpes:
基於虛擬用戶的vsftpd
1》虛擬用戶就是系統當中不存在的實體用戶,它只能訪問服務器爲其提供的ftp服務,但不能訪問其餘的額外資源信息。
2》咱們能夠經過使用虛擬用戶來提升系統的安全性。例如,可讓一些用戶對ftp服務中的內容具備寫權限,但又不容許訪問系統其餘資源。
3》各虛擬用戶可被賦予不一樣的訪問權限,經過匿名用戶的權限控制參數進行指定。
4》全部虛擬用戶會統一映射爲一個指定的系統帳號,來訪問共享位置。
5》虛擬用戶賬號的存儲方式:
文件:編輯文本文件,此文件須要被編碼爲hash格式,奇數行爲用戶名,偶數行爲密碼
db_load -T -t hash -f vusers.txt vusers.db
關係型數據庫中的表中:
實時查詢數據庫完成用戶認證
mysql庫:
pam 要依賴於pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README
6》虛擬用戶的認證方式是單獨的口令庫文件(pam_userdb),有可插入式認證模塊來完成認證,使用這種方式配置更加靈活也更加的安全。
7》實現基於文件驗證的vsftpd虛擬用戶
1)建立虛擬用戶的帳號密碼的數據庫文件
a。咱們經過建立一個文本文件來記錄虛擬用戶的帳號密碼信息,格式爲:奇數行爲帳號,對應的偶數行爲對應的密碼。
vim /etc/vsftpd/vusers.txt
shen1
123456
shen2
213546
shen3
546213
b。將該文本文件轉換成二進制的數據庫文件,這裏須要藉助db4工具來實現。
yum install db4-utils -y
cd /etc/vsftpd/
db_load -T -t hash -f vusers.txt vusers.db
chmod 600 vusers.db(保證密碼文件的安全)
2)建立FTP根目錄和虛擬用戶映射的系統用戶
mkdir /var/ftproot(爲ftp的根目錄)
useradd -d /var/ftproot -s /sbin/nologin vuser(將虛擬用戶映射爲vuser)
chmod +rx /var/ftproot/
centos7 還須要執行如下操做:
chmod -w /var/ftproot/
mkdir /var/ftproot/upload
setfacl -m u:vuser:rwx /var/ftproot/upload
3)建立支持虛擬用戶的PAM認證配置文件
vim /etc/pam.d/vsftpd.db
#%PAM-1.0
# 32-bit
#auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
#account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
# 64-bit
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/login建立配置文件存放的路徑
vim /etc/vsftpd/vsftpd.conf
virtual_use_local_privs=YES 開啓虛擬用戶
user_config_dir=/etc/vsftpd/vusers.d/ 虛擬用戶的配置文件的目錄
cd /etc/vsftpd/vusers.d/ 進入此目錄
容許wang用戶可讀寫,其它用戶只讀
vim wang 建立各用戶自已的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
......
7)重啓vsftpd服務器
systemctl vsftpd restart
8)使用虛擬用戶進行測試驗證
實現基於MYSQL 驗證的vsftpd
說明:本實驗在兩臺CentOS 主機上實現,一臺作爲FTP 服務器,一臺作數據庫服務器
1、安裝所須要包和包組:
在數據庫服務器上安裝包:
Centos7 :在數據庫服務器 上 安裝
yum –y install mariadb-server mariadb
systemctl start mariadb.service
systemctl enable mariadb
Centos6 :在數據庫服務器上安裝
yum –y install mysql-server
在FTP 服務器上安裝vsftpd 和pam_mysql包
centos6:
pam_mysql由epel6 的源中提供
yum install vsftpd pam_mysql
centos7:
無對應rpm 包,需手動 編譯 安裝
yum -y groupinstall "Development Tools"
yum -y install mariadb-devel pam-devel vsftpd
下載pam_mysql-0.7RC1.tar.gz
ftp://172.16.0.1/pub/Sources/sources/pam/
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
make
make install
2、在數據庫服務器上建立虛擬用戶帳號
1. 創建存儲虛擬用戶數據庫和鏈接的數據庫用戶
mysql> CREATE DATABASE vsftpd;
mysql> SHOW DATABASES;
ftp 服務和mysql 不在同一主機:
mysql> GRANT SELECT ON vsftpd.* TO
vsftpd@'172.16.%.%' IDENTIFIED BY 'magedu';
ftp 服務和mysql 在同一主機:
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'magedu';
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu';
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 -h 172.16.200.200 -pmagedu
mysql> SHOW DATABASES;
3. 添加虛擬用戶
根據須要添加所須要的用戶,爲了安全應該使用PASSWORD函數加密其密碼後存儲
mysql>DESC users;
mysql> INSERT INTO users(name,password) values(‘wang',password('magedu'));
mysql> INSERT INTO users(name,password) values(‘mage',password('magedu'));
mysql> SELECT * FROM users;
3、在FTP 服務器上配置vsftpd 服務
1. 在FTP 服務器上創建pam 認證所需文件
vi /etc/pam.d/vsftpd.mysql 添加以下兩行
auth required pam_mysql.so user=vsftpd
passwd=magedu host=mysqlserver db=vsftpd table=users
usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd
passwd=magedu host=mysqlserver db=vsftpd table=users
usercolumn=name passwdcolumn=password crypt=2
注意:參考README 文檔,選擇正確的加密方式,crypt 是加密方式,0 表示不加密,1 表示crypt(3) 加密,2 表示使用mysql password() 函數加密,3 表示md5 加密,4 表示sha1
配置字段說明
auth 表示認證
account 驗證帳號密碼正常使用
required 表示認證要經過
pam_mysql.so 模塊是默認的相對路徑,是相對/lib64/security/路徑而言,也能夠寫絕對路徑;後面爲給此模塊傳遞的參數
user=vsftpd 爲登陸mysql 的用戶
passwd=magedu 登陸mysql 的的密碼
host=mysqlserver mysql 服務器的主機名或ip 地址
db=vsftpd 指定鏈接msyql 的數據庫名稱
table=users 指定鏈接數據庫中的表名
usercolumn=name 當作用戶名的字段
passwdcolumn=password 當作用戶名字段的密碼
crypt=2 密碼的加密方式爲mysql password() 函數加密
2. 創建相應用戶和修改vsftpd 配置文件,使其適應mysql認證,創建虛擬用戶映射的系統用戶及對應的目錄
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod 555 /var/ftproot centos7 需除去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
4、啓動vsftpd 服務
service vsftpd start;systemctl start vsftpd
chkconfig vsftpd on;systemctl enable vsftpd
查看端口開啓狀況
netstat -tnlp |grep :21
5、Selinux 相關設置:在FTP 服務器上執行
restorecon -R /lib64/security
setsebool -P ftpd_connect_db 1
setsebool -P ftp_home_dir 1
chcon -R -t public_content_rw_t /var/ftproot/
六 、測試:利用FTP 客戶端工具,以 以 虛擬用戶登陸驗證結果
tail /var/log/secure
7、在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 wang mage
3 、配置虛擬用戶的訪問權限
虛擬用戶對vsftpd 服務的訪問權限是經過匿名用戶的相關指令進行的。若是須要讓用戶wang 具備上傳文件的權限,能夠修改/etc/vsftpd/vusers_config/wang 文件,在裏面添加以下選項並設置爲YES 便可, 只讀則設爲NO
注意:需確保 對應的映射用戶對於文件系統有寫 權限
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}