---恢復內容開始---
簡介:
File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文件傳輸協議”。用於Internet上的控制文件的雙向傳輸。
同時,它也是一個應用程序(applicaction)。給予不同的操作系統有不用的FTP應用程序,而所有這些應用程序都遵循同一種協議以傳輸文件。在FTP的使用中,用戶經常遇到兩個概念:“下載”和“上傳”。
下載:從遠程主機拷貝文件到自己的計算機中
上傳:將文件從自己的計算機拷貝到遠程計算機中
支持FTP協議的服務器都叫做FTP服務器
服務端和客戶端程序:
FTP用戶的類型:
匿名用戶:anonymous或ftp
本地用戶:賬號名稱、密碼等信息都保存在password和shadow文件中
常見的FT怕服務器程序:
IIS、Serv-U
wu-ftpd、Proftpd
vsftpd(Very Secure FTP Daemon)
常見FTP客戶端或程序:
CuteFTP、FlashFTP、leapFTP、Filezilla
gftp、kuftp、ftp
工作原理 - 模式比較
主動模式:
端口: 21(命令端口) 20(數據端口)
網絡連通性:服務器通過20端口連接客戶端的隨機端口,對於客戶端來說可能存在防火牆阻止端口的現象,而對於服務器來說只開放兩個固定端口更安全
被動模式:
端口:21(命令端口) 隨機端口(數據端口)
網絡連通性:數據的傳輸由客戶端主動連接,客戶端不存在防火牆阻隔數據包問題。但是,服務器端開啟了隨機端口,不利於服務器的安全管理。
非特權端口:大於1024小於65535的端口
通常在企業中如果是自己用的ftp會搭建第一種主動模式。如果是放在公網上使用第二種被動模式。
75作為服務器 77作為客戶端
在75服務器安裝vsftpd服務器端
查看包中的文件
1是日志輪替
2是加密的或需要加密的一些配置文件
/etc/vsftpd/ftpusers第五行寫在這里的所有用戶名都會被ftp拒絕
/etc/vsftpd/vsftpd.conf主配置文件
/var/ftp默認的匿名用戶的家目錄
/var/ftp/pub開發權限后匿名用戶可以到這個目錄下上傳或下載等操作
啟動vsftpd服務
在77主機安裝客戶端ftp
使用方法ftp ftp 服務器地址
ftp或anonymous代表匿名用戶,vsftpd服務默認開啟匿名用戶,密碼可以不輸,直接登陸
successful登錄成功
failed 登錄失敗
配置選項 - 匿名用戶
匿名權限控制
anonymous_enable=YES 啟用匿名訪問
aon_umask=022 匿名用戶所上傳文件的權限掩碼
anon_root=/var/ftp 匿名用戶FT怕的根目錄
anon_upload_enable=YES 允許上傳文件
anon_mkdir_write_enable=YES 允許創建目錄
anon_other_write_enable=YES 允許其它寫入權
anon_max_rate=0 限制最大傳輸速率(字節/秒)
匿名用戶默認登錄的家目錄/var/ftp
嘗試上傳一些東西。
上傳:put
下載:get
上傳失敗,權限拒絕
/etc/vsftpd/vsftpd.conf匿名用戶上傳文件需要打開設置選項anon_upload_enable=YES
取消注釋
保持。重啟服務
默認情況下(匿名用戶的家目錄不能有w權限),ftp的根目錄為/var/ftp,為了安全,這個目錄默認不允許設置為777權限,否則ftp將無法訪問。但是我們要匿名上傳文件,需要“other"用戶的寫權限,正確的做法然后再75主機上給pub目錄777權限或者新建子目錄。
77客戶機上傳文件
注意一定要關閉selinux,如果是修改配置文件的話一定要重啟系統,可以使用getenforce命令查看selinux的狀態。
上傳到服務器上的文件權限都變成了600
匿名用戶的掩碼(如需要,需自己添加,含義:如umask是022,這時創建一個權限為666得文件,文件得時間權限為666-022=644)
anon_umaks=022
再上傳得文件就是644了
現在對這個文件有讀權限了看看能不能下載
可以下載了。
下載方式 (ftp自己選擇):binary(直接下載不做轉換) 圖片 視頻
ASCII (做一些轉換方便在不同的平台上查看) 文本文檔 網頁
默認開啟匿名用戶
設置匿名用戶的登錄目錄(如需要,需自己添加並修改)
anon_root=/var/ftp/pub
重啟服務。注意用戶的家目錄不能有寫權限
指定家目錄成功
還有兩個就不實驗了,直接下一個實驗;
打開匿名用戶創建目錄的權限
anon_mkdir_write_enable=YES
打開匿名用戶刪除和重命名的權限(如需要,需自己添加)
anon_other_write_enable=YES
二、本機用戶
在服務器上新建用戶
在77客戶端用user1用戶登錄
配置選項 - 本地用戶
本地用戶權限控制
local_enable=YES 啟用匿名訪問
local_umask=022 本地用戶所上傳文件得權限掩碼
local_root=/var/ftp 設置本地用戶得FTP根目錄
chroot_local_user=YES 是否將用戶禁錮再主目錄
local_max_rate=0 限制最大傳輸速率(字節/秒)
本機用戶默認登錄的就是自己的家目錄/home/用戶名
默認本地用戶可以cd到任何地方。可以將本地用戶禁錮再主目錄
把這行取消注釋
這時就無法去到家目錄以外的地方了
如果這個本地用戶只是用來使用它來使用ftp服務的就應該禁止它登陸系統,在創建用戶或創建用戶后指定它的shell為/sbin/nologin
local_max_rate=0 限制最大傳輸速率(字節/秒)(新加行)
/etc/vsftpd/ftpusers文件中的用戶無法使用ftp登陸
比如root
還有一個文件也有相似的作用/etc/vsftpd/user_list
這兩文件的區別是user_list可以在主配置文件中關閉ftpusers不能,如果用戶只寫到list文件內,在用戶登錄時只要輸完用戶名回車就會提示無法登陸,如果只寫到ftpusers中會在用戶輸完密碼后提示無法登陸。
設置user_list文件是否開啟yes開啟
vsftpd服務還支持tcp_wrappers可以把某個ip寫到/etc/hosts.deny文件里讓用戶無法登陸使用ftp服務(75主機雙網卡一個116網段一個115網段)
直接被拒絕
三、虛擬用戶(用假的用戶映射到本機一個真實存在的用戶)
虛擬機恢復快照還原環境,75做服務器77做客戶端。75安裝服務器端,77安裝客戶端。配置服務器。
1、創建賬號信息文件(聲明虛擬用戶的賬號和密碼)
vi /etc/vsftpd/user.list(文件內的規則為奇數用戶名,偶數密碼)
2、將創建的賬戶信息文件修改為系統識別的數據庫類型文件
#cd /etc/vsftpd
#db_load -T(生成系統文件) -t(指定算法) hash -f(指定文件名)/etc/vsftpd/user.list user.db(生成的系統可以識別的文件)
#chmod 600 user.* (不能讓普通用戶查看文件內容)
3、添加虛擬映射用戶
useradd -d /var/ftproot(指定用戶的家) -s /sbin/nologin(不讓用戶登錄) virtual(添加的用戶)
chmod 755 /var/ftproot/(給用戶家目錄設置權限。用戶默認家目錄權限700)
4、設置認證
cd /etc/pam.d(目錄下都是一些模板)
cp –a vsftpd vsftpd.a 拷貝模板文件,進行修改
vi vsftpd.a 寫入以下內容,前后不能有空格注意格式
#%PAM-1.0
auth required pam_userdb.so(加載這個模塊) db=/etc/vsftpd/user(指定前面生成的user.db的位置,默認.db格式就直接寫user了)
account required pam_userdb.so db=/etc/vsftpd/user
不能直接在后面加,要把原來的刪除。
不然用戶無法登陸。會報這樣的錯。
正確的格式如下,直接寫。
排錯是出現用戶無法登陸的問題,應該是前面的問題(虛擬用戶,真實用戶,以及真實和虛擬的映射)。
5、在主配置文件中聲明(配置文件的最下面)
vi /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.a (聲明模板文件為vsftpd.a)
userlist_enable=YES (啟用userlist這個文件)
tcp_wrappers=YES (聲明tcp_wrappers可以使用)
guest_enable=YES (允許客戶(虛擬用戶)訪問
guest_username=virtual (指定引用的是本地那個用戶)
user_config_dir=/etc/vsftpd/conf (指定對用戶進行權限控制的目錄conf)
這里的路徑vsftp后面少打一個d,導致后面用戶只能登陸,但是進行一些操作時回報這樣的錯。
因為找不到授權文件就相當於沒有用戶沒有權限。正確的路徑應該是/etc/vsftpd/conf/
排錯時因為看到用戶可以登錄了但是卻沒有權限,那么肯定是授權的這一塊出了問題。
注意前后不能有空格
6、創建用戶控制權限
cd /etc/vsftpd/
mkdir conf(創建對用戶進行權限控制的目錄conf)
cd conf
touch user1 user2 user3 (user.list文件中的用戶。在文件內設置這個用戶的權限)
常見權限:
anon_upload_enable=YES 允許上傳
anon_mkdir_write_enable=YES 允許用戶創建目錄
anon_other_write_enable=YES 允許其它寫入權限
對user1只設置允許上傳權限,user2只有創建目錄權限,user3只有其他寫入權限如改名。
vi user1
anon_upload_enable=YES
vi user2
anon_mkdir_write_enable=YES
vi user3
anon_other_write_enable=YES
啟動服務。客戶端77訪問測試。
user1登陸成功。嘗試上傳文件。
上傳成功。測試一下其他的權限
permission 權限 denied 否定
換user2
密碼456登陸成功。創建目錄
嘗試改名
沒權限
再換user3
密碼789登陸成功。給文件改名
嘗試新建
還是沒權限。
默認ftp是明文傳遞的利用抓包工具可以看到用戶登錄的信息和傳遞的信息
tcpdump port 21(命令端口) –nA 抓包測試
、、
用本地用戶訪問ftp服務器
看下抓到的包
用戶名
都能被直接看到
四、vsftpd服務使用openssl加密
服務器端安裝openssl(主程序) 和openssl–devel(支持的一些庫)
2.創建證書
openssl()命令 req –new(這兩個代表新建證書) –x509(證書的格式) -nodes (默認會為這個證書添加密碼,加這個選項就是不加密碼) –out(指定輸出的文件名) vsftpd.pem –keyout vsftpd.pem
第一行,加密的位數2048,采用RSA加密方式的密鑰
輸入國家
省
市
組織
機構名稱
一般名稱
郵件地址
這些都可以隨便寫的。
查看生成的證書
3./etc/ssl/certs/是存放openssl證書的位置
4.為了安全給證書重新設置權限為600
5.到vsftpd服務的主配置文件中/etc/vsftpd/vsftpd.conf聲明證書
在文件內寫入以下內容:
ssl_enable=YES 開啟加密
allow_anon_ssl=YES 允許匿名用戶采用ssl加密
force_local_data_ssl=YES 強制在數據傳輸時使用ssl加密
force_local_logins_ssl=YES 強制本地用戶登錄時使用ssl加密
force_anon_data_ssl=YES 強制匿名用戶在數據傳輸時使用ssl加密
force_anon_logins_ssl=YES 強制匿名用戶在登錄時使用ssl加密
ssl_tlsv1=YES 證書的加密等級(推薦是用這個)
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/certs/vsftpd.pem 聲明證書的位置
保存退出重啟服務
客戶端登錄!!!但但是在linux下客戶端是無法使用這種加密算法的,只能使用win來測試。
tcpdump port 21(命令端口) –nA 抓包測試
隨便截個圖反正就是找不着了
win也有工具(如filezilla)可以范文vsftpd服務
公司內部可以使用主動模式,為外網提供vsftpd服務就一定要使用被動模式,前面的所有都是主動模式
五、 vsftpd被動模式
pasv_enable=YES 開啟被動模式
pasv_min_port=10000 指定最小端口
pasv_max_port=10100 指定最大端口
先創建一個大個的測試文件
把前面那三句話寫入vsftpd的配置文件下面
重啟服務
然后使用user1用戶去下載
在下載的同時服務器端查看端口是否是前面設置的(端口只有在有數據傳輸時才會開啟)
ESTABLISHED:正在等待文件傳輸
測試成功。
tcp連接會聲明3次。斷開會聲明4次
---恢復內容結束---