vsftpd是一款在Linux發行版中最受推崇的FTP伺服器程式。特點是小巧輕快,安全易用。
vsftpd 的名字代表"very secure FTP daemon", 安全是它的開發者 Chris Evans 考慮的首要問題之一。在這個 FTP 伺服器設計開發的最開始的時候,高安全性就是一個目标。
一、安裝vsftpd
使用本地yum源安裝:
# yum -y install vsftpd
開啟服務:
# service vsftpd start
二、安裝pam_mysql-0.7RC1
# tar zxvf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr/local/mysql --with-openssl
# make
# make install
三、安裝資料庫
1、準備資料存放的檔案系統
建立一個邏輯卷,并将其挂載至特定目錄
建立分區的步驟省略,将分區建立成邏輯卷:
# pvcreate /dev/sda5
# vgcreate myvg /dev/sda5
# lvcreate -L 2G -n mydata myvg
# mke2fs -j /dev/myvg/mydata
這裡假設其邏輯卷的挂載目錄為/mydata,而後需要建立/mydata/data目錄做為mysql資料的存放目錄。
# mkdir -pv /mydata/data
# vim /etc/fstab
編輯此檔案,添加如下行,以實作開機自動挂載:
/dev/myvg/mydata /mydata ext3 defaults 0 0
# mount -a
2、建立使用者以安全方式運作程序:
# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
# chown -R mysql:mysql /mydata/data
3、安裝并初始化mysql-5.5.20
首先下載下傳平台對應的mysql版本至本地,這裡是32位平台,是以,選擇的為mysql-5.5.20-linux2.6-i686.tar.gz,下載下傳此rpm包。
解壓縮mysql,并指定其目錄:
# tar xf mysql-5.5.20-linux2.6-i686.tar.gz -C /usr/local
# cd /usr/local/
# ln -sv mysql-5.5.20-linux2.6-i686 mysql
# cd mysql
# chown -R mysql:mysql .
初始化mysql:
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
# chown -R root .
4、為mysql提供主配置檔案:
# cd /usr/local/mysql
# cp support-files/my-large.cnf /etc/my.cnf
并修改此檔案中thread_concurrency的值為你的CPU個數乘以2,比如這裡使用如下行:
thread_concurrency = 2
另外還需要添加如下行指定mysql資料檔案的存放位置:
datadir = /mydata/data
5、為mysql提供sysv服務腳本:
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
添加至服務清單:
# chkconfig --add mysqld
# chkconfig mysqld on
而後就可以啟動服務測試使用了。
# service mysqld start
為了使用mysql的安裝符合系統使用規範,并将其開發元件導出給系統使用,這裡還需要進行如下步驟:
6、輸出mysql的man手冊至man指令的查找路徑:
編輯/etc/man.config,添加如下行即可:
MANPATH /usr/local/mysql/man
7、輸出mysql的頭檔案至系統頭檔案路徑/usr/include:
這可以通過簡單的建立連結實作:
# ln -sv /usr/local/mysql/include /usr/include/mysql
8、輸出mysql的庫檔案給系統庫查找路徑:
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
而後讓系統重新載入系統庫:
# ldconfig
9、修改PATH環境變量,讓系統可以直接使用mysql的相關指令。編輯相關檔案/etc/profile:
# vim /etc/profile
添加如下行:
PATH=$PATH:/usr/local/mysql/bin
mysql就此安裝完成
10.準備資料庫及相關表
在此,我們建立名為vsftp的資料庫來存放相關虛拟使用者的帳号
mysql> create database vsftpd;
設定預設資料庫:
mysql> use vsftpd;
建立表:
mysql> create table users (
-> id int AUTO_INCREMENT NOT NULL PRIMARY KEY, 自動增長
-> name char(20) NOT NULL UNIQUE KEY, 定長檢索速度快
-> passwd char(48) NOT NULL
-> );
對于一個表而言,隻能有一個字段使用自動增長
添加測試的虛拟使用者,其密碼采取加密存放的方式
往表中插入資料,id字段不用插入,自動初始化:
mysql> insert into users(name,password) values('magedu',password('123456'));
mysql> insert into users(name,password) values('marion',password('123456'));
檢視結果
mysql> select * from users;
授權:
mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456';
mysql> grant select on vsftpd.* to [email protected] identified by '123456';
兩個完全不同的使用者。
mysql> flush privileges;
四、建立pam認證
所需檔案:
#vi /etc/pam.d/vsftpd.mysql
編輯此檔案,添加如下兩行:
auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=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.建立虛拟使用者映射的系統使用者及對應的目錄:
#useradd -r -s /sbin/nologin -d /var/ftproot ftpuser
#chmod go+rx /var/ftproot
4.修改vsftpd的配置檔案,使其适應mysql認證
請確定/etc/vsftpd/vsftpd.conf中已經啟用了以下選項
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
listen=YES
chroot_local_user=YES 最好開啟,開啟更安全
為/etc/vsftpd/vsftpd.conf添加以下選項
guest_enable=YES 是否啟用來賓賬号
guest_username=ftpuser
修改/etc/vsfptd/vsftpd.conf中的pam_service_name=vsftpd為如下内容:
pam_service_name=vsftpd.mysql
重新開機服務:
# service vsftpd restart
關閉Selinux:
# setenforce 0
在驗證之前,先使用mysql指令,檢視使用者能否使用:
# mysql -uvsftpd -p
Enter password:
mysql> show databases;
mysql> use vsftpd
若可以出現結果,則此使用者可以使用
5.通路FTP:

連接配接成功。在此要知道,虛拟使用者的權限與匿名使用者的相同,是以,我們設定匿名使用者有上傳權限時,看看虛拟使用者是否有上傳權限。
修改/etc/vsftpd/vsftpd.conf檔案:
将此項開啟:anon_upload_enable=YES
通路FTP:
ftp> lcd C:\windows\system32
ftp> !dir
五、如何讓不同的虛拟使用者有不同的權限:
假如讓magedu這個使用者僅有上傳權限,marion使用者僅有下載下傳權限,改如何實作?
對vsftpd來講,有一個指令:user_config_dir,可以實作指定一個目錄,在目錄中建與使用者同名的配置檔案,用于定義使用者通路FTP時獨有的權限。在目錄中可以定義能否上傳、下載下傳,以及最大傳輸速率等通路控制權限:
anon_max_rate
anon_umask
local_max_rate
max_clients
max_per_ip
guest_username
listen_address
user_config_dir
1. 建立虛拟使用者配置檔案目錄:
# cd /etc/vsftpd/
# mkdir virusers
# cd virusers
2. 編輯虛拟使用者配置檔案:
# vim magedu
添加如下行:
anon_upload_enable=YES
anon_other_write_enable=NO
# vim marion
添加如下行:
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
3. 編輯主配置檔案:
# cd ..
# vim vsftpd.conf
添加: user_config_dir=/etc/vsftpd/virusers
# service vsftpd reatart
4.通路FTP:
六、虛拟使用者可以使用以後,系統使用者無法登陸,那如何才能讓系統使用者與本地使用者都可以登陸呢?
# vim /etc/pam.d/vsftpd
将檔案/etc/pam.d/vsftpd.mysql與/etc/pam.d/vsftpd的内容合并起來,要把/etc/pam.d/vsftpd.mysql中移過來的required改為sufficient,還要把/etc/pam.d/vsftpd中的session行注釋掉。讀取檔案的時候,是從上往下依次讀取的,要注意通路控制的次序。修改後的内容如下:
#%PAM-1.0
#session optional pam_keyinit.so force revoke
auth sufficient /lib/security/pam_mysql.so user=vsftpd passwd=123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
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
修改主配置檔案:
# vim /etc/vsftpd/vsftpd.conf
将pam_service_name=vsftpd.mysql
改為pam_service_name=vsftpd