服務器搭建(一):FTP服務器之vsftpd搭建

前提:系統 cat /etc/redhat-release

Red Hat Enterprise Linux Server release 7.2 (Maipo)

一:安裝 vsftpd

查看是否安裝vsftpd服務

#rpm -qa | grep vsftpd

沒有則安裝

#yum -y install vsftpd

二:創建根目錄

創建所有項目的文件根目錄

#mkdir -p /home/ifile

三:添加宿主用戶virtual

並將他的家目錄設爲 /home/ifile, 且不可登陸 

#useradd -d /home/ifile -s /sbin/nologin virtual

利用 cat /etc/passwd 查看virtual 是否添加

#cat /etc/passwd

四:新建虛擬用戶/密碼

新建logins 文件

#touch /opt/vsftp/logins

加入虛擬用戶+密碼(奇數行爲用戶名,偶數行爲密碼)到 logins文件

file
^YHNmko0
aios
^YHNmko0
raios
^YHNmko0
waios
^YHNmko0
rwaios
^YHNmko0

 

使用db_load命令生成vsftpd_logins.db文件,每次加入虛擬用戶後這個命令就的執行一次!

 

#db_load -T -t hash -f logins vsftpd_logins.db

將生成的vsftpd_logins.db 文件權限修改爲 600,即只可root讀寫.

#chmod 600 /opt/vsftpd/vsftpd_logins.db

 

五:修改 /etc/pam.d/vsftpd 文件

 

加入以下內容:如果是32位系統則加入####32位系統配置,如果是64位系統則加入####64位系統配置

####32位系統配置
auth    sufficient     /lib/security/pam_userdb.so     db=/etc/vsftpd/vsftpd_logins
account sufficient     /lib/security/pam_userdb.so     db=/etc/vsftpd/vsftpd_logins
####64位系統配置
auth    sufficient      /lib64/security/pam_userdb.so   db=/opt/vsftp/vsftpd_logins
account sufficient      /lib64/security/pam_userdb.so   db=/opt/vsftp/vsftpd_logins

六:配置 vsftpd服務的主配置文件 /etc/vsftpd/vsftpd.conf

先備份:

#cd /etc/vsftpd/
#cp vsftpd.conf vsftpd_backup.conf

修改配置最終如下:

# Example config file /etc/vsftpd/vsftpd.conf
##1.
#關於匿名用戶配置
#
#是否開啓可匿名訪問
anonymous_enable=YES

#當設定爲YES時,表示anonymous將會略過密碼檢驗步驟,
#而直接進入vsftpd伺服器內喔!所以一般預設都是NO的!(登入時會檢查輸入的emai)
no_anon_password=YES

#將某些特殊的email address抵擋住,不讓那些anonymous登入!
#如果以anonymous登入伺服器時,不是會要求輸入密碼嗎?
#密碼不是要你輸入你的email address嗎?如果你很討厭某些email address,
#就可以使用這個設定來將他取消登入的權限!需與下個設定項目配合:
#deny_email_enable=YES

#如果deny_email_enable=YES時,可以利用這個設定項目來規定哪個
#email address不可登入我們的vsftpd喔!在上面設定的檔案內,
#一行輸入一個email address即可!
#banned_email_file=/etc/vsftpd/banned_emails

#是否僅只讀
#anon_world_readable_only=NO

#是否允許anonymous具有除了寫入之外的權限?
#包括刪除與改寫伺服器上的檔案及檔名等權限。
#預設當然是NO!如果要設定爲YES,那麼開放給
#anonymous寫入的目錄亦需要調整權限,讓vsftpd
#的PID擁有者可以寫入才行!
#anon_other_write_enable=YES

#是否讓anonymous具有建立目錄的權限?預設值是NO!
#這個設定項目比較危險一點~當設定爲YES時,表示每個建立的連線都會擁有一支process在負責,
#可以增加vsftpd的效能。不過,除非你的系統比較安全,而且硬體配備比較高,
#否則容易耗盡系統資源喔!一般建議設定爲NO的啦!
one_process_model=NO

