Linux下FTP服務與虛擬用戶及SSL加密

FTP的客戶端有不少種,較爲常見的是網頁瀏覽器,如:firefox等。node

通常操做系統都提供了基礎的命令行方式的FTP客戶端。輸入「ftp」或者「ftp服務器地址」就可使用命令行方式。下面列舉了一些經常使用的FTP命令。數據庫

遠程命令:vim

cd                改變所在目錄瀏覽器

ls                 查看當前目錄下文件列表安全

get               從服務器下載當個文件服務器

mget            從服務器下載多個文件session

put               向服務器上傳單個文件app

mput            向服務器上傳多個文件tcp

pwd             顯示服務器當前目錄ide

quit              退出ftp程序

 

本地命令:

!ls                顯示客戶端當前目錄下的文件列表

!cd               改變客戶端當前所在目錄

!pwd            顯示客戶端當前目錄

 

 

VSFTPD服務器

VSFTPD的安裝

咱們爲了安裝安裝包的簡單,首先先架設一個本地的YUM倉庫,配置本地YUM源。後期會介紹YUM的配置。使用yum 安裝vsftpd

 

[root@xingzheson /]# yum install vsftpd -y

若是系統中開啓了SELinux,那麼須要執行下面的命令,使得VSFTPD能夠被正常訪問

[root@xingzheson /]# setsebool -P ftpd_disable_trans 1

 

VSFTPD安裝完成後,默認的主配置文件是 /etc/vsftpd/vsftpd.conf 。下面按自上而下的順序介紹此文件的參數設定。

anonymous_enable=YES

容許匿名訪問,即容許anonymous帳號訪問FTP服務。

local_enable=YES

容許使用本機賬號登陸

write_enable=YES

用戶能夠讀寫

local_umask=022

默認掩碼爲022,即默認建立的文件權限是755

#anon_upload_enable=YES

是否容許匿名用戶上傳文件夾,默認是註釋掉的

#anon_mkdir_write_enable=YES

是否容許匿名用戶建立新文件夾。默認註釋掉的

dirmessage_enable=YES

若目錄下存在.message文件,則顯示該文件內容

xferlog_enable=YES

默認上傳/下載的日誌文件被記錄在/var/log/vsftpd.log中

connect_from_port_20=YES

從20端口鏈接。默認情況下,20爲FTP的數據傳輸端口

#chown_uploads=YES
#chown_username=whoever

容許新上傳文件的擁有者爲whoever.兩行同時出現的,默認註釋掉

#xferlog_file=/var/log/vsftpd.log

日至位置設定

xferlog_std_format=YES

使用標準格式登記上傳/下載記錄

#data_connection_timeout=120

傳輸延時時間,單位爲秒

#nopriv_user=ftpsecure

使用特殊用戶ftpsecure。這裏能夠把ftpsecure帳戶做爲通常訪問用戶,即全部鏈接FTP服務器的用戶都具備ftpsecure用戶名。爲了安全起見,能夠在/etc/passwd中將ftpsecure的用戶的SHELL設定爲/sbin/nologin。

#ftpd_banner=Welcome to blah FTP service.

登陸提示信息

#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails

若啓用上述兩項設定,則能夠在/etc/vsftpd/banned_emails中創建黑名單

pam_service_name=vsftpd

列出與VSFTPD相關的PAM文件

userlist_enable=YES

當此項設置爲yes的時候,啓用配置文件/etc/vsftpd.user_list。此時有兩種狀況

a.此時若沒有userlist_deny=NO,則/etc/vsftpd.user_list中存在的用戶不能夠訪問VSFTPD服務器

b.此時若存在userlist_deny=NO,則僅接受/etc/vsftpd.user_list中存在的用戶的登陸請求

當此項設定爲NO是,不會啓用配置文件/etc/vsftpd.user_list

tcp_wrappers=YES

啓用TCP Wrapper支持

 

以上是默認安裝後,VSFTPD主配置文件出現的設定選項。除此以外,還有一些經常使用選項

 

guest_enable=YES

guest_username=ftp

guest用戶名,即全部非匿名用戶將具備guest用戶身份

local_root=/var/ftp

anon_root=/var/ftp

設定本機用戶和匿名用戶的FTP根目錄

use_localtime=YES

是否使用本機時間,若設定爲NO,則使用格林尼治時間

#idle_session_timeout=600

客戶端在600秒內沒有任何動做,則服務器自動斷開與客戶端鏈接

max_clients=0

最大客戶鏈接數

max_per_ip=0

每一個客戶端的最大鏈接數

local_max_rate=0

本地帳戶的最大傳輸速率,單位爲秒,0爲不限制

anon_max_rate=0

匿名用戶的最大傳輸速率

 

 

前面已經介紹了VSFTPD的安裝,安裝後須要啓動服務

[root@xingzheson /]# service vsftpd start

設置開機啓動

[root@xingzheson /]# chkconfig vsftpd on

 

VSFTPD虛擬用戶

 

設置虛擬用戶使其僅能訪問VSFTPD,而不能夠登陸系統

首先,咱們須要確認安裝盤上的db4軟件包已經裝上,若是沒有,就要手動安裝

[root@xingzheson /]# rpm -qa |grep db4
db4-utils-4.7.25-16.el6.x86_64
db4-4.7.25-16.el6.x86_64

 

[root@xingzheson Packages]# rpm -ivh db4-utils-4.7.25-16.el6.x86_64.rpm

 

