您好,登錄后才能下訂單哦!
本篇內容主要講解“CentOS怎么安裝配置vsftp虛擬用戶登錄”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“CentOS怎么安裝配置vsftp虛擬用戶登錄”吧!
在使用Linux時,難免要進行各種文件的遠程傳輸,比如:網站的代碼,共享資源等,而這其中用的最多的傳輸方法大概就是FTP了。Linux下可用FTP服務端是非常多的,vsftp, proftp, uw-ftp等,其中vsftp流行度比較廣,沖著這個,本人在自己的CentOS上也就選擇了vsftp,而且,vsftp支持PAM(pluggable authentication modules)下虛擬用戶設置,這正是Mitchell Chu比較喜歡的一種方式,接下來就請vsftp君上場。
Vsftp使用的用戶中,支持三種用戶模式,分別是:實體用戶,匿名用戶和虛擬用戶(guest
, 亦稱訪客身份)。實體用戶(Real User)是指用戶本身存在于系統中的用戶,他們存在于/etc/passwd和/etc/shadow文件中。匿名用戶(Anonymous)是指客戶 端無需提供任何用戶身份,ftp為訪問者提供一個名為anonymous的特殊用戶以供其使用。虛擬用戶(Virtual User)個人理解是一種介于實體用戶和匿名用戶之間的用戶。原因是:虛擬用戶雖然在系統的實體用戶文件中不存在,但是會在系統的其他地方進行記錄(本文是Berkeley DB),以供vsftp用來對ftp訪問者進行必要的鑒權,而鑒權完畢之后,該用戶操作文件之時,將是使用vsftp的運行用戶ftp進行的。由于實體用戶需要的是系統真實帳戶,開放這種權限無疑會增加系統的風險,而虛擬用戶使用的是和實體用戶不同的用戶驗證體系,并且,在系統中并不實際存在虛擬用戶到實體用戶的映射關系,因此降低了FTP給系統帶來的風險性,在實際生產環境中,虛擬用戶可以更加靈活的進行獨立管理,比如:虛擬主機需要給用戶提供FTP帳 戶。有這么些好處之后,讓我們看看是如何配置吧!
預備式
Berkeley DB
數據庫:用來存儲虛擬用戶的登錄信息。
pam_userdb.so
:用來驗證虛擬用戶。
db4_utils
:用來轉換虛擬用戶到DB數據的工具。
安裝需要的包
CentOS中好像是默認自帶vsftp的,因此,無需安裝,如果你不確認,可以用which
看下:
which vsftpd # 如果安裝好了的話,應該是有類似下面的輸出: # /usr/sbin/vsftpd # 如果沒安裝,則類似下面的輸出 # /usr/bin/which: no xd in (/home/limituser...
沒有安裝的話,請安裝:
yum install vsftpd # 或者: yum -y install vsftpd
當然,清空下yum
的緩存亦可:
pushd /etc/yum.repos.d/ rm -rf * wget http://docs.linuxtone.org/soft/lemp/CentOS-Base.repo yum clean all yum -y install vsftpd ## 這句還是重點.
為了簡單,我們可以一次性安裝所有需要的包:
yum install db4-utils db4 vsftpd ## Mitchell Chu提醒:有的就不用再安裝了,請自行增減
創建虛擬用戶
虛擬用戶我們使用Berkeley DB數據庫來存儲。***步是創建純文本來添加用戶和密碼,用戶名和密碼各占一行。比如我們要創建:useasp
的用戶名,密碼是blog.useasp.net
,并且創建一個admin
密碼是adminpasswd
的用戶,那么,純文本將類似如下:
pushd /etc/vsftpd cat >vusers.txt useasp blog.useasp.net admin adminpasswd
創建好vusers.txt
后,我們需要的第二步是將純文本轉換為db文件,這時候需要使用到db_load
了:
db_load -T -t hash -f vusers.txt vsftpd-virtual-users.db
為了安全起見,記得設置僅root
可讀寫(當前是root
):
chmod 600 vsftpd-virtual-users.db
再清理掉原來的純文本文件:
rm vusers.txt
此時,我們已經將需要登錄FTP的用戶已經準備好了,接下來就需要去配置vsftpd,讓vsftpd能夠正確的識別并支持已經設置好虛擬用戶了。
VSFTPD虛擬用戶的配置
找到vsftpd.conf
配置文件,添加或修改下面這些配置選項:
# 禁止匿名登錄 anonymous_enable=NO anon_upload_enable=YES anon_other_write_enable=YES # 啟用本地用戶 local_enable=YES # 虛擬用戶使用本地用戶權限 virtual_use_local_privs=YES # 可寫 write_enable=YES # PAM配置 pam_service_name=vsftpd # 啟用虛擬用戶 guest_enable=YES # 用戶后綴: 配合下面local_root使用,將會用登錄的用戶名替換掉$USER user_sub_token=$USER # 根目錄 local_root=/var/ftp/$USER # 啟用chroot,登錄后會被定位到指定根目錄 chroot_local_user=YES # 將所有的用戶和組顯示為ftp hide_ids=YES
vsftpd的配置文件是在/etc/vsftpd/vsftpd.conf
,原有配置項可以保留默認值,如果需要日志,vsftpd有兩個日志可供使用,一個是標準xferlog格式的,一個是vsftpd格式的,可讀性后者更好,當然,你也可以兩個日志都啟用,要啟用可以設置:xferlog_enable
, xferlog_std_format
, xferlog_file
, vsftpd_log_file
等參數以獲得需要的日志效果。
虛擬用戶的PAM配置
要針對虛擬用戶啟用PAM,我們還需要對PAM盡心配置,在上面的vsftpd配置文件中,我們使用pam_service_name
來配置了PAM將使用的配置文件,這個文件安裝后是默認存在的,如果你覺得有必要保留原來的配置,可以先行備份一份,而后配置文件內容改為如下:
#%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-users account required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-users #session required pam_loginuid.so
要啟用session
可以將上面的#注釋掉,如果是在32位系統下,網上有一個配置方法是下面這種:
#%PAM-1.0 auth sufficient pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-users account sufficient pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-users
由于本人對Linux下的PAM并不是很了解,并不太了解required
和sufficient
的區別,這里不好做過多的論斷,有了解的可以指點一下,謝謝!
PAM配置里面,是指明賬戶保存的所在位置,我們配置文件里面的路徑即是前面使用db_load
創建的Berkeley DB的文件路徑。
創建FTP目錄
前面vsftpd已經配置了ftp的目錄,我們需要先行創建FTP根目錄,和用戶需要的目錄,因為一旦這些用戶登錄,將會被vsftpd重新定位到指定的home目錄下的,vsftpd中我們配置的是/var/ftp
,因此我們需要確認此目錄是否存在,不存在我們就需要創建,而后,在此目錄下創建虛擬用戶的根目錄,目錄名稱就是用戶名稱。
mkdir -p /var/ftp/{useasp,admin} chown -R ftp:ftp /var/ftp
為了保證能夠順利讀取到文件,我們將根目錄下的所有文件都變成ftp這個用戶所有——ftp賬戶系統已經默認設置好了,vsftpd就是使用這個賬戶來操作的。
重啟FTP服務,測試FTP
按上面的流程配置完后,我們就可以重新啟動vsftpd服務,讓新的配置生效——如果你沒有辦法使用此命令,請參看后面的省卻麻煩一節,將vsftpd設置成為開機啟動服務:
service vsftpd restart
重啟之后,理論上來說,應該就能使用FTP客戶端訪問FTP服務器了,如果需要測試,你也可以直接在本機訪問測試下:
ftp 127.0.0.1
此時應該能夠得到正常返回,類似如下:
Connected to 127.0.0.1 (127.0.0.1). 220-Welcome to Mitchell Personal Web Server(MPWS) 220-Please use user name and password to login... 220-if you have any question, please contact MitchellChu<******@useasp.net> 220 Name (127.0.0.1:root):useasp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
而在系統的日志中應該也能看到登錄信息(以下是多個日志文件,和有的如果沒有配置vsftpd的日志文件將無法看到):
# tail -f /var/log/secure Sep 4 23:36:11 CentOS vsftpd[8721]: pam_userdb(vsftpd:auth): user 'useasp' granted access # tail -f /var/log/vsftpd.log Fri Sep 4 23:36:15 2015 [pid 8721] [useasp] FTP response: Client "127.0.0.1", "150 Here comes the directory listing."
到此,我們就已經配置了一個可以正常訪問的FTP服務器了。
開啟防火墻,開放給別人用吧
上面測試正常后,如果你開啟了iptables
,那么,記得添加規則,讓你的21,20端口,以后被動模式時使用的端口范圍開放出來吧:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 65300:65360 -j ACCEPT service iptables save
上面的是我的iptables
的配置,開放了21和20端口,20端口是ftp-data
用的,用來傳輸數據。
省卻麻煩
為了不用每次重啟之后都爬上機器上開啟FTP,我們可以將vsftpd設置為開機啟動——如果系統已經有了這個服務,忽略:
chkconfig --levels 345 vsftpd on service vsftpd start
至此,就差不多得到一個比較***的FTP Server了。
后記:
上面是配置vsftpd使用虛擬用戶的基本流程,但在配置中,我們總是能發現這樣或者那樣的問題,因此就需要我們不斷的去DEBUG整個流程,由于Linux中有SELinux的存在,很多問題的根源還是在于SELinux的設置,如果你需要簡單快捷,那么使用下面這個命令即可解決大部分問題——網上很多朋友也正是這樣解決的:
setenforce 0 # or setenforce Permissive
當然,如果你和Mitchell Chu一樣,也是個不愿意如此簡單了事的人兒,那么,咱們繼續踏上征程……在按上面的方法配置好整個FTP服務器之后,本人也或多或少碰到如下的這些問題,現在匯集起來,方便后來者(若有時間,會展開來講,暫且記錄下):
1.不能定位到各自用戶的目錄,這個問題的存在,我們可以嘗試設置SELinux中的ftp_home_dir
來解決:
setsebool -P ftp_home_dir on
2.不能列出FTP目錄內容,這個問題也是SELinux引起的,可能的原因是vsftpd對于目錄并沒有權限,檢查下自己的權限是否正確,vsftpd使用的是ftp用戶訪問,看看自己是否設置錯權限了?
3.還是不能列出目錄文件,再看看目標文件夾的類型對不對,一般需要的是public_content_r_t,如果你不確認,可以使用下面的命令查看:
ls -alZ
你將看到類似如下的輸出:
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 . drwxr-xr-x. root root system_u:object_r:var_t:s0 .. drwxr-xr-x. root root system_u:object_r:var_t:s0 useasp drwxr-xr-x. root root system_u:object_r:var_t:s0 admin
可以看到,默認的是var_t
,我們需要設置一下,這里需要用到工具semanage
,如果沒有,需要安裝policycoreutils-python
:
yum -y install policycoreutils-python
因為我使用了自行編譯的Python版本,導致semanage
不能正常運行,報錯:
Traceback (most recent call last): File "/usr/sbin/semanage", line 23, in <module> import policycoreutils.default_encoding_utf8 ImportError: No module named policycoreutils.default_encoding_utf8
修正后,直接使用semanage
來設置:
restorecon -R -v /var/ftp/{useasp,admin}
4.不能上傳文件,不能創建文件夾,還是SELinux的問題啊,設置:
setsebool -P allow_ftpd_anon_write on
5.還不能上傳文件?試試:
semanage fcontext -a -t public_content_rw_t "/var/ftp(/.*)?" restorecon -R -v /var/ftp/{useasp,admin}
這個和上面的設置差不多,只是權限更大,請謹慎操作!
到此,相信大家對“CentOS怎么安裝配置vsftp虛擬用戶登錄”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。