說起寫這篇文章,先做一個前奏,昨天因X公司WEB伺服器 Ubuntu 10.04 老舊版本,因為已經不能在線升級,所以我選擇了直接安裝最新的 Ubuntu 13.04 版本,把所有數據轉移處理完畢,伺服器運行正常。以前該公司是直接為ftp用戶建立系統賬戶,但是這樣並不安全,所以我才想起建立虛擬FTP賬戶,在網上查了一下,最後在國外howtoforge網站上有一篇文章是在Debian Etch系統中為vsftpd建立虛擬用戶,使用Mysql資料庫,先在PC機做個試驗,文章雖然是2007年寫的,但是依然有效,只是最後做一點補充,不然你根本鏈接不上主機。
我翻譯者這篇文章,共享給大家,當然也給自己以後工作留下參考筆記。原文地址:http://www.howtoforge.com/vsftpd_mysql_debian_etch
1 首先我試驗的環境:
2 如果你已經安裝vsftpd、phpmyadmin、mysql,直接跳過這一步,如果沒有,使用下面命令安裝,vsftpd沒有內置的MySQL支持,因此我們必須使用PAM來驗證對MySQL資料庫。
為免去驗證,直接切換到超級用戶:
sudo su -
apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin
因為我已經安裝LAMP、ssh、vsftpd、phpmyadmin,所以第二條命令我只選擇了兩個東東來安裝,命令如下:
apt-get install libpam-mysql mysql-client
3 為 vsftpd 建立MYSQL資料庫,建立一個資料庫和用戶,名字都是:vsftpd,用戶密碼為:ftpdpass,先登陸資料庫,終端或SSH輸入命令:
mysql -u root -p
建立資料庫、用戶和用戶許可權
CREATE DATABASE vsftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;
然後使用vsftpd用戶名登陸:
USE vsftpd;
建立數據表及欄位並退出:
CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (
`username`
)
) ENGINE = MYISAM ;
quit;
4 配置vsftpd
添加一個vsftpd用戶和用戶組,這個是虛擬用戶的基礎用戶:
useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
備份/etc/vsftpd.conf文件並新建一個/etc/vsftpd.conf
cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
cat /dev/null > /etc/vsftpd.conf
vi /etc/vsftpd.conf
為/etc/vsftpd.conf添加如下內容:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf
這是一個基本的設置。
創建一個用戶全局設置文件:
mkdir /etc/vsftpd_user_conf
現在我們必須配置PAM,使其使用MySQL資料庫來驗證我們的虛擬FTP用戶。 vsftpd的PAM配置是在/etc/pam.d/vsftpd下。我們做一個備份原始文件,並創建一個新的:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
cat /dev/null > /etc/pam.d/vsftpd
vi /etc/pam.d/vsftpd
新文件加入內容
auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
重啟VSFTPD:
/etc/init.d/vsftpd restart
5 建立第一個虛擬用戶試一試
進入MSQL:
mysql -u root -p
切換到vsftpd用戶:
USE vsftpd;
插入一個虛擬用戶(用戶名:testuser 密碼:secret):
INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
quit;
還需要為用戶創建一個目錄並賦予許可權(這裡用戶組許可權在ubuntu不夠,所以可能無法登陸):
mkdir /home/vsftpd/testuser
chown vsftpd:nogroup /home/vsftpd/testuser
現在你使用FTP客戶端登陸試一試,如果沒有出現錯誤,那麼恭喜你成功了,如果無法登陸可能是vsftpd用戶組許可權不夠,你可以試試修改一些目錄許可權,直接賦予777吧:
chmod 777 /home/vsftpd/testuser
再登陸試一試!
使用命令添加虛擬太麻煩,你可以使用phpmyadmin,如下圖:
別忘添加相應的用戶目錄和許可權。
[火星人 ] 用MYSQL為vsftpd伺服器建立虛擬機用戶已經有871次圍觀