以下的文章主要講述的是Debian Linux下對vsftpd+MySQL虛擬用戶的具體作法,我前兩天在相關網站看見Debian Linux下對vsftpd+MySQL虛擬用戶的資料,覺得挺好,就拿出來供大家分享。
今天閒來無事做了個ftp,原因很簡單就是為了能在別處看到的好東西直接放到我的機器上,嘿嘿!linux下選擇ftp服務器還真是不容易,經過一陣思索後就選擇了vsftpd,理由就是它號稱是linux下最安全的ftp服務器還有還有好多的大型站點都用它來做服務器(這樣用起來也比較有面子 :) )。
為了怕在我輸入密碼時被別人偷看到然後登入我機器亂搞,在加上我本來就討厭系統有那麼多的用戶(其實也是像顯示自己的手平),所以我決定采用虛擬用戶,因為機器中裝有MySQL(和PHP搭配之最佳組合),於是我就想將vsftpd+MySQL虛擬用戶數據放在MySQL(和PHP搭配之最佳組合)中,好了,就侃到這裡,下面進入正題!
第一步:
安裝vsftpd
apt-get install vsftpd (Debian就是爽啊!)
系統會自動生成一個配置文件和一個ftp用戶供匿名用戶使用,vsftpd使用pam方式來驗證虛擬用戶,因為vsftpd+MySQL虛擬用戶的信息保存在數據庫中,所以我們還需要一個能夠讀取數據庫內容的本地用戶,而且還需要設置它的本地目錄:
- #mkdir /var/ftp
- #useradd -d ftpguest /var/ftp
- #chown ftpguest.nogroup /var/ftp
第二步:安裝MySQL(和PHP搭配之最佳組合)
apt-get install MySQL(和PHP搭配之最佳組合)-server MySQL(和PHP搭配之最佳組合)-clent
建立數據庫,並添加用戶
- #MySQL(和PHP搭配之最佳組合) -p MySQL(和PHP搭配之最佳組合)>create ftpu;
- MySQL(和PHP搭配之最佳組合)>use ftpu;
- MySQL(和PHP搭配之最佳組合)>create table user(name char(20) binary,passwd char(20) binary);
- MySQL(和PHP搭配之最佳組合)>insert into user (name,passwd) values ('test1',password('1234567'));
- MySQL(和PHP搭配之最佳組合)>insert into user (name,passwd) values ('test2',password('7654321'));
- MySQL(和PHP搭配之最佳組合)>quit
- 讓ftpguest能訪問ftpu和表user:
- #MySQL(和PHP搭配之最佳組合) -u root MySQL(和PHP搭配之最佳組合)
-p MySQL(和PHP搭配之最佳組合)>grant select on ftpu.user to ftpguest@localhost identified by '123456';
MySQL(和PHP搭配之最佳組合)>quit
第三步:因為vsftpd是通過PAM驗證
所以我們還需要一個MySQL(和PHP搭配之最佳組合)通過PAM驗證的包,在Debian下它叫做libpam-MySQL(和PHP搭配之最佳組合)
apt-get install libpam-MySQL(和PHP搭配之最佳組合)
然後打開vsftpd的pam驗證:
- #vi /etc/pam.d/vsftpd
將以前的內容注釋掉,然後加入以下內容:
auth required pam_MySQL(和PHP搭配之最佳組合).so user=ftpguest passwd=123456 host=localhost db=ftpu table=user usercolumn=name passwdcolumn=passwd crypt=2
account required pam_MySQL(和PHP搭配之最佳組合).so user=ftpguest passwd=123456 host=localhost db=ftpu table=user usercolumn=name passwdcolumn=passwd crypt=2
上面的內容應該能看明白吧,那個crypt=2表示經過MySQL(和PHP搭配之最佳組合)的password()機密後的東西!
第四步:修改vsftpd.conf文件
- #vi /etc/vsftpd.conf
加入:
- uest_enable=yes
- guest_username=ftpguest
- #表示ftpguest為vsftp的虛擬用戶
- virtual_use_local_privs=yes
vsftpd+MySQL虛擬用戶與本地用戶有相同的權限
- write_enable=yes
- anon_upload_enable=yes
- anon_other_write_enable=yes
允許虛擬用戶上傳,修改和刪除文件
- chroot_local_user=yes
虛擬用戶只能訪問自己的目錄
- anonymous_enable=no
- local_enable=yes
關閉匿名用戶訪問,開啟本地用戶訪問
第五步:
本來來到第四步已經完成了,可是後來一想,不對,那要是每次上傳的東西都不同,到時把那個目錄弄得亂七八糟的怎麼管理啊,能不能為每個vsftpd+MySQL虛擬用戶創建一個目錄呢,比如說將music用戶上傳的文件放在放在~/music下,將doc用戶上傳的文件放在~/doc下呢?
能!當然能了,看看我怎麼做?
首先在數據庫中添加music和doc兩個vsftpd+MySQL虛擬用戶接下來:
- #mkdir /etc/vsftpd_user_conf
- #cd /etc/vsftpd_user_conf
- #touch music
- #echo "local_root=/home/username/music" > music
- #touch doc
- #echo "local_root=/home/username/doc" > doc
- #mkdir /home/username/music
- #chown ftpguest.nogroup /home/username/music
- #chmod 600 /home/username/music
- #chown ftpguest.nogroup /home/username/doc
- #chmod 600 /home/username/doc
然後在vsftpd.conf中加入: user_config_dir=/etc/vsftpd_user_conf,大功告成,你明白了嗎?