CentOS6.3+vsftpd+mysql+pam_mysql實現虛擬用戶管理的ftp服務器
本文大部分內容學習自中國最大的Linux培訓機構“馬哥教育”www.magedu.com
一、準備相關軟件以及開發環境
1、安裝vsftpd mysql-server mysql-devel pam-devel
# yum -y install vsftpd mysql-server mysql-devel pam-devel
# yum -y groupinstall "DevelopmentTools"
2、編譯安裝pam_mysql認證模塊(庫)
先下載pam_mysql:
#wget https://sourceforge.net/projects/pam-mysql/files/latest/download?source=typ_redirect --no-check-certificate
編譯安裝pam_mysql
# tar -xf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr
# make
# make install
二、創建虛擬用戶帳號
1、準備數據庫及表
啓動mysqld
# service mysqld start
#mysql
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to'vsftpd'@'localhost' identified by 'vsftpd123';
mysql> grant select on vsftpd.* to'vsftpd'@'127.0.0.1' identified by 'vsftpd123';
mysql> flush privileges;
mysql> use vsftpd;
mysql> CREATE TABLE users (id INT AUTO_INCREMENTNOT NULL,
-> nameCHAR(20) BINARY NOT NULL,
->password CHAR(64) BINARY NOT NULL,
-> PRIMARY KEY(id));
2、添加虛擬用戶
根據具體情況添加用戶,由於pam_mysql的password()函數與MySQL的password()函數算法可能不太相同,此處使用明文密碼。有興趣的可以測試其它加密方式,如md5
mysql> inser tinto users(name,password) values ('user1','user123'),('user2','user123');
3、測試mysql的用戶及表是否有效
# mysql -uvsftpd-p
mysql> showdatabases;
+--------------------+
| Database |
+--------------------+
|information_schema |
| test |
| vsftpd |
+--------------------+
3 rows in set(0.00 sec)
mysql> usevsftpd;
mysql> select *from users;
+----+-------+----------+
| id | name | password |
+----+-------+----------+
| 1 | user1 | user123 |
| 2 | user2 | user123 |
+----+-------+----------+
2 rows in set(0.00 sec)
以上結果證明,數據庫是正常可用的。
三、配置vsftpd
1、建立pam認證文件
# vim /etc/pam.d/vsftpd.mysql
添加以下兩行
auth required /lib/security/pam_mysql.so user=vsftpdpasswd=vsftpd123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
內容解釋:
auth 權限認證
required 必需通過認證
/lib/security/pam_mysql.so調用庫文件
user=vsftpd 登錄數據庫用戶名
passwd=vsftpd123 登錄數據庫密碼
host=localhost 數據庫主機地址,此處表示本機
db=vsftpd 數據庫名稱
table=users 用戶帳號的表名
usercolumn=name 用戶名字段
passwdcolumn=password 密碼字段
crypt=0 表示密碼的加密方式,0爲明文,2爲password函數加密
2、修改vsftpd.conf文件
# vim/etc/vsftpd/vsftpd.conf
請確保/etc/vsftpd.conf中已經啓用了以下選項
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
而後添加以下選項
guest_enable=YES
guest_username=ftpuser
並確保pam_service_name選項的值如下所示
pam_service_name=vsftpd.mysql
然後添加虛擬用戶所需要映射的系統用戶ftpuser
# useradd -s/sbin/nologin -d /home/ftp ftpuser #沒有系統登錄權限,家目錄爲ftp
# chmod go+rx/home/ftp #添加其它用戶組的權限爲讀執行
四、啓動服務
# service vsftpd start
# chkconfig vsftpd on
登錄測試:ftp://IP
可以用各種ftp客戶端測試,包括瀏覽器,windows的資源管理器(我的電腦)
注意關閉iptabes或者添加策略。
五、配置虛擬用戶具有不同的訪問權限
vsftpd可以在配置文件目錄中爲每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,只需要在vsftpd.conf指定其路徑及名稱即可。
1、配置vsftpd爲虛擬用戶使用配置文件目錄
# vim vsftpd.conf
添加如下選項
user_config_dir=/etc/vsftpd/vusers_config
2、創建所需要目錄,併爲虛擬用戶提供配置文件
# mkdir/etc/vsftpd/vusers_config/
# cd /etc/vsftpd/vusers_config/
# touch user1user2
3、配置虛擬用戶的訪問權限
虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。比如,如果需要讓user1用戶具有上傳文件的權限,可以修改/etc/vsftpd/ vusers_config/user1文件,在裏面添加如下選項即可。
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
六、vsftpd基礎知識
vsftpd:
/etc/vsftpd 配置文件目錄
/etc/init.d/vsftpd服務腳本
/usr/sbin/vsftpd主程序
/var/ftp 默認的數據文件目錄,ftp根目錄不能有寫權限,可建立子目錄
支持虛擬用戶(基於PAM實現用戶認證)
PAM的主要文件
/etc/ram.d/配置文件目錄
/lib64/security/庫文件目錄
ftp用戶類型
系統用戶
匿名用戶--> 映射到系統用戶
虛擬用戶 --> 映射到系統用戶
默認情況下,如果允許系統用戶直接登錄,則其能切到大部分系統其它目錄,而且還是明文傳輸的,這是非常危險的。
上傳下載
/var/ftp ftp用戶的家目錄
匿名用戶訪問目錄
文件服務權限=文件系統權限+文件共享權限
/etc/vsftpd/vsftpd.conf配置文件解釋
anonymous_enable=YES 匿名用戶,默認支持
local_enable=YES 系統用戶,默認支持
write_enable=YES 系統用戶上傳文件,默認支持
anon_upload_enable=YES 匿名用戶上傳,默認禁止
anon_mkdir_write_enable=YES 匿名用戶創建目錄,默認禁止
anon_other_write_enable=YES 匿名用戶刪除文件,默認禁止
dirmessage_enable=YES 在目錄下建立.message文件寫提示內容
xferlog_enable=YES 記錄傳輸日誌
xferlog_std_format=YES 傳輸日誌標準格式,最好禁止
xferlog_file=/var/log/xferlog 記錄傳輸日誌的目錄
idle_session_timeout=600 會話連接超時時間,單位秒,默認禁止
chroot_list_enable=YES 禁固用戶只能在家目錄活動
chroot_list_file=/etc/vsftpd/chroot_list 禁固用戶列表文件,手動創建
chroot_local_user=YES 禁固所有用戶只能在家目錄活動,默關
listen=YES 把FTP服務定義爲獨立守護進程
守護進程:
獨立守護進程:適用用戶量比較大,會話時間長
瞬時守護進程:由xinetd代爲管理
pam_service_name=vsftpd pam管理的配置文件,目錄/etc/pam.d/vsftpd
userlist_enable=YES 啓用/etc/vsftpd/user_list文件
userlist_deny=YES 禁止/etc/vsftpd/user_list文件用戶登錄
guest_enables=YES 支持虛擬用戶
guest_username=vuser 虛擬用戶所映射到的系統用戶名
max_clients vsftpd服務同時最大支持的連接用戶數
max_per_ip 每個IP同時支持的最大連接用戶數