[root@xingzheson Packages]# rpm -ivh db4-4.7.25-16.el6.x86_64.rpm

 

當咱們用yum 安裝時,就已經默認安裝好了。因此不用手動安裝的了

接下來,須要建立虛擬用戶的用戶名和密碼,建立一個文檔,假定這個文件爲/tmp/id.txt 內容以下

xingzheson

123456

zhulaoshi

654321

這裏的單數行爲用戶名,而雙數行爲用戶名對應的密碼。生產用戶帳號的數據庫文件並設定數據文件權限,最後刪除/tmp/id.txt

[root@xingzheson tmp]# db_load -T -t hash -f /tmp/id.txt /etc/vsftpd/vsftpd_id.db
[root@xingzheson tmp]# chmod 600 /etc/vsftpd/vsftpd_id.db
[root@xingzheson tmp]# rm -f /tmp/id.txt

 

下面設定vsftpd.conf 文件

 

wKiom1O2UoSS955xAAMZWAjv1zc401.jpg

wKioL1O2VQyihL_9AAIWF_73_Vs141.jpg

 

 

接着創建PAM文件/etc/pam.d/vsftpd.virtual,

[root@xingzheson tmp]# vi /etc/pam.d/vsftpd.virtual

內容以下:


#%PAM-1.0
auth                    required        pam_userdb.so   db=/etc/vsftpd/vsftpd_id
account                 required        pam_userdb.so   db=/etc/vsftpd/vsftpd_id
session                 reiuired        pam_loginuid.so

 

下面創建相關的目錄:

[root@xingzheson tmp]# mkdir /home/vsftpd
[root@xingzheson tmp]# mkdir -p /home/vsftpd/{xingzheson,zhulaoshi}
[root@xingzheson tmp]# chown -R ftp:ftp /home/vsftpd/

重啓服務,若是系統中開啓了SELinux,那麼須要執行如下命令,容許虛擬用戶存取其家目錄

[root@xingzheson tmp]# setsebool -p allow_ftpd_full_access 1

 

若是設置正確,則虛擬用戶能夠登陸服務器。輸出以下:

wKioL1O2VtOCkpSzAANvBJt6gvI211.jpg

 

虛擬用戶的配置部分徹底正常,可是會發現一個問題,那就是本地用戶沒法正常登陸VSFTPD服務器了。接下來咱們找找緣由

a.用戶的FTP根目錄變爲了/home/vsftpd/$USER.也就是說,若是一個本地用戶zhu嘗試登陸VSFTPD,那麼服務器會試圖尋找/home/vsftpd/zhu這個目錄。可是zhu的家目錄應該是/home/zhu,而/home/vsftpd/zhu 並不存在,因此登陸失敗

b.即便咱們能夠用一些方法讓zhu的家目錄能夠被從新定位到/home/zhu(能夠用連接的方法),可是因爲zhu登陸VSFTPD時的身份其實是ftp(由於啓用了guest_enable=YES),因此仍是無權訪問本身的家目錄

c.及時上述兩個問題解決了,仍是沒法登陸。哎。由於在PAM文件/etc/pam.d/vsftpd.virtual中,只設定了虛擬用戶的驗證。zhu是本地用戶,該用戶的身份驗證並不在虛擬用戶的數據庫中,因此沒法登陸。

 

解決辦法:

wKiom1O2XmTAAM7RAAIpSjScEEM815.jpg

 

接下來,修改/etc/vsftpd/vsftpd.conf文件,在其中加入 user_config_dir=/etc/vsftpd/virtua

重啓服務,創建/etc/vsftpd/virtua文件夾,並在其中創建文本文件/etc/vsftpd/virtua/zhu

[root@xingzheson vsftpd]# mkdir /etc/vsftpd/virtua
[root@xingzheson vsftpd]# vim /etc/vsftpd/virtua/zhu

內容以下:

local_root=/home/zhu           (指定zhu真正的家目錄)
guest_username=zhu         (修改zhu的身份。這裏的zhu的身份就不是ftp了)

 

通過這樣的修改以後,本地用戶和虛擬用戶就均可以登陸VSFTPD了,而且在增長了user_config_dir以後,就能夠給每一個用戶單獨添加不一樣的訪問規則和權限,不管該用戶是本地用戶仍是虛擬用戶。

 

 

配置具備SSL的VSFTPD

爲了提高VSFTPD的傳輸安全性,這裏可使用SSL加密。

首先用OpenSSL爲VSFTPD生成安全證書。這裏生成的證書有效期爲365天

[root@xingzheson virtua]# cd /etc/vsftpd/
[root@xingzheson vsftpd]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

生成證書的時候須要填寫一些信息,任意寫均可以,輸出以下
Generating a 1024 bit RSA private key
.............................++++++
.........................++++++
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:JiangSu
Locality Name (eg, city) [Default City]:NanH^H^H^H^H^H^Hj
Organization Name (eg, company) [Default Company Ltd]:ITD^H^H
Organizational Unit Name (eg, section) []:whatever
Common Name (eg, your name or your server's hostname) []:Martian
Email Address []:abc@xyz.com

接下來編輯/etc/vsftpd/vsftpd.conf,加入如下內容

ssl_enable=YES
allow_anon_ssl=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem

重啓服務,這樣帶有SSL加密的·VSFTPD服務器就假設好了。

相關文章
相關標籤/搜索