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服務腳本:
# cd /usr/local/mysql
# 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
mysql> select * from users;
若可以出現結果,則此用戶可以使用
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_mkdir_write_enable=NO
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
auth sufficient /lib/security/pam_mysql.so user=vsftpd passwd=123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
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
重啓服務:
# service vsftpd restart
連接FTP: