vsftp虛擬用戶通過pam和mysql認證

VSFTPD是一種在UNIX/Linux中非常安全且快速的FTP服務器,目前已經被許多大型站點所採用。VSFTPD支持將用戶名和口令保存在數據庫文件或數據庫服務器中。VSFTPD稱這種形式的用戶爲虛擬用戶。相對於FTP的本地(系統)用戶來說,虛擬用戶只是FTP服務器的專有用戶,虛擬用戶只能訪問FTP服務器所提供的資源,這大大增強系統本身的安全性。相對於匿名用戶而言,虛擬用戶需要用戶名和密碼才能獲取FTP服務器中的文件,增加了對用戶和下載的可管理性。對於需要提供下載服務,但又不希望所有人都可以匿名下載;既需要對下載用戶進行管理,又考慮到主機安全和管理方便的FTP站點來說,虛擬用戶是一種極好的解決方案。



1、編譯安裝pam_mysql

注意:安裝這些軟件包之前不要忘記安裝開發環境

yum -y groupinstall "Development Tools"

yum -y groupinstall "Development Libraries"

mysql安裝請參考本文LAMP最新編譯安裝

tar xf pam_mysql-0.7RC1.tar.gz

cd pam_mysql-0.7RC1

./configure --with-mysql=/usr/local/mysql

make && make install

cp /usr/lib/security/pam_mysql.so /lib/security/


2、編譯安裝vsftpd

tar xf vsftpd-2.3.5.tar.gz

cd vsftpd-2.3.5

less INSTALL /建議查看這個安裝文檔,裏面有詳細說明安裝vsftpd步驟/

make && make install


複製vsftpd的主配置文件

mkdir -pv /etc/vsftpd

cp vsftpd.conf /etc/vsftpd/


編輯配置文件/etc/vsftpd/vsftpd.conf

添加:listen=YES


啓動vsftpd服務器

/usr/local/sbin/vsftpd &


-----------------------------------------------------------------------------------------


二、服務配置

1、配置mysql,創建數據庫表用戶等操作


創建數據庫爲vsftpd

mysql> create database vsftpd;

Query OK, 1 row affected (0.10 sec)


創建表爲users

mysql> use vsftpd;

Database changed

mysql> create table users (

   -> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

   -> name CHAR(15) NOT NULL UNIQUE KEY,

   -> password CHAR(48) NOT NULL );

Query OK, 0 rows affected (0.22 sec)


添加兩個用戶,採用加密模式

mysql> insert into users (name,password) values ('test',password('123456'));

Query OK, 1 row affected (0.06 sec)


mysql> insert into users (name,password) values ('test1',password('123456'));

Query OK, 1 row affected (0.01 sec)


爲用戶vsftpd授權

mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456';

Query OK, 0 rows affected (0.08 sec)


mysql> grant select on vsftpd.* to [email protected]  identified by '123456';

Query OK, 0 rows affected (0.01 sec)


最後刷新一下表

mysql> flush privileges;            

Query OK, 0 rows affected (0.05 sec)



2、建立認證文件

cd /etc/pam.d

touch vsftpd.mysqluser

vim vsftpd.mysqluser 添加以下內容

auth required pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

保存退出


說明:

auth 對用戶所提供的認證信息進行驗證,比如檢查用戶賬號及密碼

account 執行基於非驗證的賬號管理。它主要用來允許或者限制用戶對某個服務的訪問時間,當前有效的系統資源最多可以有多少個用戶,限制用戶的位置等

crypt=2: 使用MYSQL中的password()函數加密



3、建立虛擬用戶映射的系統用戶及對應的目錄

useradd -s /sbin/nologin -d /var/ftpuser ftpuser

chmod go+rx /var/ftpuser


4、配置vsftpd主配置文件/etc/vsftpd/vsftpd.conf

請確保/etc/vsftpd/vsftpd.conf中已經啓用了以下選項

anonymous_enable=YES           #表示允許匿名用戶登錄訪問

local_enable=YES   #表示允許本地系統用戶登錄訪問

write_enable=YES               #表示允許寫入權限

anon_upload_enable=NO   #表示匿名用戶是否有上傳的權限,這裏是關閉的,要開啓NO改成YES

anon_mkdir_write_enable=NO     #表示匿名用戶沒有寫入的權限,這裏是關閉的,開開啓NO改成YES

chroot_local_user=NO           #表示把ftp本地用戶鎖定在家目錄,爲了安全,建議關閉


添加以下選項

guest_enable=YES   #啓用虛擬用戶

guest_username=ftpuser   #虛擬用戶映射的系統用戶,就是上面我們建立的用戶,名字是ftpuser

pam_service_name=vsftpd.ftp    #啓用PAM認證,並指定文件,這個文件路徑在/etc/pam.d/ftp


6、關閉vsftpd和開啓vsftpd

關閉vsftpd:killall vsftpd

開啓vsftpd:/usr/local/sbin/vsftpd   /etc/vsftpd/vsftpd.conf &


測試:lftp [email protected]


輸入密碼就可以正常登錄了



三、解決系統用戶無法登錄ftp

如果使用虛擬用戶,那麼系統本地用戶就無法登錄了,如果要解決這個問題,必須可以修改/etc/pam.d/vsftpd文件,把虛擬用戶基本mysql的配置文件(/etc/pam.d/vsftpd.my),放置到/etc/pam.d/vsftpd裏就可以解決了,需要添加和修改的幾個選項如下:

#%PAM-1.0

auth sufficient  pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account sufficient  pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

#session    optional     pam_keyinit.so    force revoke

auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

auth       required     pam_shells.so

auth       include      system-auth

account    include      system-auth

#session    include     system-auth  

#session    required     pam_loginuid.so


此時,再次測試,虛擬用戶和系統本地用戶都可以正常登錄,但是系統本地用戶登錄的家目錄是虛擬用戶的家目錄,無法登錄自己系統

本地的家目錄,如果系統用戶要想使用家目錄,可以用以下參數定義



實驗過程中遇到的問題:

問題一、用虛擬賬號登錄ftp的時候報錯:ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

解決方法:chown a-w /var/ftpuser,做完這步但是虛擬用戶就無法上傳文件了,這時在/



user_config_dir=/etc/vsftpd/users

1. which vsftpd                       # 確定文件路徑          

2. vim /etc/hosts.deny                 # 改文件立即生效  

vsftpd: 172.16.0.2300  


#假設僅允許172.16網段訪問  

vim /etc/hosts.allow  

vsftpd: 171.16                        # 只允許172.16.0.0/16網段  

vim /etc/hosts.deny  

ALL: ALL                                            # 拒絕其他的用戶登陸


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