天天看點

ftp+pam基于mysql的認證

1、要事先安裝開發環境用到的包  

Desktop Platform Development   Development tools

[root@linux ~]# yum -y install mysql-server mysql-devel pam_mysql

[root@linux ~]# service mysqld start  

啟動mysql建立存放使用者資訊的資料庫

<a href="http://s3.51cto.com/wyfs02/M00/23/A9/wKioL1M9iJGTi6eIAAEeXyB3UsY402.jpg" target="_blank"></a>

2、授權管理此資料庫使用者

mysql&gt; grant select on share_ftp.* to linux@localhost identified by 'vsftp';

mysql&gt; grant select on share_ftp.* to [email protected] identified by 'vsftp';

mysql&gt; flush privileges;

3、建立存放使用者資訊的表

mysql&gt;create table users ( id int AUTO_INCREMENT NOT NULL, name char(20) binary NOT NULL,password char(48) binary NOT NULL, primary key(id));

插入兩個使用者帳号資訊

mysql&gt;insert into users(name,password)values('ftpuser2',password('ftpuser2'));

mysql&gt;insert into users(name,password)values('ftpuser1',password('ftpuser1'));

<a href="http://s3.51cto.com/wyfs02/M01/23/A9/wKioL1M9iS7jY5i-AAGH4V-ZdrM018.jpg" target="_blank"></a>

4、建立pam認證所需檔案

#vi /etc/pam.d/vsftpd.mysql  

這是一個事先不存在的檔案,需要時建立即可

添加如下兩行

1

2

<code>auth required </code><code>/lib64/security/pam_mysql</code><code>.so user=linux </code><code>passwd</code><code>=linux host=localhost db=share_ftp table=</code><code>users</code> <code>usercolumn=name passwdcolumn=password crypt=2</code>

<code>account required </code><code>/lib64/security/pam_mysql</code><code>.so user=linux </code><code>passwd</code><code>=linux host=localhost db=share_ftp table=</code><code>users</code> <code>usercolumn=name passwdcolumn=password crypt=2</code>

注:

關于此檔案的具體說明,請檢視:vim /usr/share/doc/pam_mysql-0.7/README

需要安裝pam_msyql形式的rpm的包,對上面兩個參數支援

注意:由于mysql的安裝方式不同,pam_mysql.so基于unix sock連接配接mysql伺服器時可能會出問題,此時,建議授權一個可遠端連接配接的mysql并通路vsftpd資料庫的使用者。

例:

登入到mysql後

<a href="http://s3.51cto.com/wyfs02/M02/23/A9/wKioL1M9icWAKKrgAATwpM7k9DA567.jpg" target="_blank"></a>

<code>#useradd -s /sbin/nologin -d /var/ftproot vuser</code>

<code>#chmod go+rx /var/ftproot</code>

在此處添加vuser使用者是為了資料庫中添加的ftpuser1和ftpuser2指定預設登入後的目錄。(用于限定不同虛拟使用者的權限)

修改FTP的配置檔案,在其中添加上guest_enable=yes,guest_username=vuser(之前通過useradd添加的那個使用者名),pam_service_name=vsftpd.mysql(預設從/etc/pam.d/開始查找)

<a href="http://s3.51cto.com/wyfs02/M00/23/A9/wKioL1M9ilaArdacAAOTZ_rtloY514.jpg" target="_blank"></a>

5、啟動服務進行測試

<code>#service vsftpd start</code>

檢視vuser使用者的目錄

<a href="http://s3.51cto.com/wyfs02/M02/23/A9/wKioL1M9iyGQlHurAACtQNIJCtQ511.jpg" target="_blank"></a>

當使用ftpuser1@localhost登入後

<a href="http://s3.51cto.com/wyfs02/M00/23/AA/wKioL1M9i0qy-aPjAAEnGwQw9Rk258.jpg" target="_blank"></a>

ftpuser2看到的内容也是與ftpuer1相同。

而通過本地系統添加的使用者是無法登入的,如圖

<a href="http://s3.51cto.com/wyfs02/M01/23/AA/wKioL1M9i3_AKDVJAAHuwYuzqzY045.jpg" target="_blank"></a>

6、下面将對不同的虛拟使用者做限定,ftpuser1是可以上傳,下載下傳,删除,ftpuser2隻能上傳。

在配置檔案(/etc/vsftpd/vsftpd.conf)中添加

user_config_dir=/etc/vsftp/vusers_config

而在/etc/vsftp/vusers_config目錄中添加兩個與資料庫中添加的兩個使用者相同的檔案。

注:關于vsftpd.conf檔案可用的更多參數請man vsftpd.conf

<a href="http://s3.51cto.com/wyfs02/M00/23/A9/wKiom1M9i_vgpemXAAHlhL8ONDY860.jpg" target="_blank"></a>

說明:由于在主配置檔案中,是對所有的使用者都生效,在這裡,使用這種方法,完全可以做到基于同類使用者賦予不同限制。

==========================================完===========================================

ps:

   1、這個實驗僅用于說明,完全可以将使用者賬戶存放于資料庫中統一管理。

   2、基于pam的庫實作與mysql的連接配接。

本文轉自 jinlinger 51CTO部落格,原文連結:http://blog.51cto.com/essun/1390189,如需轉載請自行聯系原作者