vsftp配置虛擬用戶
1、vsftp安裝
由于系統是debian7,故直接通過apt-get來安裝就行了。
sudo apt-get install vsftpd
2、虛擬用戶配置
安裝的vsftpd版本是2.3.5-3,這個版本,配置文件是/etc/vsftpd.conf
.
關于具體的配置,直接網上搜就一大堆,推薦這個網址的,挺詳細的。
http://www.cnblogs.com/hhuai/archive/2011/02/12/1952647.html
(1)虛擬用戶配置
vsftp允許三種用戶登錄:
- 本地用戶(系統中的用戶)
- 匿名用戶(anonymous免密碼登錄)
- 虛擬用戶(基于本地用戶)
虛擬用戶以本地用戶為宿主(一般是不能登錄系統的本地用戶),僅僅用于登錄vsftp,無法登陸系統;可以建立多個虛擬用戶,設置各自的密碼,并且根據其用途設置相應的配置,能適應多種情況。
(2)虛擬用戶相應配置
guest_enable=YES # 啟用虛擬用戶
guest_username=ftp # 虛擬用戶的宿主用戶名
virtual_use_local_privs=YES # 虛擬本地權限
user_config_dir=/etc/vsftpconf # 虛擬用戶設置文件夾(如果不設定則按照主配置文件)
3、相關設置
(1)用戶賬號生成
新建文件,比如/etc/vsftpd/ftpusers
,然后按照“一行用戶名,一行密碼”的規則寫入文件。
mkdir /etc/vsftpd # 創建文件夾
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設置
vsftpd的pam校驗模塊在配置文件中指定,可以使用相對路徑,由系統自己找。
pam_service_name=vsftpd # 指定pam模塊名(可以自定義)
默認的模塊是/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
虛擬用戶模塊設置:
# 在/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
注意自己的系統如果是64位,userdb驗證模塊的位置有可能在/lib64/security/pam_userdb.so
,另外,也可能模塊并未鏈接出來,在/lib/security
或者/lib64/security
中都沒有這個模塊名,那么便要自己去找出來。
# 64位系統
ln -s /lib/x86_64-linux-gnu/security/pam_userdb.so /lib64/security/pam_userdb.so
# 32位系統
ln -s /lib/i386-linux-gnu/security/pam_userdb.so /lib/security/pam_userdb.so
(3)pam日志文件
很多linux版本的驗證信息是存在/var/log/secure
,但 debian 7 是存到另外的文件 /var/log/auth.log
。
如果登錄時候提示530,登錄失敗,可以到這個文件中查看相應的錯誤提示信息,這個日志文件就是保存與賬戶驗證相關的日志信息。
(4)db路徑設置
新版的pam驗證db模塊,會要求是要 .db
后綴的文件,驗證時候會自動幫你補上這個后綴,從幫助文件可以看出。
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驗證模塊里,把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
后綴去掉后,就可以正常認證登錄了。
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。
因為/var/ftp
的屬主是ftp用戶,一般不做指定登錄目錄情況下,以ftp為宿主的虛擬用戶默認就是登錄到這里,當然,也可以在虛擬用戶自定義配置(見下面)中指定相應用戶的登錄目錄,但要注意的是:宿主用戶(ftp)必須對虛擬用戶登錄目錄有相應的權限,否則會登錄失敗。
(2)手動添加宿主用戶
如果不想用已有的ftp用戶,或者安裝后沒有軟件沒有創建用戶,可以利用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參數是為了以后不需要每次開機都輸入這個命令
5、虛擬用戶配置
在/etc/vsftpd.conf
中指定的虛擬用戶配置目錄,比如下面的,就是/etc/vsftpconf
:
user_config_dir=/etc/vsftpconf
然后就可以在目錄中創建與虛擬用戶同名的文件,就是相應用戶的配置文件,配置格式與vsftpd的主配置文件一樣,不過可以不用那么復雜,精簡點就行了,這樣也就達到了不同用戶不同配置的目的。這里貼一下一個樣本:
# 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 # 匿名用戶不可創建目錄
idle_session_timeout=300 # 會話超時時間300秒
data_connection_timeout=90 # 數據連接超時時間90秒
max_clients=1 # 最大連接數1
max_per_ip=1 # 每個ip最大連接數1
local_max_rate=25000 # 最大傳輸數率25000B/s
6、本地用戶與匿名用戶驗證
上面說過vsftpd的登錄驗證是利用pam驗證模塊,而默認的驗證模塊/etc/pam.d/vsftpd
僅支持本地用戶登錄,修改后的/etc/pam.d/vsftpd.vu
僅支持匿名用戶登錄,也即,本地用戶無法通過驗證。
(1)支持本地與虛擬用戶驗證
將/etc/vsftpd.conf
中指定的驗證模塊內容修改為:
# 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是指對用戶的用戶名口令進行驗證。
這里的accout是指對用戶的帳戶有哪些權限哪些限制進行驗證。
其后的sufficient表示充分條件,也就是說,一旦在這里通過了驗證,那么也就不用經過下面剩下的驗證步驟了。相反,如果沒有通過的話,也不會被系統立即擋之門外,因為sufficient的失敗不決定整個驗證的失敗,意味著用戶還必須將經歷剩下來的驗證審核。
7、其他常見錯誤
(1)500錯誤
500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
這種一般是因為用戶的根目錄可寫,同時又使用了chroot限制,但這在這個版本的vsftp中默認是不被允許的。要修復這個錯誤,可以用命令chmod a-w /home/ftp
去除用戶根目錄的寫權限,注意把目錄替換成你自己的。
同時,在根目錄下創建可以有寫權限的文件夾,這樣就可以進入該文件夾中,上傳東西了。
或者顯式指定根目錄可以寫,在vsftpd的配置文件中增加下列兩項中的一項:
對于標準的vsftpd build (vsftpd):
allow_writeable_chroot=YES
對于擴展的vsftpd build (vsftpd-ext):
allow_writable_chroot=YES
(2)550錯誤
550 Create directory operation failed.
這種一般是權限問題,不能創建目錄或文件,重新修改下目錄權限即可,同時注意是不是文件擁有者是不是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
聶文龍 閱讀(435)
評論(0) 編輯 收藏 引用