#2.
##關於文件上傳配置
#
# 決定是否允許一些FTP命令去更改文件系統。
# 包括上傳文件,刪除文件,新增目錄,刪除目錄
write_enable=NO

#對於上傳的文件設定權限。默認爲666,
#與local_umask配合使用
#file_open_mode=666

#假設umask爲022:
#則對於一個文件夾的話,它的默認屬性爲 777-022=755
#而對於一般的文件的話,則是用 666-022=644.
#如果是077則anonymous傳送過來的檔案權限會是-rw-------
################################
#如果使用vsftp的是本地用戶
#則要修改配置文件中的 local_umask 的值
local_umask=022
#如果使用vsftp的是虛擬用戶
#則要修改配置文件中的 anon_umask 的值
anon_umask=333

# 設定是否允許改變上傳文件的屬主,與下面一個設定項配合使用)
#chown_uploads=YES
#設置想要改變的上傳文件的屬主,如果需要,則輸入一個系統用戶名,例
#如可以把上傳的文件都改成root 屬主。
#chown_username=whoever



##3.
#日誌文件配置
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/xferlog.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES

dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
#除了/var/log/xferlog的wu-ftp格式登錄檔之外,
#還可以具有vsftpd的獨特登錄檔格式喔!
#如果你的FTP伺服器並不是很忙碌,
#或許訂出兩個登錄檔的撰寫(/var/log/{vsftpd.log,xferlog)是不錯的。





##4.
#伺服器(ftp文件存儲服務器)系統環境配置
#
#主動式連線的數據鏈接的port
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES

#vsftpd服務的命令通道port
listen_port=4449

#是否使用本地時間?vsftpd預設使用GMT時間(格林威治),
#所以預設的FTP內的檔案日期會比臺灣晚8小時
#use_localtime=YES

#支援資料流的被動式連線模式(passive mode),一定要設定爲YES
pasv_enable=YES

#若設定爲YES表示vsftpd是以standalone的方式來啓動的
listen=YES

#當使用者進入某個目錄時,會顯示該目錄需要注意的內容,
#顯示的檔案預設是.message ,你可以使用底下的設定項目來修訂
dirmessage_enable=YES

#當dirmessage_enable=YES時,可以設定這個項目來讓vsftpd尋找該檔案來顯示訊息
#message_file=.message

# You may fully customise the login banner string:
#ftpd_banner=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Welcome to SVFTPD SERVICE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

#使用ftp命令後的歡迎顯示的內容文件
banner_file=/etc/vsftpd/welcome.txt

#單位是秒,在資料連接的主動式連線模式下,
#我們發出的連接訊號在60秒內得不到用戶端的迴應,則不等待並強制斷線咯。
connect_timeout=60

#當使用者以被動式PASV來進行資料傳輸時,
#如果伺服器啓用passive port並等待client超過60秒而無迴應,
#那麼就給他強制斷線!這個設定值與connect_timeout類似,
#不過一個是管理主動連線,一個管理被動連線。
accept_timeout=60

# You may change the default value for timing out an idle session.
#如果使用者在600秒內都沒有命令動作,強制離線!避免佔着茅坑不拉屎~
#idle_session_timeout=600

#如果伺服器與用戶端的資料連線已經成功建立(不論主動還是被動連線),
#但是可能由於線路問題導致300秒內還是無法順利的完成資料的傳送,那用戶端的連線就會被我們的vsftpd強制剔除!
#data_connection_timeout=120

#如果vsftpd是以stand alone方式啓動的,那麼這個設定項目可以設定同一時間,
#最多有多少client可以同時連上vsftpd哩!限制使用FTP的用量!
max_clients=50

#與上面max_clients類似,這裏是同一個IP同一時間可允許多少連線
max_per_ip=5

#被動式連線埠口的限制
pasv_min_port=65400
pasv_max_port=65410

