#####################################mysql
FTP簡介sql
vsftpd基本使用數據庫
明文傳輸帶來的安全隱患vim
安全通訊方式安全
vsftpd + PAM + mysql實現虛擬用戶bash
#####################################
服務器
FTP簡介
session
文件傳輸服務位於應用層,監聽21/tcp端口,數據傳輸模式爲自適應,沒有交叉編碼能力Mine,遵循原文件自己格式,基於TCP協議實現,它有兩個鏈接,命令鏈接和數據鏈接,它的工做模式有兩種,主動模式和被動模式。app
主動模式tcp
被動模式
vsftpd基本使用
特性
文件服務權限等於文件系統權限和文件共享權限的交集
支持虛擬用戶
家目錄在/var/ftp目錄下,/目錄被鎖定爲其家目錄
支持匿名用戶
支持系統用戶
家目錄目錄在/home/username目錄下,/目錄沒有鎖定,能夠切換 lcd
支持基於PAM實現用戶認證
安裝
yum install vsftpd service vsftpd start chkconfig vsftpd on /etc/vsftpd 配置文件 /etc/init.d/vsftpd 服務腳本 /usr/sbin/vsftpd 守護進程 /etc/pam.d/* 配置文件 /lib/security 認證模塊 /var/ftp 文件目錄,不容許除root用戶以外的其餘用戶具備寫權限
經常使用選項
anonymous_enable=YES 啓用匿名用戶anonymous local_enable=YES 啓用系統用戶 write_enable=YES 開啓寫入 anon_upload_enable=YES 開啓上傳 anon_mkdir_write_enable=YES 開啓目錄建立 anon_other_write_enable=YES 開啓其餘寫權限,例如delete等…… dirmessage_enable=YES 開啓目錄進入歡迎提示 vim /var/ftp/upload/.message 當用戶切換到此目錄時候會顯示 xferlog_enable=YES 開啓傳輸日誌 xferlog_file=/var/log/vsftpd.log 定義傳輸日誌存儲位置和名稱 #chown_uploads=YES 是否開啓修改用戶上傳以後修改用戶屬主 #chown_username=whoever 修改成誰? #idle_session_timeout=600 命令鏈接超時時間 #data_connection_timeout=120 數據鏈接超時時間 #ascii_upload_enable=YES 文本模式上傳 #ascii_download_enable=YES 文本模式下載 chroot_list_enable=YES 禁錮用戶至本身家目錄 chroot_list_file=/etc/vsftpd/chroot_list經過用戶列表禁錮那些用戶 #chroot_local_user=YES 禁錮全部用戶至本身家目錄,須要註釋上面兩項 listen=YES vsftpd是否工做爲一個獨立守護進程類型; 獨立守護進程適合於 (訪問量大,在線時間長的服務) 瞬時守護進程 (訪問量比較小,在線時間不長的服務) pam_service_name=vsftpd 基於pam的認證 /etc/vsftpd/ftpusers (文件中用戶不能登陸,清空/etc/vsftpd/user_list後才真正由此文件控制) userlist_enable=YES 文件的用戶不容許登陸(/etc/vsftpd/user_list) userlist_deny=NO 僅容許文件中的用戶能夠登陸(/etc/vsftpd/user_list) tcp_wrappers=YES max_clients 最多容許幾個IP訪問 max_per_ip 一個IP最多幾個請求
舉例:讓匿名用戶能夠上傳文件
anon_upload_enable=YES 開啓 mkdir /var/ftp/upload setfacl -m u:ftp:rwx /var/ftp/upload/ getfacl /var/ftp/upload/
明文傳輸帶來的安全隱患
使用客戶端鏈接FTP服務器
在服務器端使用tcpdum命令抓包
tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 192.168.1.30
安全通訊方式
ftps:ftp+ssl/tls
sftp:OpenSSH,SubSystem,sftp(SSH)
建立私有CA
cd /etc/pki/CA mkdir certs newcerts crl echo 01 > serial (umask 077;openssl genrsa -out private/cakey.pem 2048)建立私鑰 openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650生成自簽證書
生成證書頒發請求並簽署
mkdir /etc/vsftpd/ssl cd /etc/vsftpd/ssl (umask 077; openssl genrsa -out vsftpd.key 2048;) 生成私鑰 openssl req -new -key vsftpd.key -out vsftpd.csr 生成證書頒發請求 openssl ca -in vsftpd.csr -out vsftpd.crt 簽署證書
修改配置文件etc/vsftpd/vsftpd.conf支持ssl、tsl功能
# ssl or tls ssl_enable=YES ssl_sslv3=YES ssl_tlsv1=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key
客戶端軟件登錄
本文中使用FlashFXP做爲FTP客戶端
點擊鏈接
成功鏈接
在服務器端抓包發現是明文
tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 192.168.1.30
vsftpd + PAM + mysql實現虛擬用戶
1、安裝所須要程序
事先安裝好開發環境和mysql數據庫;
yum -y install mysql-server mysql-devel yum -y groupinstall "Development Tools" "Development Libraries"
安裝pam_mysql-0.7RC1
tar zxvf pam_mysql-0.7RC1.tar.gz cd pam_mysql-0.7RC1 ./configure --with-mysql=/usr --with-opensslrpm包的mysql make make install
安裝vsftpd
yum -y install vsftpd
2、建立虛擬用戶帳號
準備數據庫及相關表,首先請確保mysql服務已經正常啓動。然後,按須要創建存儲虛擬用戶的數據庫便可,這裏將其建立爲vsftpd數據庫。
mysql> create database vsftpd; mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'vsftpd'; mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'vsftpd'; mysql> flush privileges; mysql> use vsftpd; mysql> create table users ( -> id int AUTO_INCREMENT NOT NULL, -> name char(20) binary NOT NULL, -> password char(48) binary NOT NULL, -> primary key(id) -> );
添加測試的虛擬,用戶pam_mysql的password()函數與MySQL的password()函數可能會有所不一樣。
insert into users (name,password) value ('bob','123'),('tom','321'),('lucy','333');
3、配置vsftpd
創建pam認證所需文件vi /etc/pam.d/vsftpd.mysql
auth required /usr/lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0 account required /usr/lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
修改vsftpd的配置文件,使其適應mysql認證,創建虛擬用戶映射的系統用戶及對應的目錄
useradd -s /sbin/nologin -d /var/ftproot vuser chmod go+rx /var/ftproot
請確保/etc/vsftpd.conf中已經啓用瞭如下選項
anonymous_enable=YES local_enable=YES write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=NO chroot_local_user=YES
修改成NO,驗證不經過SSL
force_local_data_ssl=NO force_local_logins_ssl=NO
然後添加如下選項
guest_enable=YES 啓用來賓用戶 guest_username=vuser 來賓用戶爲
並確保pam_service_name選項的值以下所示
pam_service_name=vsftpd.mysql
4、啓動vsftpd服務並測試
啓動服務
service vsftpd start chkconfig vsftpd on 自動啓動
查看端口開啓狀況
netstat -tnlp |grep :21
查看數據庫
FTP客戶端工具登陸驗證pam是否生效
5、配置虛擬用戶具備不一樣的訪問權限
爲虛擬用戶使用配置文件目錄
vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers_dir
建立所須要目錄,併爲虛擬用戶提供配置文件
mkdir /etc/vsftpd/vusers_dir/ touch /etc/vsftpd/vusers_dir/bob /etc/vsftpd/vusers_dir/tom
配置虛擬用戶的訪問權限;全部虛擬用戶的家目錄爲/var/ftproot;全部的虛擬用戶映射到vuser中,而vuser屬於匿名用戶,所以虛擬用戶的訪問權限是經過匿名用戶指令生效的。
bob能夠上傳、建立、刪除
vim /etc/vsftpd/vusers_dir/bob anon_upload_enable=YES (配置文件中已經開啓,這裏不寫也能夠) anon_mkdir_write_enable=YES anon_other_write_enable=YES
tom不能夠上傳
vim /etc/vsftpd/vusers_dir/tom anon_upload_enable=NO
lucy能夠上傳
主配置文件中匿名上傳已啓用anon_upload_enable=YES,因此不須要作任何修改
bob測試
tom測試
lucy測試