vsftp認證之pam_mysql

   vsftpd分爲3種用戶,分別爲匿名用戶、系統用戶和虛擬用戶;
    虛擬用戶通常指的就是非系統用戶,登錄ftp時需要提供用戶帳號和密碼,而帳號和密碼存放在何處決定用戶是否爲系統用戶,通常系統用戶是通過pam_unix.so模塊查找/etc/passwd和/etc/shadow中的帳號和密碼來認證用戶的,通過/etc/pam.d/system-auth來實現認證。
    對於在互聯網上公開的服務來說把我們的系統用戶開放出去是很危險的,如果我們想讓多個用戶訪問我們的ftp服務並且權限不一樣該怎麼做呢?這時利用系統用戶的認證方式來認證就不行了,所以這就用到了虛擬用戶的認證,虛擬用戶通過pam_listfile.so、pam_ldap.so或pam_mysql.so模塊來認證用戶,此時將用戶存放在listfile表或ldap服務中或mysql數據庫中,此時將用戶公開出去就不會給我們的系統帶來安全隱患了,下面就來說一下利用pam_mysql.so模塊來對用戶認證的方式:
配置前準備:

1、 事先準備好yum源、安裝好開發環境(Development Libraries、Development Tools)
2、 準備好cmake-2.8.8.tar.gz源碼包(跨平臺編譯器,編譯安裝mysql-5.5.25a需要用到)、mysql-5.5.25a.tar.gz源碼包和pam_mysql-0.7RC1.tar.gz源碼包。
安裝配置:
1、 編譯安裝cmake-2.8.8.tar.gz;
  1. #tar xf cmake-2.8.8.tar.gz 
  2. #cd cmake-2.8.8 
  3. #./bootstrap 
  4. #make && make install 
2、 編譯安裝mysql-5.5.25a.tar.gz
  1.  #groupadd -r mysql 
  2. #useradd -g mysql -d /data/mysql mysql 
  3. #tar xf mysql-5.5.25a.tar.gz  
  4. #cd mysql-5.5.25a 
  5. #cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DENABLE_PROFILING=1 
  6. #mkdir /data/mysql 
  7. #chown mysql:mysql /data/mysql/ 
  8. #cd /usr/local/mysql 
  9. #chown -R mysql:mysql . 
  10. #scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql 
  11. #cp support-files/my-large.cnf /etc/my.cnf 
  12. #vim /etc/my.cnf(添加datadir = /data/mysql並修改thread_concurrency = 2) 
  13. #cp support-files/mysql.server /etc/rc.d/init.d/mysqld 
  14. #chkconfig --add mysqld 
  15. #chkconfig mysqld on 
  16. #chown -R root . 
  17. #vim /etc/profile(添加PATH=/usr/local/mysql/bin:$PATH) 
  18. #export PATH=/usr/local/mysql/bin:$PATH 
  19. #echo ‘/usr/local/mysql/lib’ > /etc/ld.so.conf.d/mysql.conf 
  20. #ldconfig 
  21. #ln -sv /usr/local/mysql/include/ /usr/include/mysql 
  22. #vim /etc/man.config(添加PATH  /usr/local/mysql/man) 
  23. #service mysqld start 
3、 安裝pam_mysql-0.7RC1;
  1. #tar xf  pam_mysql-0.7RC1.tar.gz 
  2. #cd  pam_mysql-0.7RC1 
  3. #./configure --with-mysql=/usr/local/mysql --with-openssl 
  4. #make && make install 
4、 安裝vsftpd:
  1. #yum -y install vsftpd 
  2. #service vsftpd start 
配置過程:
1.準備數據庫及相關表,建立名爲vsftpd的數據庫來存放相關虛擬用戶的帳號 
  1. mysql> create database vsftpd; 
  2. mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456'; 
  3. mysql> grant select on vsftpd.* to [email protected] identified by '123456'; 
  4. mysql> use vsftpd; 
  5. mysql> create table users ( 
  6.     -> id int AUTO_INCREMENT NOT NULL, 
  7.     -> name char(20) binary NOT NULL, 
  8.     -> password char(48) binary NOT NULL, 
  9.     -> primary key(id) 
  10.     -> ); 
