vsftp配置虛擬用戶
1、vsftp安裝
由于系統(tǒng)是debian7,故直接通過(guò)apt-get來(lái)安裝就行了。
sudo apt-get install vsftpd
2、虛擬用戶配置
安裝的vsftpd版本是2.3.5-3,這個(gè)版本,配置文件是/etc/vsftpd.conf
.
關(guān)于具體的配置,直接網(wǎng)上搜就一大堆,推薦這個(gè)網(wǎng)址的,挺詳細(xì)的。
http://www.cnblogs.com/hhuai/archive/2011/02/12/1952647.html
(1)虛擬用戶配置
vsftp允許三種用戶登錄:
- 本地用戶(系統(tǒng)中的用戶)
- 匿名用戶(anonymous免密碼登錄)
- 虛擬用戶(基于本地用戶)
虛擬用戶以本地用戶為宿主(一般是不能登錄系統(tǒng)的本地用戶),僅僅用于登錄vsftp,無(wú)法登陸系統(tǒng);可以建立多個(gè)虛擬用戶,設(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)用戶賬號(hào)生成
新建文件,比如/etc/vsftpd/ftpusers
,然后按照“一行用戶名,一行密碼”的規(guī)則寫入文件。
mkdir /etc/vsftpd # 創(chuàng)建文件夾
vi /etc/vsftpd/ftpusers # 編輯寫入
cat /etc/vsftpd/ftpusers # 寫入的用戶/密碼
user1
123456
user2
654321
保存退出,這樣就建立兩個(gè)用戶,然后就要利用這個(gè)用戶文件生成pam能識(shí)別的db格式。
debian下可以用db4.8_load命令,如果沒(méi)有可以先檢查安裝
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在配置文件中指定,可以使用相對(duì)路徑,由系統(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
,另外,也可能模塊并未鏈接出來(lái),在/lib/security
或者/lib64/security
中都沒(méi)有這個(gè)模塊名,那么便要自己去找出來(lái)。
# 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
。
如果登錄時(shí)候提示530,登錄失敗,可以到這個(gè)文件中查看相應(yīng)的錯(cuò)誤提示信息,這個(gè)日志文件就是保存與賬戶驗(yàn)證相關(guān)的日志信息。
(4)db路徑設(shè)置
新版的pam驗(yàn)證db模塊,會(huì)要求是要 .db
后綴的文件,驗(yàn)證時(shí)候會(huì)自動(dòng)幫你補(bǔ)上這個(gè)后綴,從幫助文件可以看出。
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.
一開(kāi)始不清楚,在自定義的pam驗(yàn)證模塊里,把db后綴寫上,登錄時(shí)候一直提示530 login failed,到日志文件文件查看,看出了db路徑有問(wèn)題
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都會(huì)生成一個(gè)不可登錄的用戶,各版本這個(gè)用戶名可能不太相同,這個(gè)版本的vsftp生成的用戶是ftp,可以在/etc/passwd
中查看:
$ cat /etc/passwd | grep ftp
ftp:x:121:129:ftp daemon,,,:/var/ftp:/bin/false
用戶名ftp,用戶組ftp,主目錄/var/ftp(修改過(guò)),不可登錄/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)然,也可以在虛擬用戶自定義配置(見(jiàn)下面)中指定相應(yīng)用戶的登錄目錄,但要注意的是:宿主用戶(ftp)必須對(duì)虛擬用戶登錄目錄有相應(yīng)的權(quán)限,否則會(huì)登錄失敗。
(2)手動(dòng)添加宿主用戶
如果不想用已有的ftp用戶,或者安裝后沒(méi)有軟件沒(méi)有創(chuàng)建用戶,可以利用adduser
命令,手動(dòng)添加一個(gè)不可登錄的宿主用戶。
adduser -d /opt/vsftp -g ftp -s /sbin/nologin vsftp
# -d: 指定用戶主目錄
# -g: 指定用戶組
# -s: 指定登錄后分配的shell(nologin表示不可登錄)
# vsftp: 表示要添加的用戶名
如果這樣修改后,登錄ftp提示500錯(cuò)誤:
500 OOPS: cannot change directory:/home/*******
500 OOPS: child died
可以試著在輸入以下命令解決
setsebool -P ftpd_disable_trans 1
service vsftpd restart
第一行中的-P參數(shù)是為了以后不需要每次開(kāi)機(jī)都輸入這個(gè)命令
5、虛擬用戶配置
在/etc/vsftpd.conf
中指定的虛擬用戶配置目錄,比如下面的,就是/etc/vsftpconf
:
user_config_dir=/etc/vsftpconf
然后就可以在目錄中創(chuàng)建與虛擬用戶同名的文件,就是相應(yīng)用戶的配置文件,配置格式與vsftpd的主配置文件一樣,不過(guò)可以不用那么復(fù)雜,精簡(jiǎn)點(diǎn)就行了,這樣也就達(dá)到了不同用戶不同配置的目的。這里貼一下一個(gè)樣本:
# 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 # 會(huì)話超時(shí)時(shí)間300秒
data_connection_timeout=90 # 數(shù)據(jù)連接超時(shí)時(shí)間90秒
max_clients=1 # 最大連接數(shù)1
max_per_ip=1 # 每個(gè)ip最大連接數(shù)1
local_max_rate=25000 # 最大傳輸數(shù)率25000B/s
6、本地用戶與匿名用戶驗(yàn)證
上面說(shuō)過(guò)vsftpd的登錄驗(yàn)證是利用pam驗(yàn)證模塊,而默認(rèn)的驗(yàn)證模塊/etc/pam.d/vsftpd
僅支持本地用戶登錄,修改后的/etc/pam.d/vsftpd.vu
僅支持匿名用戶登錄,也即,本地用戶無(wú)法通過(guò)驗(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是指對(duì)用戶的用戶名口令進(jìn)行驗(yàn)證。
這里的accout是指對(duì)用戶的帳戶有哪些權(quán)限哪些限制進(jìn)行驗(yàn)證。
其后的sufficient表示充分條件,也就是說(shuō),一旦在這里通過(guò)了驗(yàn)證,那么也就不用經(jīng)過(guò)下面剩下的驗(yàn)證步驟了。相反,如果沒(méi)有通過(guò)的話,也不會(huì)被系統(tǒng)立即擋之門外,因?yàn)閟ufficient的失敗不決定整個(gè)驗(yàn)證的失敗,意味著用戶還必須將經(jīng)歷剩下來(lái)的驗(yàn)證審核。
7、其他常見(jiàn)錯(cuò)誤
(1)500錯(cuò)誤
500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
這種一般是因?yàn)橛脩舻母夸浛蓪懀瑫r(shí)又使用了chroot限制,但這在這個(gè)版本的vsftp中默認(rèn)是不被允許的。要修復(fù)這個(gè)錯(cuò)誤,可以用命令chmod a-w /home/ftp
去除用戶根目錄的寫權(quán)限,注意把目錄替換成你自己的。
同時(shí),在根目錄下創(chuàng)建可以有寫權(quán)限的文件夾,這樣就可以進(jìn)入該文件夾中,上傳東西了。
或者顯式指定根目錄可以寫,在vsftpd的配置文件中增加下列兩項(xiàng)中的一項(xiàng):
對(duì)于標(biāo)準(zhǔn)的vsftpd build (vsftpd):
allow_writeable_chroot=YES
對(duì)于擴(kuò)展的vsftpd build (vsftpd-ext):
allow_writable_chroot=YES
(2)550錯(cuò)誤
550 Create directory operation failed.
這種一般是權(quán)限問(wèn)題,不能創(chuàng)建目錄或文件,重新修改下目錄權(quán)限即可,同時(shí)注意是不是文件擁有者是不是ftp用戶/宿主。
@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted on 2016-09-21 11:00
聶文龍 閱讀(434)
評(píng)論(0) 編輯 收藏 引用