1.ftp文件傳輸協議介紹
利用文件傳輸的形式,獲取其他機器的數據、資料
FTP就誕生(file transfer protocol,文件傳輸協議)
FTP是在互聯網中進行文件傳輸的一種協議,基於c/s,有一個服務端,有一個客戶端
FTP默認有2個工作端口
一個是20端口,用於數據的傳輸端口
一個是21端口,是FTP服務端用於接收客戶端發來的FTP指令和參數
FTP服務器按照FTP協議在互聯網上提供文件存儲,以便客戶端能夠快捷的訪問數據
FTP客戶端向服務端尋求資料
FTP工作模式主要分為2種:
主動模式:FTP服務器主動向客戶端發送連接請求
被動模式:FTP服務器在等待,等待客戶端發來請求
##安裝ftp服務
FTP是一種文件傳輸協議,那么在linux系統下,有一款工具實現ftp協議,名為vsftpd,費城安全的ftp守護進程服務
對於centos系統平台,直接yun安裝即可
yum install vsftpd -y #默認的yes確認安裝,阿里雲的yum源
學習修改vsftpd的配置文件
配置文件:/etc/vsftpd/vsftpd.conf
linux在默認安裝的軟件配置文件都在/etc目錄
[root@localhost ~]# grep -Ev '^#|^$' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=YES
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES


2.vsftpd匿名用戶模式
1.vsftpd允許用戶用三種認證的模式,登錄到ftp服務器:
1.本地用戶模式,基於linux的本地賬號密碼進行驗證,配置簡單,但是安全隱患存在,一旦ftp賬號密碼被破解,無安全可言
2.匿名用戶登錄模式,任何人不需要密碼直接登錄ftp
3.虛擬用戶模式,單獨為ftp工具創建用戶數據庫,基於口令驗證賬號密碼的信息,這些數據庫僅僅用於FTP的服務,不影響其他程序,因此是最為安全的形式
對於FTP客戶端,需要安裝FTP命令工具,方可使用
ftp> ? #直接在命令行終端輸入ftp命令,即可進入交互式的ftp命令行中,輸入問好可以查看所有的命令幫助
2.匿名用戶登錄模式:
匿名用戶是最不安全的方式,一般用於在公開展示一些不重要的信息,允許所有人可以查看的數據,ftp匿名登錄模式,一般打開在企業內網平台下,並且受防火牆規則控制,以保證ftp的基本安全性。
1.vsftpd配置文件,默認就已經開啟了匿名模式,修改配置文件為如下:
[root@localhost ~]# grep '^anon' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
重啟vsftpd進程,加載ftp服務
systemctl restart vsftpd
2.在啟動了vsftpd服務后,使用ftp客戶端命令進行操作
3.指定ip地址鏈接


4.登錄ftp后,無法寫入數據怎么辦?
ftp>mkdir chaoge到此一游
550 Create directory operation failed.
ftp>
#登錄ftp后,默認進去的文件夾路徑在/var/ftp目錄下
1.進入該ftp目錄后,修改文件夾的權限相關
cd /var/ftp
[root@localhost ftp]# chown -Rf ftp.ftp pub
2.檢查pub文件夾的權限
ll /var/ftp
3.如果想要修改ftp目錄下的資料,重命名或刪除等操作,還得添加一個參數
[root@localhost ~]# grep '^anon' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #允許匿名用戶登錄
anon_upload_enable=YES #允許匿名用戶上傳文件夾
anon_mkdir_write_enable=YES #允許匿名用戶寫入,創建文件夾
anon_other_write_enable=YES
3.VSftpb本地用戶模式
使用本地用戶進行賬號密碼驗證
使用linux本地賬戶的驗證模式,比如匿名用戶是安全的多
修改vsftpd.conf改為如下參數
vim /etc/vsftpd/vsftpd.conf
[root@localhost ftp]# grep -Ev '^#|^$' /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #關閉匿名用戶驗證模式
local_enable=YES #開啟linux本地賬號驗證模式
write_enable=YES #允許用戶寫入
local_umask=022 用戶寫入數據時,默認的文件權限
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=YES
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=YES
tcp_wrappers=YES
重啟vsftpd,加載配置
systemctl restart vsftpd
【此時我們可以用ftp客戶端僅從遠程連接,使用linux本地賬號】
1.確保服務器上有一個用戶可以進行ftp連接,比如用戶pyyu
[root@localhost ~]# useradd pyyu
[root@localhost ~]# passwd pyyu
2.此時用客戶端連接該ftp,使用賬號pyyu,ftp連接后,默認進入是是用戶家目錄,以保證其他目錄安全
linux系統的本地用戶可以登錄ftp,進入家目錄后,進行增刪改查


