歡迎您光臨本站 註冊首頁

[配置 轉載] Debian Linux下vsftpd+mysql虛擬用戶作法

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

[配置 轉載] Debian Linux下vsftpd+mysql虛擬用戶作法

[配置 轉載] Debian Linux下vsftpd+mysql虛擬用戶作法

Debian Linux下vsftpd+mysql虛擬用戶作法

今天閑來無事做了個ftp,原因很簡單就是為了能在別處看到的好東西直接放到我的機器上,嘿嘿!linux下選擇ftp伺服器還真是不容易,經過一陣思索后就選擇了vsftpd,理由就是它號稱是linux下最安全的ftp伺服器還有還有好多的大型站點都用它來做伺服器(這樣用起來也比較有面子  。為了怕在我輸入密碼時被別人偷看到然後登入我機器亂搞,在加上我本來就討厭系統有那麼多的用戶(其實也是像顯示自己的手平),所以我決定採用虛擬用戶,因為機器中裝有Mysql,於是我就想將虛擬用戶數據放在mysql中,好了,就侃到這裡,下面進入正題!

第一步:

安裝vsftpd

apt-get install vsftpd (Debian就是爽啊!)

系統會自動生成一個配置文件和一個ftp用戶供匿名用戶使用,vsftpd使用PAM方式來驗證虛擬用戶,因為虛擬用戶的信息保存在資料庫中,所以我們還需要一個能夠讀取資料庫內容的本地用戶,而且還需要設置它的本地目錄:

#mkdir /var/ftp

#useradd -d ftpguest /var/ftp

#chown ftpguest.nogroup /var/ftp

第二步:安裝mysql

apt-get install mysql-server mysql-clent

建立資料庫,並添加用戶

#mysql -p mysql>create ftpu;

mysql>use ftpu;

mysql>create table user(name char(20) binary,passwd char(20) binary);

mysql>insert into user (name,passwd) values ('test1',password('1234567'));

mysql>insert into user (name,passwd) values ('test2',password('7654321'));

mysql>quit

讓ftpguest能訪問ftpu和表user:

#mysql -u root mysql -p mysql>grant select on ftpu.user to ftpguest@localhost identified by '123456';

mysql>quit

第三步:因為vsftpd是通過PAM驗證,所以我們還需要一個mysql通過PAM驗證的包,在Debian下它叫做libpam-mysql

apt-get install libpam-mysql

然後打開vsftpd的PAM驗證:

#vi /etc/pam.d/vsftpd

將以前的內容註釋掉,然後加入以下內容:

auth required pam_mysql.so user=ftpguest passwd=123456 host=localhost db=ftpu table=user usercolumn=name passwdcolumn=passwd crypt=2

account required pam_mysql.so user=ftpguest passwd=123456 host=localhost db=ftpu table=user usercolumn=name passwdcolumn=passwd crypt=2

上面的內容應該能看明白吧,那個crypt=2表示經過mysql的password()機密后的東西!

第四步:修改vsftpd.conf文件

#vi /etc/vsftpd.conf

加入:

uest_enable=YES

guest_username=ftpguest

#表示ftpguest為vsftp的虛擬用戶

virtual_use_local_privs=YES

#虛擬用戶與本地用戶有相同的許可權

write_enable=YES

anon_upload_enable=YES

anon_other_write_enable=YES

#允許虛擬用戶上傳,修改和刪除文件

chroot_local_user=YES

#虛擬用戶只能訪問自己的目錄

anonymous_enable=NO

local_enable=YES

#關閉匿名用戶訪問,開啟本地用戶訪問

第五步:

本來來到第四步已經完成了,可是後來一想,不對,那要是每次上傳的東西都不同,到時把那個目錄弄得亂七八糟的怎麼管理啊,能不能為每個虛擬用戶創建一個目錄呢,比如說將music用戶上傳的文件放在放在~/music下,將doc用戶上傳的文件放在~/doc下呢?

能!當然能了,看看我怎麼做?

首先在資料庫中添加music和doc兩個虛擬用戶接下來:

#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

大功告成,你明白了嗎?

轉載自:http://www.blogcn.com/user50/guangleiw/
《解決方案》

注意:
如果用crypt=2的驗證方式,即使用mysql的password函數,要注意mysql的版本和你用戶表裡的password欄位的長度。
http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html
《解決方案》

是呀,
你那

mysql>create table user(name char(20) binary,passwd char(20) binary);

mysql>insert into user (name,passwd) values ('test1',password('1234567'));


放得下的么?經過PASSWORD加密后長度為41,你那才20

mysql> SELECT LENGTH(PASSWORD('test'));
+--------------------------+
| LENGTH(PASSWORD('test')) |
+--------------------------+
|                       41 |
+--------------------------+
1 row in set (0.01 sec)



MD5加密后也有32位.

[ 本帖最後由 aib 於 2006-7-23 15:17 編輯 ]
《解決方案》


有點啟發
《解決方案》

值得學習!
《解決方案》

樓主 ,我的配置過程和你的一樣,vsftpd.conf中的參數也對比過了,沒有什麼區別,但是還是登陸出錯,信息如下:
[右] 正在連接到 vsftpd -> IP=192.168.0.88 PORT=21
[右] 正在連接到 vsftpd
[右] 500 OOPS: cannot locate user entry:ftpsecure
[右] 500 OOPS: child died
[右] 連接失敗
請各位指點
《解決方案》

cannot locate user entry:ftpsecure

顯然是pam沒有找到對應的用戶信息
《解決方案》

我按照 http://vod.sjtu.edu.cn/help/Article_Show.asp?ArticleID=1239 的方式安裝並配置好了vsftpd,但是在我登陸的時候出現如下錯誤:
[右] 正在連接到 vsftpd -> IP=192.168.0.88 PORT=21
[右] 正在連接到 vsftpd
[右] 500 OOPS: cannot locate user entry:ftpsecure
[右] 500 OOPS: child died

是訪問目錄的時候出錯吧?

下面是我的vsftpd.conf的部分信息:
guest_enable=yes
guest_username=vsftpdguest
virtual_use_local_privs=YES
chroot_local_user=YES
listen=yes
listen_port=21
user_config_dir=/etc/vsftpd/vsftpd_user_conf

在 /etc/vsftpd/vsftpd_user_conf下有個用虛擬用戶名命名的文件: kjava
其中內容為:  local_root=目錄路徑

我已經將這個目錄設置為系統的vsftpdguest可讀可寫了

我的配置和下面這個鏈接的也差不多,不知道是不是哪裡細節沒有注意到呢?


http://bbs.chinaunix.net/viewthread.php?tid=794583&highlight=vsftpd


/etc/pam.d/ftp中的內容如下:
#%PAM-1.0
auth       required        /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth       required        /lib/security/pam_unix.so shadow nullok
auth       required        /lib/security/pam_shells.so
account    required        /lib/security/pam_unix.so
session    required        /lib/security/pam_unix.so
auth required pam_mysql.o user=vsftpdguest passwd=1q2w3e4r host=localhost db=ftpuser table=users usercolumn=name passwdcolumn=passwd crypt=2
account required pam_mysql.o user=vsftpdguest passwd=1q2w3e4r host=localhost db=ftpuser table=users usercolumn=name passwdcolumn=passwd crypt=2
《解決方案》

那個關於passwd欄位長度的問題我也遇到了。之前一直沒找到問題所在,後來將passwd欄位的長度改為41后,就沒有提示密碼錯了。但卻遇到了其它形式的問題。
我的問題是:
# ftp 192.168.1.20
Connected to 192.168.1.20.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.20:root):
331 Please specify the password.
Password:
500 OOPS: cannot change directory:/home/ftp/test
Login failed.
421 Service not available, remote server has closed connection
---------------------
我已在vsftpd.conf里加了這行:user_config_dir=/etc/vsftpd_user_conf
也在vsftpd_user_conf設置了test的內容為local_root=/home/ftp/test,
執行:
mkdir /home/ftp/test
chown vsftpdguest.vsftpdguest /home/ftp/test
chmod 600 /home/ftp/test
可是卻總提示cannot change directory:/home/ftp/test,就算建立其它用戶名及對應的目錄也一樣出錯。

不知哪位大俠能幫幫忙啊?
《解決方案》

http://www.chinaunix.net/jh/15/704820.html

[火星人 ] [配置 轉載] Debian Linux下vsftpd+mysql虛擬用戶作法已經有660次圍觀

http://coctec.com/docs/service/show-post-30741.html