FTP服務是最常用的跨平台文件共享服務之一
============= 完美的分割線 ===============
0.FTP兩種模式的區分
1)PORTFTP和PASVFTP,PORTFTP是一般形式的FTP。
2)這兩種FTP在建立控制連接時操作是一樣的,都是由客戶端首先和FTP服務器的控制端口(默認值為21)建立控制鏈接,並通過此鏈接進行傳輸操作指令。它們的區別在於使用數據傳輸端口(ftp-data)的方式。
3)PORTFTP由FTP服務器指定數據傳輸所使用的端口,默認值為20。
4)PASVFTP由FTP客戶端決定數據傳輸的端口。PASVFTP這種做法,主要是考慮到存在防火牆的環境下,由客戶端與服務器進行溝通(客戶端向服務器發出數據傳輸請求中包含了數據傳輸端口),決定兩者之間的數據傳輸端口更為方便一些。
1.安裝FTP服務端
1.1.環境准備
# 檢查系統環境,如果系統版本較低,建議升級內核等
# 在CentOS6.x和7.x版本安裝方法基本相同
uname -a cat /etc/redhat-release # yum update -y # 如果是新服務器或者是ftp獨占可以升級,其他看情況
1.2.安裝vsftpd
# 包括服務端和客戶端
yum install vsftpd ftp -y
1.3.啟動vsftpd服務並配置開機自啟動
/etc/init.d/vsftpd start netstat -anptl|grep vsftpd chkconfig vsftpd on chkconfig --list vsftpd
1.4.配置查看ftp相關日志
# 從xferlog可以查看到用戶上傳下載等的操作記錄,刪除不會顯示
vim /etc/logrotate.d/vsftpd
/var/log/vsftpd.log { # ftpd doesn't handle SIGHUP properly nocompress missingok } /var/log/xferlog { # ftpd doesn't handle SIGHUP properly nocompress missingok }
tail -f /var/log/xferlog
2.配置匿名方式訪問FTP服務端
2.1.安裝好vsftpd服務,默認為匿名訪問
1)可以直接輸入IP端口,可以打開ftp服務器
2)允許匿名用戶登錄,宿主目錄為/var/ftp,不能離開,下載目錄為/var/ftp/pub,且只能下載,不能上傳
3)允許本地用戶登錄,且可離開主目錄,本地用戶允許上傳/下載
4)寫在文件/etc/vsftpd/ftpusers中的本地用戶禁止登錄
5)服務器使用獨占方式啟動,且無限制連接數
3.配置虛擬用戶認證的FTP服務端
3.1.修改vsftpd.conf 文件
cd /etc/vsftpd/
vim vsftpd.conf
# 修改配置文件,確認以下選項
anonymous_enable=NO # 修改,禁止匿名用戶登錄 local_enable=YES # 默認啟用,允許本地用戶登錄,虛擬用戶需要映射到本地用戶才可以使用 write_enable=YES # 默認啟用,本地用戶開放寫權限 #local_umask=022 # 注釋掉,本地用戶創建的文件的權限反碼022,創建的文件為644 userlist_enable=YES # 默認啟用,默認為允許user_list中的用戶進行訪問 # userlist_deny=yes # 也可以用這個,默認拒絕user_list中的用戶訪問FTP服務器,保留一種即可 userlist_file=/etc/vsftpd/user_list chroot_local_user=YES # 默認啟用,將本地用戶鎖定在自家目錄中 # made for virtual user guest_enable=YES # 增加,啟用虛擬用戶模式 guest_username=ftpvuser # 增加,配置虛擬用戶映射到的本地用戶名 pam_service_name=/etc/pam.d/ftpvuser.pam # 修改,配置虛擬用戶的認證方式 user_config_dir=/etc/vsftpd/vuser.d # 增加,虛擬用戶的配置文件目錄 anon_umask=022 # 增加,匿名用戶新增文件的umask數值。默認值為077,需要修改為022,否則上傳后的文件為600
# 其他配置選項,根據實際需求修改
dirmessage_enable=YES # 設置切換到目錄時顯示message 隱含文件的內容 xferlog_enable= YES # 激活上傳和下載日志 connect_from_port_20= YES # 啟用FTP數據端口連接 pam_service_name=vsftpd # 設置PAM認證服務的配置文件名稱, 該文件存放在/etc/pam.d目錄下 userlist_enable= YES # 允許vsftpd.user_list文件中的用戶訪問服務器 userlist_deny= YES # 拒絕vsftpd.user_list文件中的用戶訪問服務器 listen= YES # 是否使用獨占啟動方式 tcp_wrappers= YES # 使用防火牆 #file_open_mode=0755
# vsftpd配置文件
/etc/vsftpd/vsftpd.conf # 主配置文件 /etc/vsftpd/ftpusers # FTP限制訪問的用戶,里面是一些系統用戶,默認不允許訪問,防止被入侵 /etc/vsftpd/user_list # 授權用戶列表,可以控制哪些用戶可以訪問或者禁止訪問
# 注意:
1)vsftpd.conf 文件中每個選項設置為一行,格式為“option=value”,“=”號兩邊不能留空白符
2)除了主配置文件外,還可以給特定用戶設定個人配置文件
3)虛擬用戶默認可以讀寫,訪問時映射為本地用戶,所以需要啟用對本地用戶的控制
4)實際的訪問權限可由用戶獨立的配置文件進行單獨控制
3.2.創建虛擬用戶相關文件
1)創建授權認證文件
cd /etc/pam.d/ mv vsftpd vsftpd.ori # 備份原有的ftp的pam認證文件 vim ftpvuser.pam # 創建新的ftp虛擬用戶認證文件
寫入以下內容:
#%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser # 不可以加.db的擴展名,否則認證不成功 account required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser
2)創建虛擬用戶的秘鑰文件
mkdir -p /etc/vsftpd/vuser.d cd /etc/vsftpd/vuser.d touch vuser.list
3)加密虛擬用戶的秘鑰文件
# 使用db_load工具生成加密
yum install db4-utils -y db_load -T -t hash -f vuser.list vuser.db file vuser.list file vuser.db
# 為了安全,修改虛擬用戶文件的訪問權限
chmod 600 /etc/vsftpd/vuser.*
ll /etc/vsftpd/vuser.*
3.3.配置一個虛擬用戶訪問權限的實例
1)創建或修改虛擬用戶秘鑰信息
cd /etc/vsftpd/vuser.d vim vuser.list -------------------- admin 123456 --------------------
2)設置可以訪問ftp的虛擬用戶列表user_list
# 注釋掉其他本地用戶認證的內容,因為啟用了guest_enable后,本地用戶將失效,所有非匿名用戶變成虛擬用戶
# 因為需要授權訪問的用戶比較少,所以user_list設置為可以訪問ftp服務的用戶
vim /etc/vsftpd/user_list --------------------- admin ----------------------
3)每個用戶單獨創建授權文件
cd /etc/vsftpd/vuser.d vim admin --------------------------- # 指定宿主目錄,配置訪問權限 write_enable=YES local_root=/data/ftpdata/admin # 宿主目錄 anon_upload_enable=YES # 上傳 anon_mkdir_write_enable=YES # 創建目錄寫權限 anon_other_write_enable=YES # 其他寫入權限 ---------------------------
4)創建ftp虛擬用戶的宿主目錄
# 創建的ftp本地用戶及其根目錄,用於映射虛擬用戶,注意修改目錄權限
mkdir -p /data/ftpdata/admin # 虛擬用戶的宿主目錄需要預先創建 useradd -d /data/ftpdata/ -s /sbin/nologin ftpvuser chmod 755 /data/ftpdata/ ll /data/ftpdata/ -d
5)配置完成刷新配置信息,進行測試
service vsftpd reload
4.常見報錯處理
錯誤現象1:文件顯示上傳成功,刷新就是不顯示。
報錯分析:
1)檢查發現上傳的文件權限為600,是上傳文件權限設置問題
解決方法:修改虛擬用戶權限配置
local_umask=022 改為 anon_umask=022
2)另外,在創建虛擬用戶映射的ftp本地用戶的時候,使用useradd創建的宿主目錄權限默認為700
這樣,雖然上傳文件的權限為644可讀,文件夾755可讀,但由於ftp的上層目錄不可讀,子目錄也會受限
解決方法:修改宿主目錄的權限為755即可
chmod 755 /data/ftpdata/
5.附:防火牆配置
如果ftp被動模式用到防火牆,可以參考以下配置
iptables -I INPUT -p tcp --dport 21 -j ACCEPT #FTP連接端口 iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT #pasv模式下的隨機端口 iptables-save >/etc/sysconfig/iptables #保存防火牆配置 systemctl restart iptables.service systemctl restart vsftpd.service
======== 完畢,呵呵呵呵 ========
