FTP服務器的建立
Packages:vsftpd.i386
Daemon:vsftp(/usr/sbin/vsftpd)
Script:/etc/init.d/vsftpd
ports:21/tcp(ftp),20/tcp(ftp-data)
Configuration:
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/ftpusers
/etc/pam.d/vsftpd
在Linux中,有好幾種實現ftp服務器的軟件,我們這裏使用redhat自帶的vsftp,它具有安全,輕量級的特性。
我們安裝vsftpd包後開啓服務,ftp即可訪問:
yum –y install vsftpd.i386
service vsftpd start
啓動服務我們就可以直接訪問ftp服務器了
ftp的根目錄位於/var/ftp/我們可以在這裏建立目錄
使用本地用戶登錄時,登錄到得目錄是用戶的家目錄
比如lftp –u zoe 192.168.0.3
登錄後顯示的就是/home/zoe目錄中的內容
在這裏我們主要介紹三方面內容:
1 ftp的各種配置(通過配置文件)
2 基於ssl的安全ftp
3 關於ftp虛擬用戶的建立
我們先認識一下vsftp的主配置文件/etc/vsftpd/vsftpd.conf
anonymous_enable=YES 是否允許用戶匿名登錄
local_enable=YES 是否允許本地用戶登錄
anon_upload_enable=YES允許用戶上傳文件
anon_mkdir_write_enable=YES允許上傳目錄
anon_other_write_enable=YES匿名用戶刪除文件的權限
dirmessage_enable=YES用戶訪問某個目錄是是否顯示歡迎信息
message_file=.message在用戶家目錄下建立一個.message文件,裏面寫上歡迎信息
xferlog_enable=YES 打開傳輸日誌
xferlog_file=/var/log/vsftpd 開啓傳輸日誌,定義位置
chown_loads=YES文件上傳後是否把屬主改成別的用戶
chown_username=whoever 把屬主改成誰的
idle_session_timeout=600空閒會話超時時間
data_connection_timeout=120下載超時時間
ascii_upload_enable=YES是否打開基於ascii的傳輸,一般不建議打開
ftpd_banner=Welcome to blah FTP service 歡迎信息
chroot_local_user=YES將用戶鎖定到家目錄下
如果不使用此項,用戶登錄後可以cd到ftp服務器所在主機的任一目錄進行查看
chroot_list_enable=YES 將下行定義的列表中的用戶鎖定只能訪問其家目錄
chroot_list_file=/etc/vsftpd/chroot_list 定義列表文件位置
chroot_local_user=YES鎖定所有
ls_recurse_enable=YES使用ls命令時是否使用遞歸顯示
listen=YES listen是否是獨立守護
pam_service_name=vsftpd用戶登錄模式的驗證方法定義文件
userlist_enable=YES 使用 user_list定義次文件中的用戶可以登錄
userlist_deny=N0 表示僅允許user_list文件中的用戶登錄
或者是 userlist_deny=YES 表示僅拒絕user_list文件中的用戶登錄
默認爲拒絕
tcp_wrappers=YESftp是否接受tcp_wrapper的控制
定義在/etc/vsftpd/ftpusers中的用戶都似乎不允許登錄ftp的
參照上列信息,我們可以更改配置文件以使ftp服務器達到我們的要求,這裏就不再舉例,就說一下幾個ftp命令:
Lftp –u fedora 192.168.0.3 使用哪個用戶身份登錄
ftp>put issue 上傳issue文件
我們要匿名用戶上傳文件,則需要目錄爲ftp:ftp屬主屬組
爲了安全,我們這樣做
mkdir /var/ftp/upload
chown ftp:ftp /var/ftp/upload
上傳文件時cd到該目錄即可
lftp 192.168.48.3
>cd /upload
>lcd /etc
>put issue
>bye
我們需要關閉selinux,才能使用戶上傳文件等,那麼,我們可以可以不關閉selinux實現用戶上傳等功能呢?當然是可以的,我們主需要更改selinux策略中的選項以支持用戶上傳。
getsebool -a 顯示當前主機上所有策略支持的布爾類型的值
進行一些修改:
setsebool allow_ftpd_anon_write=1 僅對當前系統生效
或者是 setsebool -P allow_ftpd_anon_write=1 直接修改了策略庫中的值,永久生效
cd /var/ftp/
ll -Z
chcon -t public_content_rw_t upload/ 爲該目錄添加讀寫權限
這樣selinux就支持了ftp的此項功能
-------------------------------------------SSL
我們登錄ftp時的密碼都是明文登錄的,這樣極不安全,所以我們可以使用基於ssl的ftp登錄傳輸方式。
首先我們要爲ftp簽署證書;再在配置文件中添加下列內容
# SSL
ssl_enable=YES 啓用ssl
ssl_tlsv1=YES 啓用tls v1版本
ssl_sslv2=YES 啓用ssl v2版本
ssl_sslv3=YES
allow_anon_data_ssl=NO 匿名用戶一般不需要
force_local_data_ssl=YES本地用戶傳輸時是否使用ssl
force_local_logins_ssl=YES本地用戶登錄時是否使用ssl
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt 證書路徑
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key私鑰路徑
然後使用window端的ftp軟件進行測試,例如Flashfxp
在登錄過程中,我們可以捕獲數據包進行分析,看使用ssl前後的登錄過程中,密碼有否被加密。
捕獲數據的簡單方法:tcpdump -i eth0 A dst host 192.168.0.3
在哪個主機上執行此命令都可以,要注意網卡是否選對。
tcpdump -D 顯示網卡列表
tcpdump -i eth0 指定監聽的網卡
A 以純文本顯示首部信息
dst host IP 目標地址IP
src host IP 源地址IP
-------------------------------------------------虛擬用戶的建立實例:
1 建立虛擬FTP用戶的賬號數據庫文件
2 創建FTP根目錄及虛擬用戶映射的系統用戶
3 建立支持虛擬用戶的PAM認證文件
4 在vsftpd.cong文件中添加支持配置
5 在個別虛擬用戶建立獨立的配置文件以實現權限訪問
6 重啓vsftpd服務
1
vim /etc/vsftpd/vusers.list
+>gentoo
+>123
+>fedora
+>456
yum -y install db4-utils 安裝db工具軟件包
db_load -T -t hash -f vusers.txt vuser.db 將此文件轉換成二進制
chown 600 vusers.list
2
mkdir /var/ftproot
useradd -d /var/ftproot -s /sbin/nologin vuser不允許登錄系統爲了安全
chmod 755 /var/ftproot/
chown vuser:vuser /vat/ftproot
3
vim /etc/pam.d/vsftpd.vuser
+>auth required pam_userdb.so db=/etc/vsftpd/vusers
+>account required pam_userdb.so db=/etc/vsftpd/vumsers
定義認證時使用哪一個模塊到哪裏找用戶的賬號
4
vim /etc/vsftpd/vsftpd.conf
+>guest_enable=YES 是否啓用是否啓用來賓賬號和虛擬用戶
+>guest_username=vuser 虛擬用戶的用戶名是什麼
+>pam_service_name=vsftpd.vuser 定義我們剛纔建立的vsftpd.vuser文件
5
vim /etc/vsftpd/vsftpd.conf
+>user_config_dir=/etc/vsftpd/userconfig
mkdir /etc/vsftpd/userconfig
cd /etc/vsftpd/userconfig
vim fedora
+>anon_upload_enable=NO
+>anon_mkdir_write_enable=YES
禁止fedora用戶傳文件,允許建立目錄
6
service vsftpd restart 重啓完成
啓用虛擬用戶後本地用戶將無法實現
以後我們會將兩者兼用的方法