FTP服務是最經常使用的跨平臺文件共享服務之一vim
============= 完美的分割線 ===============安全
1)PORTFTP和PASVFTP,PORTFTP是通常形式的FTP。
2)這兩種FTP在創建控制鏈接時操做是同樣的,都是由客戶端首先和FTP服務器的控制端口(默認值爲21)創建控制連接,並經過此連接進行傳輸操做指令。它們的區別在於使用數據傳輸端口(ftp-data)的方式。
3)PORTFTP由FTP服務器指定數據傳輸所使用的端口,默認值爲20。
4)PASVFTP由FTP客戶端決定數據傳輸的端口。PASVFTP這種作法,主要是考慮到存在防火牆的環境下,由客戶端與服務器進行溝通(客戶端向服務器發出數據傳輸請求中包含了數據傳輸端口),決定二者之間的數據傳輸端口更爲方便一些。服務器
# 檢查系統環境,若是系統版本較低,建議升級內核等app
# 在CentOS6.x和7.x版本安裝方法基本相同tcp
uname -a cat /etc/redhat-release # yum update -y # 若是是新服務器或者是ftp獨佔能夠升級,其餘看狀況
# 包括服務端和客戶端工具
yum install vsftpd ftp -y
/etc/init.d/vsftpd start netstat -anptl|grep vsftpd chkconfig vsftpd on chkconfig --list vsftpd
# 從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.1.安裝好vsftpd服務,默認爲匿名訪問ui
1)能夠直接輸入IP端口,能夠打開ftp服務器
2)容許匿名用戶登陸,宿主目錄爲/var/ftp,不能離開,下載目錄爲/var/ftp/pub,且只能下載,不能上傳
3)容許本地用戶登陸,且可離開主目錄,本地用戶容許上傳/下載
4)寫在文件/etc/vsftpd/ftpusers中的本地用戶禁止登陸
5)服務器使用獨佔方式啓動,且無限制鏈接數加密
cd /etc/vsftpd/
vim vsftpd.conf
# 修改配置文件,確認如下選項spa
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)實際的訪問權限可由用戶獨立的配置文件進行單獨控制
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
mkdir -p /etc/vsftpd/vuser.d cd /etc/vsftpd/vuser.d touch vuser.list
# 使用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.*
cd /etc/vsftpd/vuser.d vim vuser.list -------------------- admin 123456 --------------------
# 註釋掉其餘本地用戶認證的內容,由於啓用了guest_enable後,本地用戶將失效,全部非匿名用戶變成虛擬用戶
# 由於須要受權訪問的用戶比較少,因此user_list設置爲能夠訪問ftp服務的用戶
vim /etc/vsftpd/user_list --------------------- admin ----------------------
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 # 其餘寫入權限 ---------------------------
# 建立的ftp本地用戶及其根目錄,用於映射虛擬用戶,注意修改目錄權限
mkdir -p /data/ftpdata/admin # 虛擬用戶的宿主目錄須要預先建立 useradd -d /data/ftpdata/ -s /sbin/nologin ftpvuser chmod 755 /data/ftpdata/ ll /data/ftpdata/ -d
service vsftpd reload
報錯分析:
1)檢查發現上傳的文件權限爲600,是上傳文件權限設置問題
解決方法:修改虛擬用戶權限配置
local_umask=022 改成 anon_umask=022
2)另外,在建立虛擬用戶映射的ftp本地用戶的時候,使用useradd建立的宿主目錄權限默認爲700
這樣,雖然上傳文件的權限爲644可讀,文件夾755可讀,但因爲ftp的上層目錄不可讀,子目錄也會受限
解決方法:修改宿主目錄的權限爲755便可
chmod 755 /data/ftpdata/
若是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
======== 完畢,呵呵呵呵 ========