添加測試的虛擬用戶,其密碼採取加密存放的方式 
  1. mysql> insert into users(name,password) values('benet',password('123456')); 
  2. mysql> insert into users(name,password) values('aptech',password('123456')); 
查看結果
  1. mysql> select * from users; 
  2. +----+-----------+----------------------------------------------------------------------------+ 
  3. | id | name    | passwd                                                                              | 
  4. +----+-----------+----------------------------------------------------------------------------+ 
  5. |  1 | benet    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |  
  6. |  2 | aptech  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |  
  7. +----+-----------+----------------------------------------------------------------------------+ 
  8. 3 rows in set (0.00 sec) 
2.建立pam認證所需文件
  1. #vim /etc/pam.d/vsftpd.mysql 
添加如下兩行
  1. auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
  2. account required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
3.修改vsftpd的配置文件,使其適應mysql認證
  建立虛擬用戶映射的系統用戶及對應的目錄
  1. #useradd -s /sbin/nologin -d /var/ftp2 vsftpd 
  2. #chmod go+rx /var/ftp2 
編輯/etc/vsftpd/vsftpd.conf文件確保已經啓用了以下選項:
  1. anonymous_enable=YES 
  2. local_enable=YES 
  3. write_enable=YES 
  4. anon_upload_enable=NO 
  5. anon_mkdir_write_enable=NO 
添加以下選項:
  1. chroot_local_user=YES 
  2. guest_enable=YES 
  3. guest_username=vsftpd 
修改以下選項:
  1. pam_service_name=vsftpd.mysql 
5、 重新啓動vsftpd服務並驗證結果:
  1. #service vsftpd restart 
以mysql數據庫中benet用戶身份到另外的windows主機上進行訪問:
虛擬用戶benet用戶登錄成功;
以mysql數據庫中aptech用戶身份到另外的windows主機上進行訪問:
虛擬用戶aptech用戶登錄成功;
添加本地用戶tom並給予密碼redhat然後訪問ftp服務:
  1. # useradd tom 
  2. # passwd tom 
  3. Changing password for user tom. 
  4. New UNIX password:  
  5. BAD PASSWORD: it is based on a dictionary word 
  6. Retype new UNIX password:  
  7. passwd: all authentication tokens updated successfully. 
 
本地用戶tom登錄失敗;
    這裏mysql數據庫中的用戶的權限是一樣的,怎樣使aptech和benet用戶權限不一樣呢?這就要用到vsftp的user_config_dir指令;
我們假如讓benet用戶有上傳權限但是沒有刪除權限;
讓aptech用戶有刪除權限但是沒有上傳權限;
在/etc/vsftpd/目錄下創建virusers目錄(可以根據自己需要任意創建),然後在該目錄下創建跟benet和aptech用戶名相同的文件:
benet文件中內容如下:
  1. anon_upload_enable=YES 
  2. anon_mkdir_write_enable=NO 
  3. anon_other_write_enable=NO 
aptech文件中內容如下:
  1. anon_upload_enable=NO 
  2. anon_mkdir_write_enable=NO 
  3. anon_other_write_enable=NO 
編輯/etc/vsftpd/vsftpd.conf配置文件,添加如下行:
  1. user_config_dir=/etc/vsftpd/virusers 
重啓vsftpd服務:
  1. # service vsftpd restart 
以mysql數據庫中benet用戶身份到另外的windows主機上進行訪問:
benet用戶僅有上傳權限但是沒有刪除權限;
以mysql數據庫中aptech用戶身份到另外的windows主機上進行訪問:
aptech用戶僅有刪除權限但是沒有上傳權限;
    通過上述操作就實現了ftp服務通過pam_mysql認證用戶並讓不同的虛擬用戶擁有了不同的權限,這樣也給我們的ftp服務增加了安全性。

本文出自 “彼岸” 博客,請務必保留此出處http://wjw7702.blog.51cto.com/5210820/936244

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章