File Transfer Protocol

#####################################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測試

相關文章
相關標籤/搜索