文件共享服務
應用層:ftp
內核:NFS
跨平臺:samba
在linux實現CIFS(SMB)協議
RPC:遠程過程調用(主要功能,讓位於不同主機上的倆個進程能夠基於二進制格式進行數據通信)
ftp :(基於RPC的文件共享服務)(明文傳輸)工作於應用層
ftp協議服務端與客戶端交互時有倆種連接:(允許併發連接)
命令連接:文件管理類命令,始終在線的連接
數據連接:數據傳輸,按需創建及關閉的連接
數據傳輸格式(使用何種格式傳輸,由客戶端和服務器自行協商):
文本傳輸
二進制傳輸
主動模式(Active FTP):由服務器創建連接
命令連接:
客戶端:隨機端口 --->服務端:21端口
客戶端向服務器端發送用來建立數據連接的高位端口號
數據連接:
服務端:20/tcp--->客戶端:隨機端口
服務器的20端口僅僅負責建立數據連接,真正傳輸數據的是其他隨機端口,20端口只是個監聽套接字,連接套接字是隨機的
被動模式(Passive FTP):由客戶端創建連接
命令連接:
客戶端:隨機端口 --->服務端:21端口
數據連接:(服務端此時使用的端口,已經在命令連接中通知給客戶端)
客戶端:隨機端口--->服務端:隨機端口
(服務器防火牆通過連接追蹤功能放行服務器使用的隨機端口)
ftp協議中定義的典型消息,用來判斷問題:
125:數據連接打開,傳輸開始
200:命令OK
226:數據傳輸完畢
331:用戶名OK,需要輸入密碼
425:不能打開數據連接
426:數據連接被關閉,傳輸被中斷
452:錯誤寫文件
500:語法錯誤,不可識別的命令
530:未登入
vsftp (支持虛擬用戶,基於PAM實現用戶認證)
/etc/vsftpd 配置文件目錄
/etc/vsftpd/vsftpd.conf 配置文件
/etc/init.d/vsftpd 啓動腳本
/usr/sbin/vsftpd 主程序
針對系統賬號來給予阻擋的配置文件:
/etc/vsftpd/ftpusers:PAM模塊的阻擋訪問設置項目
/etc/vsftpd/user_list:vsftpd自定義的阻擋訪問項目
vsftpd受Selinux控制
基於PAM實現用戶認證:(PAM:可插入式認證模塊)
/etc/pam.d/*
/lib64/security/*
支持虛擬用戶
/var/ftp vsftp根目錄(不允許除root用戶外其他用戶擁有寫權限)
匿名用戶訪問目錄
/var/ftp/pub 存儲公開數據
ftp用戶:
匿名用戶(anonymous 匿名用戶登錄也需輸入匿名用戶用戶名 anonymous )
系統用戶
/var/ftp/系統用戶名 系統用戶家目錄
虛擬用戶(訪客身份)(被映射爲ftp用戶)
(匿名用戶,虛擬用戶最終都要映射爲某系統用戶)
vsftpd常用配置
/etc/vsftpd/vsftpd.conf
anonymous_enable=YES 是否允許匿名用戶登錄(ftp和anonymous倆個名稱都被認爲是匿名用戶)
local_enable=YES 是否啓用系統用戶登錄
write_enable=YES 系統用戶是否可以上傳文件
anon_upload_enable=YES 匿名用戶是否要上傳文件
某用戶是否可以能在ftp服務器上上傳文件,除了要看是否具有上傳文件的權限嘛,還要看用戶是否對相應目錄具有寫權限。
(文件服務權限和文件共享權限的交集)
connect_from_port_20=YES ftp爲主動模式時(由服務器創建數據連接),服務器使用默認的20號端口
anon_mkdir_write_enable=YES 匿名用戶是否可以創建目錄
anon_other_write_enable=YES 匿名用戶是否擁有其他寫權限(刪除權限)
anon_world_readable_only=YES 僅允許匿名用戶具有下載可讀文件的權限
anon_upload_enable=YES 是否允許匿名用戶具有上傳數據的權限(如果允許則anon_other_write_enable=YES必須設置)
anon_umask=077 匿名用戶上傳文件的權限
no_anon_password=YES 匿名用戶是否可以免密登錄
dirmessage_enable=YES 當用戶進入一個目錄時是否顯示歡迎信息(在相應目錄下創建.message文件,在.message文件裏編輯歡迎信息)
xferlog_enable=YES 是否打開傳輸日誌
xferlog_file=/var/log/xferlog 傳輸日誌存放路徑
chown_uploads=YES 用戶上傳文件後是否將用戶上傳的文件的屬主改爲其他用戶
chown_username=whoever 改爲那個用戶
idle_session_timeout=600 用戶會話超時時間
userlist_enable=YES 是否允許/etc/vsftpd/user_list 文件生效,阻擋指定的用戶訪問ftp服務器
userlist_deny=YES|NO 如爲YES則 /etc/vsftpd/user_list 爲黑名單 如爲NO 則/etc/vsftpd/user_list爲白名單
chroot_list_enable=YES 是不是用一個文件將特定用戶鎖在家目錄下
chroot_list_file=/etc/vsftpd/chroot_list 將用戶鎖定在家目錄下的用戶列表文件存放路徑
chroot_local_user=YES 將所有用戶禁錮在家目錄下(此命令如生效則 chroot_list_file=/etc/vsftpd/chroot_list 無效 )
listen=YES 是否將vsftpd運行爲一個獨立守護進程
守護進程:
獨立守護進程
瞬時守護進程(由xinetd代爲管理)
pam_service_name=vsftpd pam配置文件名字
資源訪問控制
max_clients=xx 最多允許多少用戶同時訪問ftp服務
max_per_ip=xx 每個IP最同時多可以發起多少連接
idle_session_timeout=xxx 空閒的用戶會話在空閒多久後中斷(單位秒)
date_connection_timeout=xxx 空閒的數據連接在空閒多久後中斷(單位秒)
設置客戶端空閒時的自動中斷和激活連接的時間
accept_timeout=xx 客戶端空閒多長時間後中斷連接
connect_timeout=xx 客戶端中斷多長時間後自動激活連接
設置客戶端連接時的端口範圍:
pasv_min_port=xxxx
pasv_max_port=xxxx
虛擬用戶相關設置
guest_enable=YES 是否允許使用虛擬用戶
guest_username=xxx 指定虛擬用戶映射的系統賬戶
是否支持TCP_Wrappers的防火牆機制
tcp_wrappers=YES
ftp服務的安全通信方式:
ftps:ftp+ssl/tls
sftp:openssh的一個子系統,基於ssh來實現
ftps安全通信相關設置:
ssl_enable=YES 是否允許客戶端使用ssl連接
ssl_sslv2=NO 是否允許使用ssl2進行連接
ssl_sslv3=NO 是否允許使用ssl3進行連接
ssl_tlsv1=YES 是否允許使用tls1進行連接(推薦使用)
allow_anon_ssl=NO 是否允許匿名用戶使用ssl連接
force_local_data_ssl=YES 是否強制非匿名用戶必須使用ssl連接發送和接收數據
force_local_logins_ssl=YES 是否強制非匿名用戶登錄時必須使用ssl連接
rsa_cert_file=xxxx 用於SSL連接的RSA證書文件位置
rsa_private_key_file=xxx 用於SSL連接的RSA私鑰文件的位置,(none)表示私鑰文件就存放於證書文件中
vsftpd虛擬用戶
虛擬用戶和本地用戶不可以同時存在
傳統的 FTP 服務器採用如下的方法實現虛擬用戶:
在本地建立普通用戶賬號並設置密碼
將其登錄 shell 設爲不可登錄
由 passwd/shadow 口令系統進行認證
特別提醒,在vsftpd的設置中,必須把local_enable=YES 打開才能設置虛擬用戶登錄
所有虛擬用戶都會統一映射爲一個指定的系統賬號:訪問的共享位置既爲此係統賬號的家目錄
各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定
虛擬用戶賬號的存儲方式:
文件:編輯文本文件,此文件需要被編碼爲hash格式
奇數行爲用戶名,偶數行爲密碼
基於文件驗證的vsftpd虛擬用戶
1.創建用戶數據庫文件
a. 創建用戶文件
vim /etc/vsftpd/vusers.txt
格式:
用戶名
密碼
...
b. 進入到相應目錄下
cd /etc/vsftpd
c. 使用 db_load 命令生成口令庫文件
db_load -T -t hash -f vusers.txt vusers.db
d. 修改修改口令庫文件權限
chmod 600 vusers.db
2.創建虛擬用戶映射的系統用戶和訪問FTP目錄
a.創建系統用戶並指定家目錄
useradd -d /var/ftproot -s /sbin/nologin vuser #創建系統用戶vuser 家目錄爲/var/ftproot且不允許登錄(ftproot目錄會自動創建)
b.修改家目錄權限
chmod +rx /var/ftproot
c.pam配置文件,編輯生成虛擬用戶所需的 PAM 配置文件
創建vsftpd的pam模塊的配置文件,/etc/pam.d/vsftpd.db 讓vsftpd支持pam模塊進行驗證
在/etc/pam.d/vsftpd.db中添加以下內容:
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
3.修改vsftpd配置文件/etc/vsftpd/vsftpd.conf 給vsftpd指定pam模塊
添加以下內容:
guest_enable=YES #允許虛擬用戶登錄
guest_username=vuser #將虛擬用戶映射問本地vuser用戶
pam_service_name=vsftpd.db # /var/pam.d目錄下的 關於vsftpd的配置文件
4. 爲虛擬用戶建立獨立的配置文件
a.修改vsftpd配置文件/etc/vsftpd/vsftpd.conf ,爲虛擬用戶指定配置文件的存儲路徑
添加以下內容:
user_config_dir=/etc/vsftpd/vusers.d/
b.在/etc/目錄下創建虛擬用戶的目錄
mkdir /etc/vsftpd/vusers.d/
c.進入到虛擬用戶的目錄中/etc/vsftpd/vusers.d/ 創建與虛擬用戶同名的配置文件
將下面的內容寫入配置文件中,就可以進行權限控制
#虛擬用戶的上傳權限
anon_upload_enable=YES
# 虛擬用戶創建文件夾的權限
anon_mkdir_write_enable=YES
#虛擬的其他用戶對指定用戶目錄的寫權限
anon_other_write_enable=YES
虛擬用戶的權限注意事項:
當一個虛擬用戶登錄 FTP 服務器時,vsftpd 的守護進程首先
查看主配置文件的權限配置,然後再用此用戶單獨的配置文件
中的配置覆蓋主配置文件中的配置。
vsftpd 的這種配置機制,類似於 Apache 配置中的 httpd.conf
和.htaccess。只不過前者是針對不同虛擬用戶的,而後者是針
對不同目錄的。
因此在對不同虛擬用戶進行配置時要注意:
(1)在主配置文件中設置最低的權限,這些設置對虛擬用戶
口令庫中的所有用戶均生效;
(2)分別在不同的虛擬用戶的配置文件中開放此虛擬用戶應
該具有的權限。
關係型數據庫的表中:
實時查詢數據庫完成用戶認證:
mysql庫:pam要依賴於pam-mysql插件
ftp支持倆種安全通信方式:
ftps:ftp+ssl/tls
sftp:基於ssh的安全傳輸功能
ftps的配置過程:
一、創建私有CA:
在確定配置爲CA的服務器上生成一個自簽證書,併爲CA提供所需要的目錄及文件即可;
1.爲CA提供所需的目錄及文件:
mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
touch /etc/pki/CA/{serial,index.txt}
echo ca序列號 > /etc/pki/CA/serial
2.生成私鑰(生成的私鑰存放於openssl配置文件中配置的目錄)
(umask 077; openssl genrsa -out private/cakey.pem 2048)
3.生成自簽證書
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
( -new 生成新證書籤署請求
-x509 生成自籤格式證書(專用於創建私有CA使用)
-key 生成請求時用到的私鑰文件路徑
-out 生成的證書文件路徑,如果是自籤操所將直接生成簽署過的證書
-days 證書的有效時長(單位天)
)
(自己向自己申請自簽證書則使用-x509選項)
輸入國家代碼
輸入地區代碼
輸入城市代碼
輸入企業代碼
輸入部門代碼
輸入主機名或個人名
輸入管理員名
二、爲vsftpd請求CA
1.創建存放CA的目錄
mkdir /etc/vsftpd/ssl
2.進入CA目錄,生成私鑰
(umask 077; openssl genrsa -out vsftpd.key 2048)
3.生成證書籤署請求
openssl req -new -key vsftpd.key -out vsftpd.csr -days 360
輸入國家代碼
輸入地區代碼
輸入城市代碼
輸入企業代碼
輸入部門代碼
輸入主機名或個人名
輸入管理員名
4.編輯openssl配置文件
修改CA工作目錄爲:
dir = /etc/pki/CA
4.簽署CA(在/etc/vsftpd/ssl 目錄下執行)
openssl ca -in vsftpd.csr -out vsftpd.crt -days 360
5.編輯vsftpd配置文件,使vsftpd可以使用ssl
添加以下內容:
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv3=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt CA證書位置
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key 私鑰文件路徑
6.重啓vsftpd服務
源碼安裝vsftpd:
1.下載vsftpd
http://vsftpd.beasts.org/
2.備份vsftpd配置文件
3.
//進入存放 vsftpd 源代碼的目錄
# cd /usr/local/src
# ls
vsftpd-1.1.3.tar.gz
//解包
# tar -zxvf vsftpd-1.1.3.tar.gz
# cd vsftpd-1.1.3
//編譯 vsftpd
# make
//查看是否編譯成功
# ls -l vsftpd
-rwxr-xr-x 1 root root 65996 3 月 12 18:56 vsftpd
//安裝 vsftpd
# make install
//安裝過程執行了如下操作
// cp vsftpd /usr/local/sbin/vsftpd
// cp vsftpd.conf.5 /usr/local/man/man5
// cp vsftpd.8 /usr/local/man/man8
// cp xinetd.d/vsftpd /etc/xinetd.d/
#
//複製默認配置文件到/etc 目錄
# cp vsftpd.conf /etc
//複製本地用戶所需的 PAM 配置文件
# cp RedHat/vsftpd.pam /etc/pam.d/ftp
//重新啓動 xinetd
# service xinetd restart
//安裝結束
高安全級別匿名 FTP 服務器的配置要求
. 僅僅允許匿名用戶訪問
. 不允許本地用戶訪問
. 關閉所有寫權限
. 不允許匿名用戶上傳
. 設置客戶端連接時的端口範圍
. 設置 匿名用戶的最大傳輸速率限制
. 設置空閒的數據連接的的中斷時間
. 設置客戶端空閒時的自動中斷和激活連接的時間
. 配置每個主機的最大連接數
. 配置總的併發連接數
. 配置禁止訪問的主機
. 配置安全日誌