#
ls_recurse_enable=NO




##5.
#系統安全配置
#
#如果設定爲YES ,那麼client就優先(預設)使用ASCII格式下載檔案。
#ascii_download_enable=YES

#如果設定爲YES ,那麼client就優先(預設)使用ASCII格式上傳檔案。
#ascii_upload_enable=YES

#這個設定項目比較危險一點~當設定爲YES時,表示每個建立的連線都會擁有一支process在負責,
#可以增加vsftpd的效能。不過,除非你的系統比較安全,而且硬體配備比較高,
#否則容易耗盡系統資源喔!一般建議設定爲NO的啦!
one_process_model=NO

#我們的vsftpd預設以nobody作爲此一服務執行者的權限。
#因爲nobody的權限相當的低,因此即使被入侵,入侵者僅能取得nobody的權限
#nopriv_user=nobody

#這個是pam模組的名稱,我們放置在/etc/pam.d/vsftpd即是這個
pam_service_name=vsftpd



##6.
#權限配置.
#
#6.1 主機登陸權限
#TCP wrappers是透過用戶端想要連結的程式檔名,然後分析用戶端的IP ,看看是否需要放行
#配置 /etc/hosts.allow和 /etc/hosts.deny
#1.樣例
#       vsftpd : ALL      #允許/禁止所有ip 訪問vsftpd服務
#       ALL : 127.0.0.1   #允許/禁止本機訪問本機的所有服務
#       vsftpd : 127.0.0. #允許127.0.0.段的網絡訪問vsftpd服務
#2注意: 若.allow文件和.deny文件同時滿足的ip則以.allow爲準
tcp_wrappers=YES


#6.2 chroot權限
#在預設的情況下,是否要將使用者限制在自己的家目錄之內(chroot)?
#如果是 YES 代表用戶預設就會被 chroot,如果是 NO, 則預設是沒有 chroot。
#不過,實際還是需要底下的兩個參數互相參考才行。為了安全性,這裡應該要設定成 YES 纔好。
# 爲YES時,本地所有用戶志顯示自己的主目錄,
#
#設置虛擬用戶被鎖定在自己的宿主目錄中
chroot_local_user=YES

#是否啟用 chroot 寫入列表的功能?與底下的 chroot_list_flie 有關!
#這個項目得要開啟,否則底下的列表檔案會無效。
#chroot_list_enable=YES

#如果 chroot_list_enable=YES 那麼就必須設定這個項目了!
#這個項目與 chroot_local_user 有關
#chroot_list_file=/etc/vsftpd/chroot_list


#6.3 用戶訪問權限
#是否藉助vsftpd的抵擋機制來處理某些不受歡迎的帳號,與底下的參數設定有關
#相當於開關
userlist_enable=YES
#
# enable=YES 時,ftpusers允許訪問,user_list允許訪問
# enable=NO  時,ftpusers禁止訪問,user_list允許訪問
# deny  =YES 時,ftpusers禁止訪問,user_list禁止訪問
# deny  =NO  時,ftpusers禁止訪問,user_list允許訪問
#
#當userlist_enable=YES時纔會生效的設定,若此設定值爲YES時,
#則當使用者帳號被列入到某個檔案時,在該檔案內的使用者將無法登入vsftpd伺服器!
#該檔案檔名與下列設定項目有關。
userlist_deny=NO

#若上面userlist_deny=YES時,則這個檔案內的帳號都無法使用vsftpd
#若上面userlist_deny=NO時,則這個檔案內的賬號才能使用vsftpd
userlist_file=/etc/vsftpd/user_list



##7.
#本地用戶配置
#
#這個設定值必須要爲YES時,在/etc/passwd內的帳號才能以實體用戶的方式登入我們的vsftpd伺服器
local_enable=YES

#虛擬用戶和本地用戶權限相同, 默認是NO
#virtual_use_local_privs=YES