3.有些用戶是無法登錄ftp的,在一個用戶名單里被禁止了
[root@localhost ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
嘗試用這些用戶登錄ftp
4.ftp的虛擬用戶認證方式
顧明思義虛擬用戶認證方式,就是虛擬創建出來的用戶,對於服務器而言也是最安全的方式。
1.安裝DB工具,能夠轉化普通文件為vsftpd識別的數據庫加密文件
yum install db4 db4-utils -y
2.創建用於驗證vsftpd的數據文件
[root@localhost ~]# vim ftp_user.txt
[root@localhost ~]# cat ftp_user.txt
chaochao
888
chaoyu
666
3.由於這樣的普通文件很不安全,vsftpd也無法識別該txt的文件數據,因此還得使用db_load命令
對於這個ftp_user.txt文件進行加密,並且修改他的文件屬性,讓普通用戶無權查看
3.1加密文件
db_load -T -t hash -f /etc/vsftpd/ftp_user.txt /etc/vsftpd/ftp_user.db
3.2 降低文件的讀寫權限
chmod 600 ftp_user.db
3.3 刪除舊的數據文本,保證安全性
rm ftp_user.txt
4.創建當虛擬用戶登錄ftp之后進入的文件夾路徑,且和linux中的一個用戶做一個映射關系,防止虛擬用戶登錄后,創建了文件夾,但是系統沒有此用戶會報錯的一個問題。
4.1創建一個系統用戶和虛擬用戶做映射,且不需要家目錄,禁止用戶登錄shell
useradd -d /var/ftpdir -s /sbin/nologin virtual_chao
4.2檢查該用戶的家目錄
[root@localhost ~]# ll -ld /var/ftpdir/
drwx------ 2 virtual_chao virtual_chao 62 3月 9 18:16 /var/ftpdir/
4.3 更改文件夾權限
[root@localhost ~]# chmod -Rf 755 /var/ftpdir/
4.4 修改virtual_chao用戶添加到ftpsuer文件中,增大系統安全,該操作不會影響虛擬用戶的操作
echo 'virtual_chao' >> /etc/vsftpd/ftpusers
5.需要修改vsftpd的配置文件,添加一個支持虛擬用戶驗證的PAM文件,PAM是一組安全機制的模塊,認證文件路徑在/etc/pam.d/vsftpd
修改,添加如下參數,必須注釋掉之前所有的內容,僅僅添加有關自定義的vsftpd的配置
vim /etc/pam.d/vsftpd
[root@localhost ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/ftp_user
account required pam_userdb.so db=/etc/vsftpd/ftp_user

6.最后來修改vsftpd的配置文件,加載支持虛擬用戶模式,修改為如下參數(注釋寫在筆記里,不要寫在加載文件中)


7.針對不同的虛擬用戶設置不同的權限
chaochao 針對該用戶,允許它能夠上傳、新建、修改、查看、刪除等權限
chaoyu 只讀權限
8.如上的操作,需要修改vsftpd文件,定義 user_config_dir參數即可
8.1 創建一個管理虛擬用戶的家目錄,並且創建虛擬用戶的配置文件


分別添加參數,給2個虛擬用戶的配置文件


9.修改vsftpd主配置文件,加載如上的權限控制
修改/etc/vsftpd/vsftpd.conf ,添加一行如下參數,自定義的vsftpd的用戶配置文件
user_config_dir=/etc/vsftpd/virtual_user_dir
10.重啟服務,加載新的配置
systemctl restart vsftpd
11.此時使用客戶端連接ftp,用虛擬用戶進行驗證
