本來目錄很長的 因為感覺不太美觀 所以小標題都刪掉了 本文介紹了
- 本地用戶的FTP服務器搭建實例
- 匿名用戶的FTP服務器搭建實例
- 虛擬用戶的FTP服務器搭建實例
- 企業常見類型搭建實驗
配置與管理FTP服務器
- 配置與管理FTP服務器
- 一、FTP相關知識
- 二、項目設計與準備
- 三、項目實施
- 四、認識vsftpd的配置文件
- 五、配置匿名用戶FTP服務器
- 六、配置本地用戶FTP服務器
- 七、配置虛擬用戶FTP服務器
- 八、主被動模式配置
- 九、企業實戰與應用
配置與管理FTP服務器
一、FTP相關知識
一、 FTP工作原理
FTP大大的簡化了文件傳輸的復雜性,它能夠使文件通過網絡從一臺主機傳送到另一個主機,卻不受其計算機和操作系統類型的限制。無論是PC、服務器、大型機、還是ISO、Linux、Windows。只要雙方都支持FTP,就可以方便可靠的傳送文件。
二、 FTP具體的工作原理
- 客戶端向服務器發送請求、同時客戶端系統動態的打開一個大于1024的端口等待服務器連接
- 若FTP服務器在端口21偵聽到該請求、則會在客戶端1031端口和服務器的21端口之間建立一個FTP會話連接
- 當需要傳輸數據時、FTP客戶端再動態的打開一個大于1024的端口(比如1032端口)連接到服務器的20端口,并再這兩個端口之間傳輸數據。當數據傳輸完畢,這兩個端口會自動關閉。
- 數據傳輸完畢,如果客戶端不向服務端發送拆除連接的請求,則繼續保持連接
- 當FTP客戶端向服務端發送拆除連接的請求并確認后、客戶端將端口與FTP服務的連接,客戶端上動態分配的端口將自動釋放。
三、 FTP工作模式
FTP服務有兩種工作模式:主動傳輸模式和被動傳輸模式
四、 匿名用戶
FTP服務不同于WWW它首先要求登錄到服務器上,然后再傳輸文件,這對于很多公開提供軟件下載的服務器來說十分不便,于是匿名用戶訪問就誕生了。使用一個公共的用戶anonymoud,讓任何用戶都可以很方便的從這些服務器上下載軟件。
二、項目設計與準備
2臺安裝好Centos7的計算機、一臺作為服務器、一臺作為客戶端。
主機名稱 | 操作系統 | IP地址 | 角色 |
---|---|---|---|
FTP服務器端 | Centos7 | 192.168.10.101 | FTP服務器端 |
FTP客戶端 | Centos7 | 192.168.10.102 | FTP客戶端 |
Windows客戶端 | Windows | 192.168.10.100 | FTP客戶端 |
三、項目實施
一、本地yum源
插一句 如果你不會安裝軟件或者不會搭建本地yum源 可以先看看我寫的教程 點我前往 學習配置大概需要3~5分鐘
二、IP網卡配置
如果你不會配置網卡的話 可以看看我寫的教程 點我前往 學習一下 大概八分鐘
(1) 檢查yum源是否配置成功
yum makecache // 清除緩存
yum repolist //查看倉庫列表 //
(2) 安裝vsftpd服務
[root@ftp-server ~]# yum install -y vsftpd* ftp
(3) 啟動vsftpd服務并關閉防火墻
[root@ftp-server ~]# systemctl stop firewalld
[root@ftp-server ~]# systemctl restart vsftpd
[root@ftp-server ~]# setenforce 0
四、認識vsftpd的配置文件
vsftpd服務程序的主配置文件(/etc/vsftpd/vsftpd.conf) 下面的命令可以過濾到沒有必要的注釋
[root@ftp-server ~]# cat /etc/vsftpd/vsftpd.conf |grep -v "#"
# 下面的是文件種的所有參數
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YESpam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
(1) 主配置文件參數說明
vsftpd服務程序主配置文件種常用的參數及其作用如下表。在后續的實驗種將演示重要的參數用法,幫助大家熟悉并掌握。
選項 | 說明 |
---|---|
anonymous_enable | 設置是否允許匿名用戶登錄服務器 |
local_enable | 設置是否允許本地用戶登錄服務器 |
write_enable | 設置是否允許寫操作 |
local_umask | 設置本地用戶創建文件的umask值 |
anon*_upload_enable* | 設置是否允許匿名用戶上傳文件 |
anon*_mkdir_write_enable* | 設置是否允許匿名用戶建立目錄 |
xferlog_enable | 是否激活日志功能 |
chown_uploads | 修改匿名用戶上傳文件的所有者 |
chown_username=whoever | 啟用chown_uploads=YES時,指定為主用戶賬戶,whoever表示你的ftp用戶 |
chroot*_local_user* | 設置是否將所有用戶限制在其主目錄 |
chroot*_list_enable* | 設置是否啟用限制用戶的名單 |
chroot*_list_file* | 設置是否限制/排除主目錄下的用戶名單,限制/排除有chrootlocaluser值決定 |
allow*_writeable_choot* | 設置chroot目錄的寫權限 |
(2) FTP數據庫文件說明
/etc/pam.d/vsftpd
vsftpd的PAM配置文件、主要用來加強vsftpd服務的用戶認證
(3) FTP用戶列表文件說明
/etc/vsftpd/ftpusers
所有位于此文件內的用戶都不能訪問vsftpd服務
。當然為了安全起見,這個文件種默認包括了root、bin和daemon等用戶
(4) FTP拒絕訪問列表說明
/etc/vsftpd/user_list
這個文件包括的用戶可能是備拒絕訪問vsftpd服務的,也可能是允許訪問的。主要取決于/etc/vsftpd/vsftpd.conf種的userlist_deny
參數是設置為yes
還是no
- userlist_deny=NO時,僅允許文件中的用戶訪問FTP服務器
- userlist_deny=YES時,反之
(5) FTP默認目錄說明
/var/ftp文件夾
該文件夾是vsftpd提供服務的文件集散地,包括一個pub子目錄。在默認配置下,所有的目錄都只是只讀的。
五、配置匿名用戶FTP服務器
-
vsftpd允許用戶以3種認證模式登錄到FTP服務器上。
- 匿名用戶:任何人都可以直接登錄服務器
- 本地用戶:通過本地用戶輸入密碼登錄服務器
- 虛擬用戶:本身不存在、是一個虛擬出來的用戶、就算黑客破解的用戶信息也無法登錄服務器
-
匿名用戶登錄的參數說明
參數 作用 anonymous_enable=YES 允許匿名用戶訪問 anon_umask=022 匿名用戶上傳文件的umask值 anon_upload_enable=YES 允許匿名用戶上傳文件 anon_mkdir_write_enable=YES 允許匿名用戶創建文件 anon_other_write_enable=YES 允許匿名用戶修改目錄名稱或刪除目錄 -
配置匿名用戶登錄FTP服務器實例
題目要求:搭建一臺FTP服務器,允許匿名用戶上傳和下載文件,匿名用戶的根目錄設置為/var/ftp
新建測試文件 編輯主配置文件
[root@ftp-server ~]# touch /var/ftp/pub/sample.tar [root@ftp-server ~]# vi /etc/vsftpd/vsftpd.conf
在文件后面編輯如下四行 最前面的是行號
12 anonymous_enable=YES 29 anon_upload_enable=YES # 允許上傳文件 如果前面有# 刪除最前面的 “#” 33 anon_mkdir_write_enable=YES # 允許創建文件
重啟FTP服務器
[root@ftp-server ~]# systemctl restart vsftpd [root@ftp-server ~]# systemctl stop firewalld
在windows客戶端上輸入
ftp://192.168.10.101
打開pub目錄Win+R
打開運行 輸入ftp://192.168.10.101
進入pub目錄
新建文件 發現會出錯
出錯原因是什么呢?
系統本地的權限沒有設置
設置本地系統權限,將權限直接拉滿
[root@ftp-server ~]# chmod 777 /var/ftp/pub // 給目錄所屬設置為ftp [root@ftp-server ~]# systemctl restart vsftpd // 重啟ftp服務
在Windows客戶端再次測試,在pub目錄下創建新文件夾
六、配置本地用戶FTP服務器
一、FTP服務器配置要求
公司現在又一臺FTP服務器和Web服務器,FTP主要用于維護公司網站內容,包括上傳文件、創建目錄、更新網頁等。公司現在又兩個部門負責維護任務。兩者分別使用team1和team2賬號來管理,僅允許team1和team2登錄服務器.
二、要求分析
將FTP服務器和Web服務器在一起時企業經常采用的方法,這樣方便維護網站,為了增強安全性,首先需要使用僅允許本地用戶訪問,并禁用匿名用戶登錄。其次將team1和team2鎖在/web/www/html目錄下
。
三、解決方案
- 建立維護網站內容的FTP賬號 并 禁止本地登錄 為其設置密碼
[root@ftp-server ~]# mkdir /web/www/html -p # 創建team1和team2的所屬目錄
[root@ftp-server ~]# useradd team1 -d /web/www/html# 禁止登錄本地并指定家錄
[root@ftp-server ~]# useradd team2 -d /web/www/html
[root@ftp-server ~]# useradd user1 -d /web/www/html
[root@ftp-server ~]# echo "123" | passwd --stdin user1 # 設置密碼
[root@ftp-server ~]# echo "123" | passwd --stdin team1
[root@ftp-server ~]# echo "123" | passwd --stdin team2
-
配置vsftpd.conf主配置文件增加或修改相應內容
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf 12 anonymous_enable=NO # 不允許匿名用戶訪問 13 local_root=/web/www/html # 添加這一行 102 chroot_list_enable=YES # 取消注釋 激活chroot功能 104 chroot_list_file=/etc/vsftpd/chroot_list # 取消注釋 鎖定用戶在根目錄種的列表文件 105 allow_writeable_chroot=YES # 啟用chroot就一定加入這條:允許chroot限制 106 write_enable=yes
-
建立/etc/vsftpd/chroot_list文件、添加team1、team2賬號
[root@ftp-server vsftpd]# vim /etc/vsftpd/chroot_list [root@ftp-server vsftpd]# cat chroot_list team1 team2
-
創建測試文件 并賦予目錄權限值
[root@ftp-server vsftpd]# touch /web/www/html/test.tar [root@ftp-server vsftpd]# chmod -R 777 /web/www/html/test.tar
-
重啟ftp服務
[root@ftp-server vsftpd]# systemctl restart vsftpd
-
注意
今天做這個實驗的時候 發現了一個特別重要的點
chroot_list的作用是限制文件內的用戶固定在目錄種
-
chroot_list=YES的話
僅文件中的用戶
可以訪問所有目錄 例如/etc
-
chroot_list=No的話
除文件中的用戶
不可以訪問所有目錄
-
四、測試
-
限制在本地目錄的team1
[root@ftp-server ~]# ftp localhost 21 Trying ::1... Connected to localhost (::1). 220 (vsFTPd 3.0.2) Name (localhost:root): team1 # 輸入登錄的用戶 331 Please specify the password. Password: # 輸入密碼 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd # 查看當前目錄 257 "/" ftp> cd /etc/ # 嘗試進入/etc目錄 550 Failed to change directory. # 拒絕
-
不限制在本地用戶的user1
[root@ftp-server ~]# ftp localhost 21 Trying ::1... Connected to localhost (::1). 220 (vsFTPd 3.0.2) Name (localhost:root): user1 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd /etc # 嘗試進入/etc 250 Directory successfully changed. # 成功
七、配置虛擬用戶FTP服務器
一、要求:
使用虛擬用戶user2、user3登錄FTP服務器、訪問主目錄時/var/ftp/vuser,用戶只允許查看文件、不允許上傳、修改等操作
二、 創建用戶數據庫
三、創建用戶文本文件
# 進入目錄
[root@ftp-server ~]# cd /etc/vsftpd/
# 創建文本文件
[root@ftp-server vsftpd]# vim vuer
user2
123
user3
123
# 文本文件的格式為
用戶
密碼
用戶
密碼
四、生成數據庫
保存虛擬賬號及密碼的文本文件無法被系統賬號直接調用 需要使用db_load命令生成db數據庫文件
[root@ftp-server vsftpd]# db_load -T -t hash -f vuer vuer.db
五、配置PAM文件
為了使服務器能夠使用數據庫問就按,對客戶端進行身份驗證,需要調用系統的PAM模塊。
下面修改vsftpd對應的PAM配置文件/etc/pam.d/vsftpd、將默認配置使用“#”全部注釋
[root@ftp-server vsftpd]# vim /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
auth required pam_userdb.so dn=/etc/vsftpd/vuser
account required pam_userdb.so dn=/etc/vsftpd/vuser
六、編輯主配置文件
[root@ftp-server vsftpd]# vim /etc/vsftpd/vsftpd.conf # 在最后添加下面四行
129 guest_enable=YES
130 guest_username=vuser
131 user_config_dir=/etc/vsftpd/vuser_conf
132 allow_writeable_chroot=YES
七、配置虛擬用戶權限
[root@ftp-server vsftpd]# cd /etc/vsftpd
[root@ftp-server vsftpd]# mkdir vuser_conf
[root@ftp-server vsftpd]# cd vuser_conf
[root@ftp-server vuser_conf]# vim user2
local_root=/var/ftp/vuser
[root@ftp-server vuser_conf]# vim user3
local_root=/var/ftp/vuser
八、創建測試文件
[root@ftp-server vuser_conf]# touch /var/ftp/vuser/user2.tar
[root@ftp-server vuser_conf]# touch /var/ftp/vuser/user3.tar
九、重啟測試
# 重啟服務
[root@ftp-server vuser_conf]# systemctl restart vsftpd# 登錄user2
[root@ftp-server vuser_conf]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): user2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||60168|).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Jun 06 18:46 user2.tar
-rw-r--r-- 1 0 0 0 Jun 06 18:46 user3.tar# user2其他權限測試
ftp> cd /etc/ # 進入其它目錄權限
550 Failed to change directory. # 失敗
ftp> mkdir user2 # 創建文件權限
550 Permission denied. # 失敗# 登錄user3
[root@ftp-server vuser_conf]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): user3
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||28511|).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Jun 06 19:03 user2.tar
-rw-r--r-- 1 0 0 0 Jun 06 19:03 user3.tar# user3其他權限測試
ftp> cd /etc/ # 進入其它目錄權限
550 Failed to change directory. # 失敗
ftp> mkdir user3 # 創建文件權限
550 Permission denied. # 失敗
八、主被動模式配置
(1) 主模式配置
# 開啟主動模式
port_enable=YES
(2) 被動模式配置
pasv_enable=YES
# 被動模式最低端口
PASV_min_port=%number%
# 被動模式最高端口
PASV_max_port=%number%#=
九、企業實戰與應用
一、 要求
公司計劃搭建FTP服務器、為客戶提供相關文檔下載。對所有互聯網用戶開放共享目錄,允許下載產品信息,禁止上傳
。公司的合作單位能夠**使用FTP服務器進行上傳和下載,但不可刪除數據,**并且為保證服務器的穩定性,需要進行適當的優化設置。
二、 分析
對不同用戶進行不同的權限限制,FTP服務器需要實現用戶的審核。為了考慮安全性,關閉實體用戶登錄。使用虛擬用戶驗證機制。
三、 項目實施
四、創建用戶數據庫
-
創建用戶數據庫
添加兩個虛擬用戶 ftps為公共用戶 vip為客戶用戶
[root@ftp-server vuser_conf]# cd /etc/vsftpd/ [root@ftp-server vsftpd]# vim ftpuser ftps 123 vip 123
-
生成數據庫
[root@ftp-server vsftpd]# db_load -T -t hash -f ftpuser ftpuser.db
五、 配置PAM文件
-
修改文件
[root@ftp-server vsftpd]# vim /etc/pam.d/vsftpd #%PAM-1.0 #session optional pam_keyinit.so force revoke #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so #auth include password-auth #account include password-auth #session required pam_loginuid.so #session include password-auth auth required pam_userdb.so db=/etc/vsftpd/ftpuser # 換成ftpuser account required pam_userdb.so db=/etc/vsftpd/ftpuser # 換成ftpuser
六、 編輯主配置文件
在最后面添加四行
[root@ftp-server vsftpd]# vim /etc/vsftpd/vsftpd.conf
129 guest_enable=YES
130 guest_username=vsftp
131 allow_writeable_chroot=YES
132 user_config_dir=/etc/vsftpd/ftpuser_conf # 指定虛擬用戶的配置文件目錄
七、 配置虛擬用戶配置文件
[root@ftp-server vsftpd]# mkdir /etc/vsftpd/ftpuser_conf
-
ftps配置文件
[root@ftp-server vsftpd]# vim /etc/vsftpd/ftpuser_conf/ftps local_root=/var/ftp/public # 指定根目錄 anon_upload_enable=YES # 允許下載 write_enable=NO # 禁止上傳創建文件
-
vip配置文件
[root@ftp-server vsftpd]# vim /etc/vsftpd/ftpuser_conf/vip local_root=/var/ftp/public anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES anon_umask=022
八、 創建共享目錄和測試文件
[root@ftp-server vsftpd]# mkdir /var/ftp/public
[root@ftp-server vsftpd]# chmod 777 /var/ftp/public
[root@ftp-server vsftpd]# touch /var/ftp/public/test.txt
九、 重啟測試
ftps測試
-
下載和查看文件測試
root@ftp-server vsftpd]# systemctl restart vsftpd [root@ftp-server vsftpd]# ftp localhost 21 Trying ::1... Connected to localhost (::1). 220 (vsFTPd 3.0.2) Name (localhost:root): ftps 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 229 Entering Extended Passive Mode (|||27230|). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Jun 06 19:29 test.txt 226 Directory send OK. ftp> get test.txt local: test.txt remote: test.txt 229 Entering Extended Passive Mode (|||57910|). 150 Opening BINARY mode data connection for test.txt (0 bytes). 226 Transfer complete.
-
上傳文件測試
ftp> put test.txt local: test.txt remote: test.txt 229 Entering Extended Passive Mode (|||46731|). 550 Permission denied.
-
創建文件測試
ftp> mkdir toto 550 Permission denied.
vip測試
-
下載查看文件測試
[root@ftp-server vsftpd]# ftp localhost 21 Trying ::1... Connected to localhost (::1). 220 (vsFTPd 3.0.2) Name (localhost:root): vip 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls # 查看 229 Entering Extended Passive Mode (|||46926|). 150 Here comes the directory listing. -rwxrwxrwx 1 0 0 0 Jun 06 19:39 test.txt 226 Directory send OK. ftp> get test.txt # 下載 local: test.txt remote: test.txt 229 Entering Extended Passive Mode (|||29663|). 150 Opening BINARY mode data connection for test.txt (0 bytes). 226 Transfer complete.
上傳文件測試
ftp> put chroot_list local: chroot_list remote: chroot_list 229 Entering Extended Passive Mode (|||60080|). 150 Ok to send data. 226 Transfer complete. 12 bytes sent in 3.6e-05 secs (333.33 Kbytes/sec)
創建刪除文件測試
ftp> mkdir test # 創建目錄test 257 "/test" created # 成功 ftp> ls # 查看 229 Entering Extended Passive Mode (|||15449|). 150 Here comes the directory listing. -rw-r--r-- 1 14 50 12 Jun 06 19:40 chroot_list drwxr-xr-x 2 14 50 6 Jun 06 19:41 test -rwxrwxrwx 1 0 0 0 Jun 06 19:39 test.txt 226 Directory send OK. ftp> rmdir test # 刪除 250 Remove directory operation successful. #成功