#若這個值設定爲YES時,那麼任何實體帳號,均會被假設成爲guest喔(所以預設是不開放的)
#如果啓用,所有的非匿名用戶登錄時將被視爲遊客
guest_enable=YES

#在guest_enable=YES時纔會生效,指定訪客的身份而已
guest_username=virtual

#限制實體用戶的總下載流量
local_max_rate=1000000

#對不同的虛擬用戶配置不同的權限, vsconf 是一個文件夾,需要用戶創建, 其下面的每個文件的文件名爲 四. 中的虛擬用戶名
user_config_dir=/etc/vsftpd/vsconf

##8.EXTRA or uNKNOW
#async_abor_enable=YES

 

更爲具體的請參考:

http://linux.vbird.org/linux_server/0410vsftpd.php#server_real_chroot2

http://bbs.51cto.com/thread-717151-1.html

配合上面的配置

     1. 添加 /etc/vsftpd/welcome.txt 文件:

#touch /etc/vsftpd/welcome.txt

加上:

歡迎使用VSFTPD文件服務
若有需要請聯繫133-3333-3333

    2. 添加 /etc/vsftpd/chroot_list 文件

#touch /etc/vsftpd/chroot_list

加上aios, 表示 除 aios外,其他用戶都是chroot在他們的家目錄下

aios

    3. 而 user_list 文件會在系統安裝 vsftpd服務時自動創建, 加了如上配置後表示只有 user_list 中的用戶才能登陸vsftpd服務.

所以刪除以前的數據, 加入 file, aios, raios, waios, rwaios;

file
aios
raios
waios
rwaios

4. 添加個虛擬用戶的個性配置

file: 可上傳,可下載,可建目錄, 可刪除或重命名目錄/文件, 可修改目錄/文件的權限屬性 所有項目

# file
local_root=/home/ifile

write_enable=YES

anon_umask=022

# 可顯示目錄和文件
anon_world_readable_only=NO

# 可刪除/重命名
anon_other_write_enable=YES

# 可上傳
anon_upload_enable=YES

# 可創建目錄
anon_mkdir_write_enable=YES

virtual_use_local_privs=YES
chmod_enable=YES

aois: 可上傳,可下載,可建目錄, 可刪除或重命名目錄/文件, 可修改目錄/文件的權限屬性  針對aios項目

# file
local_root=/home/ifile/aios

write_enable=YES

anon_umask=022

# 可顯示目錄和文件
anon_world_readable_only=NO

# 可刪除/重命名
anon_other_write_enable=YES

# 可上傳
anon_upload_enable=YES

# 可創建目錄
anon_mkdir_write_enable=YES

virtual_use_local_privs=YES
chmod_enable=YES

 

raios: 可下載  針對aios 項目

# raios - 只讀
local_root=/home/ifile/aios

#使 raios 用戶的能下載,也只能下載;寫成YES,將不能列出文件和目錄
anon_world_readable_only=NO

waios: 可上傳,可下載  針對aios項目

# waios - 可讀可寫
local_root=/home/ifile/aios

#寫成YES,將不能列出文件和目錄
anon_world_readable_only=NO

#開啓可寫
write_enable=YES

#可上傳
anon_upload_enable=YES

#
anon_umask=022

rwaios: 可上傳,可下載,可建目錄  針對aios項目

# rwaios = 可讀可寫可建目錄
local_root=/home/ifile/aios

# 可下載
anon_world_readable_only=NO

# 可寫
write_enable=YES

# 可上傳
anon_upload_enable=YES

#
anon_umask=022

# 可mkdir
anon_mkdir_write_enable=YES

 

