vsftp配置虛擬用戶
1、vsftp安裝
由于系統(tǒng)是debian7,故直接通過apt-get來安裝就行了。
sudo apt-get install vsftpd
2、虛擬用戶配置
安裝的vsftpd版本是2.3.5-3,這個版本,配置文件是/etc/vsftpd.conf
.
關(guān)于具體的配置,直接網(wǎng)上搜就一大堆,推薦這個網(wǎng)址的,挺詳細(xì)的。
http://www.cnblogs.com/hhuai/archive/2011/02/12/1952647.html
(1)虛擬用戶配置
vsftp允許三種用戶登錄:
- 本地用戶(系統(tǒng)中的用戶)
- 匿名用戶(anonymous免密碼登錄)
- 虛擬用戶(基于本地用戶)
虛擬用戶以本地用戶為宿主(一般是不能登錄系統(tǒng)的本地用戶),僅僅用于登錄vsftp,無法登陸系統(tǒng);可以建立多個虛擬用戶,設(shè)置各自的密碼,并且根據(jù)其用途設(shè)置相應(yīng)的配置,能適應(yīng)多種情況。
(2)虛擬用戶相應(yīng)配置
guest_enable=YES # 啟用虛擬用戶
guest_username=ftp # 虛擬用戶的宿主用戶名
virtual_use_local_privs=YES # 虛擬本地權(quán)限
user_config_dir=/etc/vsftpconf # 虛擬用戶設(shè)置文件夾(如果不設(shè)定則按照主配置文件)
3、相關(guān)設(shè)置
(1)用戶賬號生成
新建文件,比如/etc/vsftpd/ftpusers
,然后按照“一行用戶名,一行密碼”的規(guī)則寫入文件。
mkdir /etc/vsftpd # 創(chuàng)建文件夾
vi /etc/vsftpd/ftpusers # 編輯寫入
cat /etc/vsftpd/ftpusers # 寫入的用戶/密碼
user1
123456
user2
654321
保存退出,這樣就建立兩個用戶,然后就要利用這個用戶文件生成pam能識別的db格式。
debian下可以用db4.8_load命令,如果沒有可以先檢查安裝
aptitude search db | grep util # 查找軟件、版本
aptitude install db4.8-utils # 安裝軟件(安裝完成就有 db4.8_load 命令)
db4.8_load -T -t hash -f /etc/vsftpd/ftpusers /etc/vsftpd/ftpusers.db # 生成db格式
(2)pam設(shè)置
vsftpd的pam校驗(yàn)?zāi)K在配置文件中指定,可以使用相對路徑,由系統(tǒng)自己找。
pam_service_name=vsftpd # 指定pam模塊名(可以自定義)
默認(rèn)的模塊是/etc/pam.d/vsftpd
:
cat /etc/pam.d/vsftpd
# Standard behaviour for ftpd(8).
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth required pam_shells.so
虛擬用戶模塊設(shè)置:
# 在/etc/pam.d目錄下新建vsftpd.vu文件寫入
auth required /lib/security/pam_userdb.so db=/etc/vsftpconf/virtusers
account required /lib/security/pam_userdb.so db=/etc/vsftpconf/virtusers
# 并在/etc/vsftpd.conf中修改pam模塊名
pam_service_name=vsftpd.vu
注意自己的系統(tǒng)如果是64位,userdb驗(yàn)證模塊的位置有可能在/lib64/security/pam_userdb.so
,另外,也可能模塊并未鏈接出來,在/lib/security
或者/lib64/security
中都沒有這個模塊名,那么便要自己去找出來。
# 64位系統(tǒng)
ln -s /lib/x86_64-linux-gnu/security/pam_userdb.so /lib64/security/pam_userdb.so
# 32位系統(tǒng)
ln -s /lib/i386-linux-gnu/security/pam_userdb.so /lib/security/pam_userdb.so
(3)pam日志文件
很多l(xiāng)inux版本的驗(yàn)證信息是存在/var/log/secure
,但 debian 7 是存到另外的文件 /var/log/auth.log
。
如果登錄時候提示530,登錄失敗,可以到這個文件中查看相應(yīng)的錯誤提示信息,這個日志文件就是保存與賬戶驗(yàn)證相關(guān)的日志信息。
(4)db路徑設(shè)置
新版的pam驗(yàn)證db模塊,會要求是要 .db
后綴的文件,驗(yàn)證時候會自動幫你補(bǔ)上這個后綴,從幫助文件可以看出。
db=[path] use the [path] database for performing lookup.
There is no default; the module will return PAM_IGNORE if no database is provided.
Newer versions of DB will automatically append ".db" to whatever pathname you supply here,
so the path should not include it.
一開始不清楚,在自定義的pam驗(yàn)證模塊里,把db后綴寫上,登錄時候一直提示530 login failed,到日志文件文件查看,看出了db路徑有問題
pam_userdb(vsftpd.vu:auth):
user_lookup: could not open database `/etc/vsftpd/ftpusers.db': No such file or directory
最后將 .db
后綴去掉后,就可以正常認(rèn)證登錄了。
4、宿主用戶配置
(1)ftp宿主用戶
一般安裝完vsftp都會生成一個不可登錄的用戶,各版本這個用戶名可能不太相同,這個版本的vsftp生成的用戶是ftp,可以在/etc/passwd
中查看:
$ cat /etc/passwd | grep ftp
ftp:x:121:129:ftp daemon,,,:/var/ftp:/bin/false
用戶名ftp,用戶組ftp,主目錄/var/ftp(修改過),不可登錄/bin/false。
因?yàn)?code style="color: #000000; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-size: 0.88em; background-color: #f8f8f8; border: 1px solid #cccccc; padding: 0px 3px;">/var/ftp的屬主是ftp用戶,一般不做指定登錄目錄情況下,以ftp為宿主的虛擬用戶默認(rèn)就是登錄到這里,當(dāng)然,也可以在虛擬用戶自定義配置(見下面)中指定相應(yīng)用戶的登錄目錄,但要注意的是:宿主用戶(ftp)必須對虛擬用戶登錄目錄有相應(yīng)的權(quán)限,否則會登錄失敗。
(2)手動添加宿主用戶
如果不想用已有的ftp用戶,或者安裝后沒有軟件沒有創(chuàng)建用戶,可以利用adduser
命令,手動添加一個不可登錄的宿主用戶。
adduser -d /opt/vsftp -g ftp -s /sbin/nologin vsftp
# -d: 指定用戶主目錄
# -g: 指定用戶組
# -s: 指定登錄后分配的shell(nologin表示不可登錄)
# vsftp: 表示要添加的用戶名
如果這樣修改后,登錄ftp提示500錯誤:
500 OOPS: cannot change directory:/home/*******
500 OOPS: child died
可以試著在輸入以下命令解決
setsebool -P ftpd_disable_trans 1
service vsftpd restart
第一行中的-P參數(shù)是為了以后不需要每次開機(jī)都輸入這個命令
5、虛擬用戶配置
在/etc/vsftpd.conf
中指定的虛擬用戶配置目錄,比如下面的,就是/etc/vsftpconf
:
user_config_dir=/etc/vsftpconf
然后就可以在目錄中創(chuàng)建與虛擬用戶同名的文件,就是相應(yīng)用戶的配置文件,配置格式與vsftpd的主配置文件一樣,不過可以不用那么復(fù)雜,精簡點(diǎn)就行了,這樣也就達(dá)到了不同用戶不同配置的目的。這里貼一下一個樣本:
# cat /etc/vsftpconf/user1
local_root=/opt/vsftp/user1 # 指定用戶登錄目錄
anonymous_enable=NO # 不允許匿名登錄
write_enable=YES # 可寫
local_umask=022 # 掩碼為022
anon_upload_enable=NO # 匿名用戶不可上傳
anon_mkdir_write_enable=NO # 匿名用戶不可創(chuàng)建目錄
idle_session_timeout=300 # 會話超時時間300秒
data_connection_timeout=90 # 數(shù)據(jù)連接超時時間90秒
max_clients=1 # 最大連接數(shù)1
max_per_ip=1 # 每個ip最大連接數(shù)1
local_max_rate=25000 # 最大傳輸數(shù)率25000B/s
6、本地用戶與匿名用戶驗(yàn)證
上面說過vsftpd的登錄驗(yàn)證是利用pam驗(yàn)證模塊,而默認(rèn)的驗(yàn)證模塊/etc/pam.d/vsftpd
僅支持本地用戶登錄,修改后的/etc/pam.d/vsftpd.vu
僅支持匿名用戶登錄,也即,本地用戶無法通過驗(yàn)證。
(1)支持本地與虛擬用戶驗(yàn)證
將/etc/vsftpd.conf
中指定的驗(yàn)證模塊內(nèi)容修改為:
# virtual users auth
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/ftpusers
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/ftpusers
# Standard behaviour for ftpd(8).
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth required pam_shells.so
這里的auth是指對用戶的用戶名口令進(jìn)行驗(yàn)證。
這里的accout是指對用戶的帳戶有哪些權(quán)限哪些限制進(jìn)行驗(yàn)證。
其后的sufficient表示充分條件,也就是說,一旦在這里通過了驗(yàn)證,那么也就不用經(jīng)過下面剩下的驗(yàn)證步驟了。相反,如果沒有通過的話,也不會被系統(tǒng)立即擋之門外,因?yàn)閟ufficient的失敗不決定整個驗(yàn)證的失敗,意味著用戶還必須將經(jīng)歷剩下來的驗(yàn)證審核。
7、其他常見錯誤
(1)500錯誤
500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
這種一般是因?yàn)橛脩舻母夸浛蓪懀瑫r又使用了chroot限制,但這在這個版本的vsftp中默認(rèn)是不被允許的。要修復(fù)這個錯誤,可以用命令chmod a-w /home/ftp
去除用戶根目錄的寫權(quán)限,注意把目錄替換成你自己的。
同時,在根目錄下創(chuàng)建可以有寫權(quán)限的文件夾,這樣就可以進(jìn)入該文件夾中,上傳東西了。
或者顯式指定根目錄可以寫,在vsftpd的配置文件中增加下列兩項(xiàng)中的一項(xiàng):
對于標(biāo)準(zhǔn)的vsftpd build (vsftpd):
allow_writeable_chroot=YES
對于擴(kuò)展的vsftpd build (vsftpd-ext):
allow_writable_chroot=YES
(2)550錯誤
550 Create directory operation failed.
這種一般是權(quán)限問題,不能創(chuàng)建目錄或文件,重新修改下目錄權(quán)限即可,同時注意是不是文件擁有者是不是ftp用戶/宿主。
@import url(http://m.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted on 2016-09-21 11:00
聶文龍 閱讀(440)
評論(0) 編輯 收藏 引用