(上課時間2021-08-05,筆記整理時間2021-08-08)html
本節所講內容:node
4.1 VSFTP 服務器概述linux
4.2 安裝配置 VSFTPweb
4.3 實戰:匿名訪問 VSFTP算法
4.4 實戰:用戶名密碼方式訪問 VSFTPshell
4.5 NFS 概述 配置 NFS 服務器並實現開機自動掛載vim
服務器信息:centos
FTP服務端:CentOS 80 IP:10.170.80.80瀏覽器
FTP客戶端:CentOS 81 IP:10.170.80.81安全
服務器概述
FTP服務器( File Transfer Protocol Server )是在互聯網上提供文件 存儲 和訪問服務的計算機,它們依照 FTP 協議提供服務。
FTP File Transfer Protocol: 文件傳輸協議)做用: Internet 上用來傳送文件的協議。
常見FTP 服務器:
Windows:Serv U 、 FTP Server 、 filezilla _server
Linux:ProFTPD: Professional FTP daemon 一個 Unix 平臺上或是類 Unix 平臺上(如Linux, FreeBSD 等)的 FTP 服務器程序。
VSFTP 是一個基於 GPL 發佈的類 Unix 系統上使用的 FTP 服務器 軟件,它的全稱是 Very Secure
FTP 今後名稱能夠看出來,編制者的初衷是代碼的安全。
特色:它是一個安全、高速、穩定的 FTP 服務器 。
VSFTP 模式: C/S 模式
監聽端口:20 、 21
[root@centos80 ~]# vim /etc/services #查看 services 文件
如圖 4 1 所示
FTP 監聽的端口有兩個:
端口 20:用於傳輸數據
端口 21:用於傳輸指令
主動和被動模式:
FTP 會話包含了兩個通道,控制通道和數據傳輸通道,FTP 的工做有兩種模式,一種是主動模式,一種是被動模式,以 FTP Server 爲參照,主動模式,服務器主動鏈接客戶端傳輸,被動模式,等待客戶的鏈接。
主動模式(PORT)的工做原理:
FTP 客戶端鏈接到 FTP 服務器的 21 號端口,發送用戶名和密碼,客戶端隨機開放一個端口(1024以上),發送 PORT 命令到 FTP 服務器,告知服務器客戶端採用主動模式並開放端口,FTP 服務器收到PORT 主動模式命令和端口後,經過服務器的 20 號端口和客戶端開放的端口鏈接,發送數據,原理如圖4-2 所示,(不管是主動仍是被動模式,首先的控制通道都是先創建起來,只是在數據傳輸模式上的區別)
被動模式的工做原理:
PASV 是 Passive 的縮寫,中文成爲被動模式,工做原理:FTP 客戶端鏈接到 FTP 服務器所監聽的21 號端口,發送用戶名和密碼,發送 PASV 命令到 FTP 服務器,服務器在本地隨機開放一個端口(1024 以上),而後把開放的端口告知客戶端,然後客戶端再鏈接到服務器開放的端口進行數據傳輸,原理如圖 4-3 所示。
圖 4-3 FTP 被動模式工做原理圖
主 21 20
被 21 1024 以上
使用 rpm 安裝本地光盤中的 vsftp 程序包:
[root@centos80 ~]# rpm -ivh /media/Packages/vsftpd-3.0.2-25.el7.x86_64.rpm
或:
使用 yum 直接安裝(兩種安裝方法,選取其中一種便可):
[root@centos80 ~]# yum -y install vsftpd
[root@CentOS81 ~]# yum install -y lftp #使用 yum 安裝 ftp 客戶端
lftp Linux 客戶端:
lftp 是一個功能強大的下載工具,它支持訪問文件的協議: ftp、ftps、http、https、hftp(其中ftps 和 https 須要在編譯的時候包含 openssl 庫),lftp 的界面很是相似一個 Shell,有命令補全、歷史記錄、容許多個後臺任務執行等功能,使用起來很是方便。它還有書籤、排隊、鏡像、斷點續傳、多進程下載、等功能。
vsftpd 相關文檔:
/etc/vsftpd/vsftpd.conf #vsftpd 的核心配置文件。
/etc/vsftpd/ftpusers #用於指定哪些用戶不能訪問 FTP 服務器,即黑名單。
/etc/vsftpd/user_list #指定容許使用 VSFTP 的用戶列表文件,即白名單。
[root@centos80 ~]# vim /etc/vsftpd/user_list #查看 user_list 文件,如圖 4-4 所示
圖 4-4 VSFTP 的用戶列表文件
圖 4-4 中的說明:若是 userlist_deny= YES(默認),毫不容許在這個文件中的用戶登陸 ftp,甚至不提示輸入密碼。
/etc/vsftpd/vsftpd_conf_migrate.sh #是 vsftpd 操做的一些變量和設置腳本/var/ftp/ #默認狀況下匿名用戶的根目錄
[root@centos80 ~]# systemctl start vsftpd #啓動 FTP 服務 [root@centos80 ~]# systemctl enable vsftpd #設置開啓自動啓動 FTP 服務 [root@centos80 ~]# netstat -anput | grep ftp tcp 0 0 :::21 :::* LISTEN 4190/vsftpd
#注意關閉 iptables 和 SElinux
以上內容中說明 FTP 監聽兩個端口,但目前 FTP 已經啓動了,但通過查看,只查看到 21 號端口,還有 20 號端口沒有查看到?
是由於沒有數據傳輸,20 號端口是用於傳輸數據的,因此 20 號端口是還沒有開啓,若有數據傳輸時,20 號端口則會開啓。
Linux 系統:以 CentOS80 主機示例(即服務端、客戶端爲一臺主機)
[root@centos80 ~]# rpm -ivh /media/Packages/lftp-4.4.8-11.el7.x86_64.rpm #安裝 FTP 客戶端 [root@centos80 ~]# lftp 10.170.80.80 #鏈接 FTP 客戶端
ctrl+d 或 exit 退出 ? 幫助
Windows 系統:
經過瀏覽器訪問或 打開文件夾,在地址欄輸入地址:ftp://10.170.80.80/,如圖 4-5 所示。
圖 4-5 Windows 系統 FTP 客戶端鏈接服務器
公司技術部準備搭建一臺功能簡單的 FTP 服務器,容許全部員工上傳和下載文件,並容許建立用戶本身的目錄。
容許全部員工上傳和下載文件須要設置成容許匿名用戶登陸而且須要將容許匿名用戶上傳功能開啓。
anon_mkdir_write_enable 字段能夠控制是否容許匿名用戶建立目錄。
[root@centos80 ~]# cd /etc/vsftpd/ [root@centos80 vsftpd]# ls ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh [root@centos80 vsftpd]# cp vsftpd.conf{,.bak} #使用命令展開式FTP 配置文件備份,便於後期恢復還原 [root@centos80 vsftpd]# vim vsftpd.conf #編輯 FTP 配置文件,修改如下內容 anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES
容許匿名用戶上傳文件並能夠建立目錄,如圖 4-六、4-7 所示。
圖 4-6 容許匿名用戶上傳文件並能夠建立目錄
圖 4-7 容許匿名用戶上傳文件並能夠建立目錄
[root@centos80 vsftpd]# systemctl restart vsftpd #重啓 FTP 服務,使配置文件生效
測試:建立目錄提示不能寫,如圖 4-8 所示。
[root@centos80 vsftpd]# chown ftp.ftp /var/ftp/pub/ #修改 FTP 共享目錄屬主、屬組爲 ftp 用戶
再次測試,結果:能夠新建文件夾,可是不能重命名,不能刪除!
[root@centos80 vsftpd]# vim vsftpd.conf #編輯 FTP 配置文件,修改如下內容 anon_other_write_enable=YES #手動添加下這行(匿名賬號能夠有寫的權限) [root@centos80 vsftpd]# systemctl restart vsftpd #重啓 FTP 服務,使配置文件生效
能夠刪除文件夾了,這個參數對匿名用戶來講權限太大,不安全,使用這個參數須要考慮安全性。
[root@centos80 vsftpd]# ll /var/ftp #默認匿名用戶家目錄的權限是 755 總用量 0 drwxr-xr-x 2 ftp ftp 6 10月 31 2018 pub
注意,默認匿名用戶家目錄的權限是 755,這個權限是不能改變的。切記!
公司內部如今有一臺 FTP 和 WEB 服務器,FTP 的功能主要用於維護公司的網站內容,包括上傳文件、建立目錄、更新網頁等等。公司現有兩個部門負責維護任務,他們分別使用 team1 和 team2賬號進行管理。先要求僅容許 team1 和 team2 賬號登陸 FTP 服務器,但不能登陸本地系統,並將兩個賬號的根目錄限制爲/var/www/html,不能進入該目錄之外的任何目錄。
ftp 和 www web 服務器相結合。
www web 服務器根目錄:/var/www/html
只容許:team1 和 team2 兩用戶 能夠上傳,vsftp 禁止匿名。
分析:
將 FTP 和 WEB 服務器作在一塊兒是企業常常採用的方法,這樣方便實現對網站的維護,爲了加強安全性,首先須要使用僅容許本地用戶訪問,並禁止匿名用戶登陸。其次使用 chroot 功能將 team1 和team2 鎖定/var/www/html 目錄下。若是須要刪除文件則還須要注意本地權限。
創建維護網站內容的 ftp 賬號 team1 和 team2 並禁止本地登陸,而後設置其密碼。
[root@centos80 vsftpd]# useradd -s /sbin/nologin teame1 #建立 team1 用戶,並禁止登陸系統 [root@centos80 vsftpd]# useradd -s /sbin/nologin teame2 #建立 team2 用戶,並禁止登陸系統 [root@centos80 vsftpd]# echo "123456" | passwd --stdin teame1 #設置 team1 用戶密碼 [root@centos80 vsftpd]# echo "123456" | passwd --stdin teame2 #設置 team2 用戶密碼
vsftp 斷定是不是有效用戶還要斷定是否爲系統用戶。因此要在此文件中添加建立用戶的 shell 類型。
配置 vsftpd.conf 主配置文件並做相應修改
[root@centos80 vsftpd]# cp vsftpd.conf.bak vsftpd.conf #恢復此前備份的 FTP 配置文件覆蓋當前的 FTP 配置文件 cp:是否覆蓋"vsftpd.conf"? y #輸入 y 確認覆蓋當前配置文件 [root@centos80 vsftpd]# vim vsftpd.conf #編輯 FTP 配置文件,修改如下內容 anonymous_enable=NO #禁止匿名用戶登陸 local_enable=YES #容許本地用戶登陸 # chroot) #chroot_local_user=YES local_root=/var/www/html #設置本地用戶的根目錄爲/var/www/html chroot_list_enable=YES #開啓 chroot 功能 # (default follows) chroot_list_file=/etc/vsftpd/chroot_list #設置鎖定用戶在根目錄中的列表文件,此文件存放要鎖定的用戶名 allow_writeable_chroot=YES #chroot_list_file=/etc/vsftpd/chroot_list #容許鎖定的用戶有寫的權限,修改完成後保存並退出 #
圖 4-11 禁止匿名用戶、容許本地用戶登陸
修改如圖 4-12 所示的內容爲如圖 4-13 所示內容:
圖 4-12
圖 4-13
創建/etc/vsftpd/chroot_list 文件,添加 team1 和 team2 賬號
[root@centos80 vsftpd]# vim /etc/vsftpd/chroot_list #建立chroot_list文件寫入用戶名一行一個 teame1 teame2 [root@centos80 vsftpd]# ll -d /var/www/html/ #以長格式查看/var/www/html/目錄,-d 選項用於查看目錄自己,不包含目錄下的文件。 drwxr-xr-x+ 4 root root 4096 8月 1 12:24 /var/www/html/ [root@centos80 vsftpd]# chmod -R o+w /var/www/html/ [root@centos80 vsftpd]# ll -d /var/www/html/ #賦予/var/www/html/目錄和該目錄下全部文件的寫權限。 drwxr-xrwx+ 4 root root 4096 8月 1 12:24 /var/www/html/
重啓 vsftpd 服務使配置生效
[root@centos80 vsftpd]# systemctl restart vsftpd #重啓 FTP 服務,使配置文件生效 [root@centos80 vsftpd]# cp /etc/passwd /var/www/html/ #拷貝測試文件
客戶端LFTP登錄測試
[root@CentOS81 ~]# lftp 10.170.80.80 -u teame1,123456 lftp teame1@10.170.80.80:~> ls -rw-r--r-- 1 0 0 2372 Aug 08 08:10 passwd
擴展: 配置 vsftpd,使用 SSL 證書加密數據傳輸
FTP 與 HTTP 同樣缺省狀態都是基於明文傳輸,但願 FTP 服務器端與客戶端傳輸保證安全,能夠爲 FTP 配置 SSL
[root@centos80 vsftpd]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 3650 Generating a 2048 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]:ZH State or Province Name (full name) []:NX Locality Name (eg, city) [Default City]:YC Organization Name (eg, company) [Default Company Ltd]:JLH Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:JLH.COM Email Address []:JLH@126.com
OpenSSL 簡單參數解釋: req #是 X.509 Certificate Signing Request (CSR,證書籤名請求)管理的一個命令。 x509 #X.509 證書數據管理。 days #定義證書的有效日期。 newkey #指定證書密鑰處理器。 keyout #設置密鑰存儲文件。 out #設置證書存儲文件,注意證書和密鑰都保存在一個相同的文件
[root@centos80 ~]# cd /etc/vsftpd [root@centos80 vsftpd]# mkdir .sslkey #建立隱藏目錄存放證書文件 [root@centos80 vsftpd]# mv vsftpd.pem .sslkey/ #移動證書文件到.sslkey 目錄下 [root@centos80 vsftpd]# chmod 400 .sslkey/vsftpd.pem #賦予證書文件 400 權限
[root@centos80 vsftpd]# vim vsftpd.conf #編輯配置文件在120行添加以下內容 #config ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES force_anon_logins_ssl=YES force_anon_data_ssl=YES ssl_tlsv1=YES ssl_sslv2=YES ssl_sslv3=YES require_ssl_reuse=NO ssl_ciphers=HIGH rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem rsa_private_key_file=/etc/vsftpd/.sslkey/vsftpd.pem
ssl_enable=YES #啓用 SSL 支持 allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES force_anon_logins_ssl=YES force_anon_data_ssl=YES #上面四行 force 表示強制匿名用戶使用加密登錄和數據傳輸 ssl_tlsv1=YES #指定 vsftpd 支持 TLS v1。 ssl_sslv2=YES #指定 vsftpd 支持 SSL v2。 ssl_sslv3=YES #指定 vsftpd 支持 SSL v3。 require_ssl_reuse=NO #不重用 SSL 會話,安全配置項 ssl_ciphers=HIGH #容許用於加密 SSL 鏈接的 SSL 算法。這能夠極大地限制那些嘗試發現使用存在缺陷的特定算法的***者。 rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem rsa_private_key_file=/etc/vsftpd/.sslkey/vsftpd.pem
圖 4-14 添加支持 ssl 配置
上面的配置項不要添加到 vsftpd.conf 文件最後也不要加註釋,不然啓動報錯。並且配置後不能有多餘的空格。
修改完配置文件後,重啓服務生效。
圖 4-15 配置 FileZilla 客戶端驗證
提示證書認證,點擊「在之後的會話中始終信任該證書」---》點擊「肯定」如圖 4-16 所示。
圖 4-16 未知證書
鏈接成功,可使用 TLS 加密傳輸了,如圖 4-17 所示。
如圖 4-17 使用 TLS 加密傳輸
NFS,是 Network File System 的簡寫,即網絡文件系統。網絡文件系統是 FreeBSD 支持的文件系統中的一種,也被稱爲 NFS.NFS 容許一個系統在網絡上與他人共享目錄和文件。經過使用 NFS,用戶和程序能夠像訪問本地文件同樣訪問遠端系統上的文件,如圖 4-18 所示。
NFS 的模式: C/S 模式
NFS 監聽的端口: 2049
CentOS7 是以 NFSv4 做爲默認版本,NFSv4 使用 TCP 協議(端口號是 2049)和 NFS 服務器創建鏈接。
NFS 是經過網絡進行數據傳輸的,傳輸數據的端口爲 2049。可是因爲文件系統很是複雜,所以NFS 還有其餘程序去啓動額外的端口。NFS 默認使用傳輸的端口是隨機選擇的小於 1024 的端口。將端口告知客戶端是須要依賴於 RPC(remote procedure call,RPC)協議。
當 NFS 服務啓動時,會隨機選取數個端口,並向 RPC 註冊,所以 RPC 就能夠知道每一個端口對應的NFS 功能。
RPC 最主要的功能就是指定每一個 NFS 功能所對應的端口號,並告知客戶端。以便客戶端鏈接至正確的端口號。
[root@centos80 vsftpd]# vim /etc/services #查看 services 文件,如圖 4-19 所示
圖 4-19 NFS 監聽端口號
[root@centos80 vsftpd]# yum -y install rpcbind nfs-utils #使用 yum 方式安裝 NFS
[root@centos80 ~]# ls /etc/exports #NFS 的共享主目錄 /etc/exports
[root@centos80 ~]# netstat -antup | grep 2049 #先查看 2049 端口是否被佔用 [root@centos80 ~]# systemctl start rpcbind #啓動 rpcbind 服務 [root@centos80 ~]# systemctl start nfs-server.service #啓動 NFS 服務 [root@centos80 ~]# systemctl enable nfs-server.service #設備 NFS 服務開機啓動 [root@centos80 ~]# netstat -antup | grep 2049 tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN - tcp6 0 0 :::2049 :::* LISTEN - udp 0 0 0.0.0.0:2049 0.0.0.0:* - udp6 0 0 :::2049 :::*
在啓動 NFS 以前要先啓動 RPC,不然 NFS 就沒法向 RPC 進行註冊。另外若是 RPC 從新啓動,原來的註冊數據就會消失。因此,在重啓 RPC 以後,它所管理的服務都要重啓以從新向 RPC 註冊。
showmount -e NFS 服務器 IP
[root@centos80 ~]# showmount -e 10.170.80.80 Export list for 10.170.80.80:
[root@CentOS81 ~]# mount 10.170.80.80:/tmp /opt mount.nfs: access denied by server while mounting 10.170.80.80:/tmp
[root@centos80 ~]# vim /etc/exports [root@centos80 ~]# cat /etc/exports /mountnfs *(rw) [root@centos80 ~]# exportfs -rv exporting *:/mountnfs [root@centos80 ~]# showmount -e 10.170.80.80 Export list for 10.170.80.80: /mountnfs *
備註:
/media 表示共享的目錄。
*表示對全部網段開放權限,也能夠設置指定特定的網段。
(rw) 表示訪問權限。
[root@CentOS81 ~]# mount -t nfs 10.170.80.80:/mountnfs/ /opt/ [root@CentOS81 ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos_centos-root 50G 3.9G 47G 8% / devtmpfs 470M 0 470M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 8.0M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 1014M 166M 849M 17% /boot tmpfs 98M 0 98M 0% /run/user/0 10.170.80.80:/media 4.3G 4.3G 0 100% /opt
[root@CentOS81 ~]# vim /etc/fstab #編輯/etc/fstab 文件,在文件最後添加自動掛載的信息
圖 4-20 開機自動掛載
[root@CentOS81 ~]# mount -a #將/etc/fstab的全部內容從新加載 [root@CentOS81 ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos_centos-root 50G 3.9G 47G 8% / devtmpfs 470M 0 470M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 8.0M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 1014M 166M 849M 17% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/sr0 4.3G 4.3G 0 100% /media 10.170.80.80:/mountnfs 4.3G 4.3G 0 100% /opt
[root@CentOS81 ~]# touch /opt/nfstest.txt #在 NFS 共享設備上建立文件 touch: 沒法建立"/opt/nfstest.txt": 只讀文件系統
設置訪問權限通常包含 2 部分
(1) 服務自己權限
(2) 目錄訪問權限
nfs 默認使用 nfsnobody 用戶
[root@centos80 ~]# grep nfs /etc/passwd rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@centos80 ~]# chown nfsnobody.nfsnobody -R /mountnfs 或者 [root@centos80 ~]# chmod 777 -R /mountnfs/ #不建議用這種方式
[root@CentOS81 ~]# touch /opt/testnfs.txt [root@CentOS81 ~]# ll !$ ll /opt/testnfs.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 8月 8 17:46 /opt/testnfs.txt
如下是一些 NFS 共享的經常使用參數:
ro #只讀訪問。 rw #讀寫訪問。 sync #資料同步寫入到內存與硬盤當中。 async #資料會先暫存於內存當中,而非直接寫入硬盤。 secure #NFS 經過 1024 如下的安全 TCP/IP 端口發送。 insecure #NFS 經過 1024 以上的端口發送。 wdelay #若是多個用戶要寫入 NFS 目錄,則歸組寫入(默認)。 no_wdelay #若是多個用戶要寫入 NFS 目錄,則當即寫入,當使用 async 時,無需此設置。 hide #在 NFS 共享目錄中不共享其子目錄。 no_hide #共享 NFS 目錄的子目錄。 subtree_check #若是共享/usr/bin 之類的子目錄時,強制 NFS 檢查父目錄的權限(默認)。 no_subtree_check #和上面相對,不檢查父目錄權限。 all_squash #共享文件的 UID 和 GID 映射匿名用戶 anonymous,適合公用目錄。 no_all_squash #保留共享文件的 UID 和 GID(默認)。 root_squash #root 用戶的全部請求映射成如 anonymous 用戶同樣的權限(默認)。 no_root_squash #root 用戶具備根目錄的徹底管理訪問權限。
選項使用方法示例:
[root@CentOS80 ~]# vim /etc/exports /mountnfs/mounfs/no_root_squash *(rw,no_root_squash) /mountnfs/mounfs/sync 10.170.80.0/24(rw,sync) /mountnfs/mounfs/ro 10.170.80.80(ro) /mountnfs/mounfs/all_squash 10.170.80.0/24(rw,all_squash,anonuid=500,anongid=500) /mountnfs/mounfs/async 10.170.80.0/255.255.255.0(async) /mountnfs/mounfs/rw 10.170.80.0/255.255.255.0(rw) 10.170.81.0/255.255.255.0(rw) /mountnfs/mounfs/root_squash *(rw,root_squash) [root@centos80 ~]# exportfs -rv
總結:
4.1 VSFTP 服務器概述
4.2 安裝配置 VSFTP
4.3 實戰:匿名訪問 VSFTP
4.4 實戰:用戶名密碼方式訪問 VSFTP
4.5 NFS 概述-配置 NFS 服務器並實現開機自動掛載