自學linux——18.FTP伺服器的搭建
Centos7下FTP伺服器的搭建
一、FTP的作用
文件傳輸協議(File Transfer Protocol,FTP),是一種在互聯網中進行文件傳輸的協議,基於客戶端/伺服器模式,默認使用 20、21 號埠,其中20埠是數據埠用於進行數據傳輸,21埠為命令埠,用於接收客戶端發出的相關FTP命令和參數
FTP協議工作模式有兩種:主動模式和被動模式,其中被動模式是默認的工作模式
A.主動模式:FTP 伺服器主動向客戶端發起連接請求
B.被動模式:FTP 伺服器等待客戶端發起連接請求
由於FTP一般部署在企業內網,如果開啟並配置了防火牆,有時候需要將FTP的工作模式設置為主動模式,才可以傳輸數據
二、vsftpd(FTP守護進程)三種認證模式
1.匿名開放模式:任何人都可以無需密碼驗證而直接登錄到FTP伺服器
2.本地用戶模式:是通過Linux系統本地的賬戶密碼資訊進行認證的模式
3.虛擬用戶模式:需要為FTP服務單獨 建立用戶資料庫文件,虛擬出用來進行口令驗證的賬戶資訊,而這些賬戶資訊在 伺服器系統中實際上是不存在的,僅供 FTP 服務程式進行認證使用。是三種模式中最安全的一種認證模式,用的最多
三、vsftpd.conf的主要參數(根據實際情況來進行配置許可權)
四、搭建流程
1.伺服器端vsftpd的安裝
① 通過rpm命令查看是否已經安裝過vsftpd,如果沒有安裝則通過yum命令安裝
rpm - q vsftpd #查看是否安裝vsftpd yum -y install vsftpd #下載vsftpd
②安裝完成後,是否成功查看配置文件/etc/vsftpd/
rpm -q vsftpd #查看是否安裝vsftpd
ll /etc/vsftpd #查看配置文件
2.匹配認證模式
(1)匿名開放模式:匿名用戶可以上傳、下載、創建、刪除、更名文件的許可權
A.伺服器端:
① 把主配置文件備份,刪除注釋的參數,再重定向將其覆蓋到主配置文件
cat /etc/vsftpd/vsftpd.conf #查看配置文件(注釋看多不好看,把注釋刪除)
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak #配置文件備份
ll /etc/vsftpd #查看文件(夾)
grep -v "#" /etc/vsftpd/vsftpd.conf.bak >/etc/vsftpd/vsftpd.conf #刪除注釋的參數,再重定向將其覆蓋到配置文件
cat /etc/vsftpd/vsftpd.conf #查看配置文件(已沒有注釋參數)
②寫入相應的許可權
vim /etc/vsftpd/vsftpd.conf #編輯配置文件
anon_umask=022 #匿名用戶上傳文件的umask的值
anon_upload_enable=YES #允許匿名用戶上傳文件
anon_mkdir_write_enable=YES #允許匿名用戶創建目錄
anon_other_write_enable=YES #允許匿名用戶其他的許可權(重命名,刪除)
③重啟vsftpd服務,並添加到開機啟動
systemctl restart vsftpd #重啟服務 systemctl enable vsftpd #添加到開機啟動
④在/var/ftp/pub/下創建文件
cd /var/ftp/pub/ #切換路徑 touch 文件名 #創建文件
⑤清除防火牆的默認策略(或直接關掉防火牆)
systemctl stop firewalld #關閉防火牆 yum -y install iptables-services #下載iptables systemctl enable iptables #開啟自啟 systemctl start iptables #啟動iptables iptables -F #清除策略 service iptables save #保存配置
若直接關閉防火牆則不需要以上的操作,因為實際工作當中為了安全防火牆是開啟的,而防火牆默認禁止了ftp傳輸的埠,因此清除防火牆的默認策略,centos7中沒有service iptables save指令來保存防火牆的規則,所有採用以上的方式來實現
⑥修改ftp用戶的許可權
ll -d /var/ftp/pub #查看pub目錄 chown -Rf ftp /var/ftp/pub #改變ftp用戶的許可權 ll -d /var/ftp/pub #查看pub目錄
通過查看pub目錄發現只有root用戶才有寫入的許可權,所以直接把pub目錄所有者改為ftp用戶,讓ftp用戶也擁有寫入的許可權
⑦修改ftp域相關的規則(或直接關掉SELinux,方法見17)
getenforce #查看SELinux的狀態 getsebool -a | grep ftp #查看ftp的規則 setsebool -P ftpd_full_access=on #修改ftpd_full_access為永久打開
實際工作中SELinux一般都是開啟的,當SELinux狀態為開啟,查看與ftp域相關的策略,修改當中的規則
B.客戶機端:
①通過rpm命令查看是否已經安裝過ftp,如果沒有安裝則通過yum命令安裝
rpm -q ftp #查看是否安裝ftp yum -y install ftp #下載ftp
②用ftp連接下載文件
ftp 伺服器地址 #連接伺服器端
匿名開放認證模式下,賬戶統一為 anonymous,密碼為空,進入後
ls #查看文件/目錄 cd pud #切換路徑 ls #查看文件/目錄 get 文件名 #下載文件 quit(exit) #退出 ll #可以查看到剛下載的目錄
③用ftp連接創建目錄
ftp 伺服器地址 #連接伺服器端
anonymous 用戶名 密碼為空
mkdir 文件名 #創建目錄
ls #查看剛創建的目錄
rmdir 文件名 #刪除目錄
回伺服器端,用 ll /var/ftp/pub可以查看剛從客戶機端創建的目錄
(2)本地用戶模式
A.伺服器端:
①關閉匿名模式,開啟本地匿用戶模式,並添加相應的參數
anonymous_enable=NO #關閉匿名模式登錄 local_enable=YES #允許本地用戶登錄 write_enable=YES #可寫許可權 local_umask=022 #本地用戶模式創建文件的 umask 值 userlist_enable=YES #啟用「禁止用戶名單」 userlist_deny=YES #開啟用戶作用名單文件功能
vsfftpd服務默認開啟了匿名模式和本地用戶模式,如果沒有手動配置一下
②重啟vsftpd服務
systemctl restart vsftpd #重啟 systemctl enable vsftpd #自啟
③創建用戶設置密碼
useradd 用戶名 #添加用戶 passwd 用戶名 #給用戶設置密碼
輸入密碼指令後,會提示輸入密碼和確認密碼
B.客戶機端
用ftp連接伺服器後,用剛創建的用戶密碼登錄就可以進行操作。
注意:
a.本地用戶模式不用修改用戶的許可權,因為連接後默認訪問的是該用戶的家目錄(/home/ftptest)
b.該模式下默認禁止root和大部分系統用戶登錄,如果非登不可,就在伺服器端刪除/etc/vsftpd/user_list和/etc/vsftpd/ftpusers路徑下的同個用戶名
(3)虛擬用戶模式
A.伺服器端
①在vuser.list中創建用戶資訊
cd /etc/vsftpd/ #切換路徑 vim vuser.list #創建用戶資訊 用戶1 密碼 用戶2 密碼
②轉換用戶文件格式(db_load命令)
db_load #查看是否安裝此命令(若有顯示如下) usage: db_load [-nTV] [-c name=value] [-f file] [-h home] [-P password] [-t btree | hash | recno | queue] db_file usage: db_load -r lsn | fileid [-h home] [-P password] db_file yum -y install db4 #若沒有則下載(有就略過此步) db_load -T -t hash -f vuser.list vuser.db #明文的vuser.list文件轉換為了vuser.db格式的文件 file vuser.db #看是否轉換成功(成功如下) vuser.db: Berkeley DB (Hash, version 9, native byte-order) ll vuser.db #查看 chmod 600 vuser.db #降低該文件的許可權 rm -rf vuser.list #刪除明文文件
③創建PAM文件
vim /etc/pam.d/vsftpd.vu #創建並編輯.du文件 auth required pam_userdb.so db=/etc/vsftpd/vuser #db參數 account required pam_userdb.so db=/etc/vsftpd/vuser #db參數
.vu的文件名可以任意,用於虛擬用戶認證,db參數為上一步db_load命令生成的資料庫文件的路徑,不用寫後綴名
④創建本地用戶來映射虛擬用戶
useradd -d /var/ftpdir -s /sbin/nologin virtual #創建虛擬用戶的映射賬戶 chmod -Rf 755 /var/ftpdir/ #修改許可權
創建本地用戶來映射虛擬用戶,避免 系統無法處理虛擬用戶所創建文件的屬性許可權
⑤添加虛擬用戶模式的參數
anonymous_enable=NO #禁止匿名開放模式 local_enable=YES #允許本地用戶模式 guest_enable=YES #開啟虛擬用戶模式 guest_username=virtual #指定虛擬用戶賬戶 pam_service_name=vsftpd.vu(將vsftpd修改為vsftpd.vu) #指定PAM文件,存放於/etc/pam.d/目錄下 allow_writeable_chroot=YES #允許對禁錮的FTP根目錄執行寫入操作,而且不拒絕用戶的登錄請求
在本地模式的基礎上添加虛擬用戶模式的參數,必須關閉匿名模式,開啟本地模式,且修改pam_service_name參數為vsftpd.vu
⑥設置虛擬用戶的許可權
mkdir /etc/vsftpd/a(任意) #創建用戶目錄,此目錄對應之前創建的用戶 cd a/ #切換到創建的目錄路徑 touch 用戶1(默認查看許可權) #創建之前一樣的用戶並寫入相應的許可權 vim 用戶2 #創建之前一樣的用戶並寫入相應的許可權 anon_upload_enable=YES #上傳許可權 anon_mkdir_write_enable=YES #寫的許可權 anon_other_write_enable=YES #重命名,刪除許可權 vim /etc/vsftpd/vsftpd.conf #定義虛擬用戶不同許可權的配置文件所存放的路徑 user_config_dir=/etc/vsftpd/a(文件中添加)
⑦重啟vsftpd服務
systemctl restart vsftpd
B.客戶機端
ftp連接用虛擬用戶1和用戶2登錄進行測試了,實現各自之前設置的許可權即可
總結:
1.涉及到服務的配置,要考慮防火牆和SELinux的因素
2.配置了服務,都要加入開機啟動中,讓其每次重啟自動生效
3.出現問題從用戶許可權、目錄許可權、網路防火牆、SELinux服務幾個方面去考慮