此時的文件服務器可以介紹爲:

    1. 可匿名登陸, 無需密碼, 且登陸後的家目錄爲 ftp 用戶的家目錄, 一般爲/var/ftp

    2. chroot_list 放的是可以切換到其他目錄的用戶清單

    3. user_list 放的是可登陸該vsftpd服務的用戶清單

    4. 若添加新用戶,且該用戶綁定在virtual用戶下, 在 /opt/vsftpd/logins 中加入新增用戶名和密碼,重新使用命令db_load生成 .db文件並覆蓋, 在/etc/vsftpd/vsconf/ 文件夾下新增新增用戶的個性文件,並配置相關權限, 最後還要在 /etc/vsftpd/user_list 中加入該新增用戶,表示該用戶可登陸!

 

七: 測試

 

使用FileZilla ftp客戶端測試, 客戶端下載地址爲: https://filezilla-project.org/download.php?type=client

準備工作: 

    1.在 virtual 用戶的家目錄下 創建兩個項目分別爲 aios 和 hra, 並修改文件權限爲 750

#cd /home/ifile/
#mkdir aios
#mkdir hra

    修改其權限

#chmod 750 aios/
#chmod 750 hra/

因爲 我們待會要把這個兩個項目做成虛擬用戶的家目錄, 所以他們相對於 virtual 用戶而言不能有寫的權限,否則其實vsftpd服務啓動成功了,在進入他們的目錄時候會報 “500 OOPS: vsftpd: refusing to run with writable root inside chroot()”錯誤.

這樣兩個項目的根目錄就建好了, 接着就分別在 aios/ 和 hra/下創建 imgs/, txts/, excels/ 文件和 imgs/,pdfs/, tables/文件

#mkdir /aios/imgs
#mkdir /aios/txts
#mkdir /aios/excels

#mkdir /hra/imgs
#mkdir /hra/pdfs
#mkdir /hra/tables

緊接着修改新建的 6個文件的owner和group,把他們改成 virtual的:

#cd aios/
#chown virtual:virtual imgs/
#chown virtual:virtual txts/
#chown virtual:virtual excels/

#cd ../hra/
#chown virtual:virtual imgs/
#chown virtual:virtual pdfs/
#chown virtual:virtual tables/

最後有

home/	->	ifile/	->	aios/	->	imgs/
 (root)		(root)	      (root/750)     (virtual/755)
					->	txts/
					     (virtual/755)
					->	excels/
					     (virtual/755)

home/	->	ifile/	->	hra/	->	imgs/
(root)		(root)	      (root/750)     (virtual/755)
					->	pdfs/
					     (virtual/755)
					->	tables/
					     (virtual/755)                  

 

準備工作完畢,開始測試.

1.啓動服務:

#systemctl start vsftpd.service

 

2.登陸 waios:

 

上傳  MySQL 5.1參考手冊.chm 文件, 

我想把它放在 txts/chms/ 下,所以要建一個目錄

但是發現:

狀態:	正在創建目錄“/txts/chms”...
命令:	MKD chms
響應:	550 Permission denied.

原來 waios 沒有新建目錄的權限,所以 到 rwaios 或者 aios 下去創建:

狀態:	正在創建目錄“/txts/chms”...
狀態:	讀取“/txts”的目錄列表...
狀態:	列出“/txts”的目錄成功
狀態:	讀取“/txts/chms”的目錄列表...
狀態:	列出“/txts/chms”的目錄成功

 

目錄創建成功後,切回到 waios 用戶, 上傳 MySQL 5.1參考手冊.chm 文件

 

 

3. 若我想上傳 jdk_1.7.CHM 文件, 但上傳後不想被其他人任何人下載, 這是就用到 aios 或 file 這兩個虛擬賬號的 chmod_enable=YES 修改文件權限:

右擊 上傳後的 jdk_1.7.CHM 文件, 選擇文件權限,變成 040, 確定

爲什麼是 040呢, 首先最後一個0那是一定的,第一個0那是應爲 無論是file, aios, raios, waios, rwaios 都是綁定在 virtual這個用戶上的,他們具體的操作都是有virtual完成, 所以第一個要爲0,不能讓 其他虛擬用戶讀.

登陸 raios 看看能不能下載,發現:

而此時 file 則是可以上傳、下載、刪除所有項目文件。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章