歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

vsftpd虛擬用戶配置:PgSQL+FreeBSD

簡述PAM原理 如果你已經對pam有所了解,請跳過,我知道的可能還不如你多。你不感興趣也請跳過,因為不看這個也可配置。 用戶 -> vsftpd -> PAM模塊 -> 用戶和密碼數據庫 vsftpd用了一種很聰明同時也是unix/ linux 規范的方法來認證用戶,就是PAM。大家對於PA
  簡述PAM原理
  如果你已經對pam有所了解,請跳過,我知道的可能還不如你多。你不感興趣也請跳過,因為不看這個也可配置。
  
  用戶 <-> vsftpd <-> PAM模塊 <-> 用戶和密碼數據庫
  
  vsftpd用了一種很聰明同時也是unix/linux規范的方法來認證用戶,就是PAM。大家對於PAM,也許有些陌生,但是一直在用。所謂PAM,英文是:Pluggable Authentication Modules,可拔插認證模塊(不知道這樣翻譯對不對)。看見plug這個關鍵字,就知道是很靈活的。
  現在幾乎所有daemon程序一般都是用PAM來進行認證的,包括te.net/sshd/imapd,甚至你的login,都是用PAM。在fbsd 4上的朋友,你可以打
  
  ps -ax|grep pam
  你會發現login了多少個控制台,就會有多少個寫著pam的進程。
  
  PAM的最大好處是靈活。它不管你的用戶和密碼用什麼數據格式存儲(數據庫也好,通常用的密碼文件也好),只要有相應的PAM模塊就可以存儲。比如說,大家不僅可以用vsftpd + PgSQL做用戶登陸驗證,只要你喜歡你還可以用MySQLOracle,LDAP數據庫存儲用戶數據,只要有相應的PAM就可以。所有的daemon都可以用一個後台數據庫來做用戶驗證登陸,包括telnet/sshd等等。
  
  pam的配置機制在不同版本的freebsd上有差異
  freebsd-4放在/etc/pam.conf,一個文件記錄所有pam服務。
  freebsd-5放在/etc/pam.d,/usr/local/etc/pam.d。每個pam服務由一個獨立的文件記錄。
  
  本文不打算詳細敘述PAM的配置。PAM的配置不是很難,畢竟,只是要你配置一些參數,不是叫你開發一個pam模塊出來。而且本文的篇幅所限,偶剛剛知道的一點東西希望能夠起到拋磚引玉的作用。等偶對pam再玩得深入和熟一點的時候,再寫一篇關於深入一點關於pam的東東?
  
  准備開始
  提要簡單講講要用到的配置文件的作用。
  
  /etc/pam.conf #pam服務的配置
  /etc/pam_pgsql.conf #pam_pgsql.so的配置
  /usr/local/etc/vsftpd.conf #vsftpd的配置
  
  一、安裝vsftpd,PostgreSQL,pam_pgsql
  我都是使用port來安裝的,請大家用port/package來安裝,不要自己下載源碼來編譯,否則可能根據本文的方法可能無法正常使用。其中vsftpd和pam-pgsql一定要用port/package來安裝。
  以下是他們的port目錄:
  
  /usr/ports/ftp/vsftpd
  /usr/ports/databases/postgresql7
  /usr/ports/security/pam-pgsql
  
  安裝:只要cd進去,然後make install就OK了。
  
  二、PostgreSQL安裝
  簡單提提用port來裝PostgreSQL的過程,因為BSD版上的裝PgSQL的方法都是自己下載源碼編譯的。我是用port來編譯安裝,因為這是fbsd推薦的安裝方法,而且安裝的軟件會根據bsd的hier(目錄結構)來安裝,比較便於管理。
  當用port來安裝好PostgreSQL,默認的數據庫管理用戶是pgsql(port裡頭的安裝程序自動添加的),其他系統默認的是postgres。初始化PostgreSQL的程序如下:
  
  1、初始數據庫。請先用root登陸或者su到root。然後,打命令:
  
  # su pgsql
  # initdb
  正常初始化的應該有以下提示:
  This database system will be initialized with username "pgsql".
  This user will own all the data files and must also own the server process.
  
  Creating directory /usr/local/pgsql/data
  Creating directory /usr/local/pgsql/data/base
  Creating directory /usr/local/pgsql/data/global
  Creating directory /usr/local/pgsql/data/pg_xlog
  Creating template1 database in /usr/local/pgsql/data/base/1
  
  Suclearcase/" target="_blank" >ccess. You can now start the database server using:
  
  /usr/local/bin/postmaster -D /usr/local/pgsql/data
  or
  /usr/local/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
  
  2、啟動PostgreSQL
  
  # /usr/local/etc/rc.d/010.pgsql.sh start
  
  更多詳細的幫助,請看freebsddiary上面的一篇用port來安裝PostgreSQL的文章,全英文。
  http://www.freebsddiary.org/postgresql.php
  
  三、設定用戶數據庫</chapter>
  我是PgSQL的初學者,命令行用得不熟,因而要借助phpPgAdmin來管理數據庫。
  
  1、先創建一個數據庫,叫做mydb。
  2、建立一個數據表叫做ftp,用來存儲用戶名和帳號。這個數據表的結構是pam_pgsql模塊規定的最簡單的表了,每一個字段都是必須的,你可以擴展這個表的結構,但是不要刪除這些字段。我導出了一個SQL腳本,方便大家創建。
  
  CREATE TABLE "ftp" (
  "ID" int4 DEFAULT nextval('public."ftp_ID_seq"') NOT NULL ,
  "usr" varchar(32) NOT NULL ,
  "pass" varchar(32) NOT NULL ,
  "expired" bool DEFAULT false NOT NULL ,
  "newtok" bool DEFAULT false NOT NULL
  );
  請創建一些用戶,方便調試:
  這是我的ftp表,這些記錄名字都是隨便起的。但請注意只有expired為f(假)的可以成功登陸。
  
  ID | usr   | pass  | expired | newtok
  ----+---------+---------+---------+--------
  1  | ftp   | ftp   | f    | f
  2  | ftp1  | ftp1  | t    | t
  4  | ftp3  | ftp3  | f    | f
  6  | go   | abcdef | f    | f
  3  | ftp2  | ftp2  | f    | f
  5  | downftp | downftp | f    | f
            3、創建一個pgsql用戶叫做pamusr,密碼也是pamusr。賦予pamusr對於ftp表的select權限,注意select就夠了。pam_pgsql只是讀數據表,而不是修改它。你也可以用其他用戶,比如管理PgSQL的pgsql/postgres用戶,但是從安全角度著想,建一個專門提供給pam_pgsql的弱權限的用戶更好!
  
  備注:
  數據庫,數據表,用戶名都不必跟我一樣,pam_pgsql沒有規定,但是這些設定,必須跟pam_pgsql的配置文件/etc/pam_pgsql.conf的一致。
  
  四、設定pam_pgsql模塊
  編輯/etc/pam_pgsql.conf 在/etc/pam.conf裡頭加上以上的幾行,更多的資料參考/usr/local/share/doc/pam-pgsql/README
  
  #host = 127.0.0.1
  這個不需要,默認是本地連接的。如果要連接遠程服務器,請設置你的IP,並且去掉#
  database = mydb
  user = pamusr #剛才添加的訪問PgSQL的用戶
  password = pamusr #訪問PgSQL的密碼
  table = ftp
  user_column = usr #用戶名在數據表中的字段
  pwd_column = pass #用戶密碼在數據表中的字段
  expired_column = expired #用戶是否已經過期的字段名
  newtok_column = newtok #用戶是否需要修改密碼的字段
  
  五、設置pam服務
  A、fbsd-4的配置
  
  在/etc/pam.conf,加入以下幾項
  
  # service-name module-type   control-flag  module-path argument
  
  vsftpd  auth     required    pam_pgsql.so #
  vsftpd  account    required    pam_pgsql.so #
  vsftpd  password   required    pam_pgsql.so#
  注意這裡的service name為vsftpd,這不是必須的。前提是不要跟pam.conf已經有的service name沖突。vsftpd.conf中的pam_service_name一項要跟這裡的service name對應。
  
  B、fbsd-5的配置
  
  在freebsd-5中的pam配置機制,跟freebsd-4有不同。你應該在/etc/pam.d或者/usr/local/etc/pam.d裡頭建立一個名位vsftpd的文件,內容跟上面的內容一樣。
  本人在fbsd
  5-current上嘗試過配置,但總不成功,無論是pam_pgsql還是pam_mysql,總是提示說找不到這些pam。google了一下,發現這個錯誤好像是fbsd
  5-current的bug
  http://unix.derkeiler.com/Mailing-Lists/FreeBSD/current/2003-07/0278.html
  
  不過還是給出5-current的pam服務的配置方法,作為參考。
  建立一個文件:/etc/pam.d/vsftpd。注意,該文件就是pam服務的名稱
  
  auth     required    pam_pgsql.so #
  account    required    pam_pgsql.so #
  password   required    pam_pgsql.so#
  
  六、配置vsftpd
  這個是參考vsftpd虛擬用戶設置1的官方文檔進行配置的
  
  1、用adduser增加一個用戶,名為virtual。
  
  2、配置/usr/local/etc/vsftpd.conf
  
  anonymous_enable=NO
  local_enable=YES
  write_enable=NO
  anon_upload_enable=NO
  anon_mkdir_write_enable=NO
  anon_other_write_enable=NO
  chroot_local_user=YES
  guest_enable=YES
  dual_log_enable=YES
  guest_username=virtual
  #我們剛才增加的本地用戶,虛擬用戶將會享有這個名為virtual本地用戶的權限。
  pam_service_name=vsftpd #
  這個就是我在pam.conf裡頭設置的pam服務的名稱,沒有這一項,vsftpd是用名為ftp的pam服務。
  listen=YES
  secure_chroot_dir=/usr/local/share/vsftpd/empty
  #請加上這一項,vsftpd默認的secure_chroot_dir是/usr/share/empty,用port安裝的話,不會自動創建這個目錄,而是放在/usr/local/share/vsftpd/empty。當然你也可以自己創建一個目錄。
  
  七、調試
  用standalone的方法來啟動vsftpd,不要用inetd。
  
  /usr/local/libexec/vsftpd
  或者
  /usr/local/libexec/vsftpd 配置文件名(如vsftpd.conf.1, vsftpd.conf.2)
  一般他是搜索/usr/local/etc目錄,如果你放在其他地方就要寫上完整的路徑。
  
  如果沒有沒有出什麼提示證明vsftpd啟動成功。實踐中,我常常出現的錯誤是沒有用root來啟動vsftpd,或者chroot路徑不對。
  下面ftp試試
  
  >ftp 192.168.1.10
  Connected to 192.168.1.10.
  220 (vsFTPd 1.2.0)
  Name (192.168.1.10:powerplane): downftp
  331 Please specify the password.
  Password:
  230 Login successful.
  Remote system type is UNIX.
  Using binary mode to transfer files.
  yeah,成功了。
  
  總結
  想要配置vsftpd + 其他的PAM認證方法,本文都可做參考。當然,你可能會修改有關pam.conf的設置了。
  freebsd的port裡頭除了有pam_pgsql的模塊以外,還有pam_mysql,pam_ldap的。
  一般都是放在/usr/ports/security

Copyright © Linux教程網 All Rights Reserved