1)ftp通常分爲兩種模式,PORTFTP和PASVFTP 2)這兩種FTP在創建控制鏈接時操做是同樣的,都是由客戶端首先和FTP服務器的控制端口(默認值爲21)創建控制連接,並經過此鏈接進行傳輸操做指令。它們的區別在於使用數據傳輸端口(ftp-data)的方式。 3)PORTFTP模式下由FTP服務器指定數據傳輸所使用的端口,默認值爲20。 4)PASVFTP模式下由FTP客戶端決定數據傳輸的端口。PASVFTP這種作法,主要是考慮到存在防火牆的環境下,由客戶端與服務器進行溝通(客戶端向服務器發出數據傳輸請求中包含了數據傳輸端口),決定二者之間的數據傳輸端口更爲方便一些。
默認安裝完 vsftpd 服務,啓動後就是匿名方式的ftp服務器,使用 ftp 127.0.0.1 便可登陸查看指定的目錄文件, 注意:這種方式不是很安全,通常在要求臨時快速提供跨平臺文件共享時會使用
容許 linux 系統用戶使用 ftp 服務訪問該用戶的宿主目錄或者指定的系統目錄 用途:通常用於我的搭建的自用 ftp 服務器,配置簡單,便於管理(用戶少) 優勢:配置簡單 缺點:若是須要提供大量用戶的受權訪問,不推薦使用,用戶管理不方便
原理:獨立的維護一個虛擬用戶列表,能夠建立不一樣的虛擬用戶映射到同一個系統用戶上進行受權管理,以這個系統用戶的進行文件共享訪問以及受權管理 優勢:適用於大量用戶的受權訪問,好比公司內部文件共享,較爲安全且經常使用 缺點:配置較爲複雜
uname -a cat /etc/redhat-release yum update -y
yum install vsftpd ftp -y which vsftpd
useradd -d /data/ftpdata/ -s /sbin/nologin ftpvuser chmod 755 /data/ftpdata/ chown -R ftpvuser.ftpvuser /data/ftpdata/ ls -lhd /data/ftpdata/
systemctl start vsftpd systemctl status vsftpd systemctl enable vsftpd netstat -anptl|grep vsftpd
[root@srv05-CT75 vsftpd]# tail -1 /etc/passwd ftpvuser:x:1000:1000::/data/ftpdata/:/sbin/nologin [root@srv05-CT75 ~]# systemctl start vsftpd [root@srv05-CT75 ~]# systemctl status vsftpd ● vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2019-06-18 01:00:50 CST; 24h ago Main PID: 7649 (vsftpd) CGroup: /system.slice/vsftpd.service └─7649 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf Jun 18 01:00:50 srv05-CT75.zhaoshuai.com systemd[1]: Stopped Vsftpd ftp daemon. Jun 18 01:00:50 srv05-CT75.zhaoshuai.com systemd[1]: Starting Vsftpd ftp daemon... Jun 18 01:00:50 srv05-CT75.zhaoshuai.com systemd[1]: Started Vsftpd ftp daemon. [root@srv05-CT75 ~]# netstat -anptl|grep vsftpd tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 7649/vsftpd [root@srv05-CT75 ~]# systemctl enable vsftpd Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
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
1)能夠直接輸入"IP:PORT",能夠打開ftp服務器 2)容許匿名用戶登陸,宿主目錄爲/var/ftp,不能離開,下載目錄爲/var/ftp/pub,且只能下載,不能上傳 3)容許本地用戶登陸,且可離開主目錄,本地用戶容許上傳/下載 4)寫在文件/etc/vsftpd/ftpusers中的本地用戶禁止登陸 5)服務器使用獨佔方式啓動,且無限制鏈接數
[root@srv05-CT75 vsftpd]# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 3.0.2) Name (127.0.0.1:root): anonymous # 輸入匿名用戶的用戶名 331 Please specify the password. # 提示輸入密碼 Password: # 空密碼 230 Login successful. # 提示登陸成功 Remote system type is UNIX. Using binary mode to transfer files. # 提示使用二進制傳輸數據 ftp> ls # 查看文件列表,宿主目錄爲 /var/ftp 227 Entering Passive Mode (127,0,0,1,168,57). 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Oct 30 2018 pub # 默認有個 pub 目錄 226 Directory send OK. ftp> ls pub # pub目錄爲空 227 Entering Passive Mode (127,0,0,1,102,108). 150 Here comes the directory listing. 226 Directory send OK. ftp> cd pub # 切換目錄 250 Directory successfully changed. # 提示目錄切換成功 ftp> ls # 列表查看,空目錄 227 Entering Passive Mode (127,0,0,1,153,121). 150 Here comes the directory listing. 226 Directory send OK. ftp> cd .. 250 Directory successfully changed. ftp> ls # 我這裏手動建立了 aaa 目錄和 bbb 文件 227 Entering Passive Mode (127,0,0,1,212,127). 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Jun 18 17:56 aaa -rw-r--r-- 1 0 0 0 Jun 18 17:57 bbb drwxr-xr-x 2 0 0 4096 Oct 30 2018 pub 226 Directory send OK. ftp> ftp> help # help 能夠查看可使用的命令 Commands may be abbreviated. Commands are: ! debug mdir sendport site $ dir mget put size account disconnect mkdir pwd status append exit mls quit struct ascii form mode quote system bell get modtime recv sunique binary glob mput reget tenex bye hash newer rstatus tick case help nmap rhelp trace cd idle nlist rename type cdup image ntrans reset user chmod lcd open restart umask close ls prompt rmdir verbose cr macdef passive runique ? delete mdelete proxy send ftp> exit 421 Timeout.
vim /etc/vsftpd/vsftpd.conf ------------------------------- anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 chroot_local_user=YES userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list pam_service_name=vsftpd tcp_wrappers= YES ------------------------------- systemctl restart vsftpd systemctl status vsftpd
anonymous_enable=NO # 修改,禁止匿名用戶登陸 local_enable=YES # 默認啓用,容許本地用戶登陸,虛擬用戶須要映射到本地用戶纔可使用 write_enable=YES # 默認啓用,本地用戶開放寫權限 #local_umask=022 # 註釋掉,本地用戶建立的文件的權限反碼022,建立的文件爲644 chroot_local_user=YES # 默認啓用,將本地用戶鎖定在本身的家目錄中 userlist_enable=YES # 是否啓用用戶控制列表,默認啓用 userlist_deny=NO # 指定用戶控制列表的做用,默認爲 YES,表示該文件內的用戶列表禁止登陸FTP服務器,這裏修改成 NO,做爲受權訪問的用戶列表使用 userlist_file=/etc/vsftpd/user_list # 指定用戶控制列表的文件名 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目錄下 listen= YES # 是否使用獨佔啓動方式 tcp_wrappers= YES # 使用防火牆 #file_open_mode=0755 pasv_min_port=50000 # 被動模式下的最小端口 pasv_max_port=60000 # 被動模式下的最大端口 # 設置鏈接服務器後的歡迎信息 ftpd_banner=welcome to ftp service. banner_file=/etc/vsftpd/vsftpd_banner_file
userlist_deny=NO ,這裏設置爲NO,作爲容許登錄的用戶列表,能夠手動指定容許登陸 ftp 的用戶,比較實用,若是設置爲YES,做爲禁止登陸 ftp 的用戶列表,與 ftpusers 功能重複,沒有必要
/etc/vsftpd/vsftpd.conf # 主配置文件 /etc/vsftpd/ftpusers # FTP限制訪問的用戶,裏面是一些系統用戶,默認不容許訪問,防止被入侵,通常不須要修改 /etc/vsftpd/user_list # 受權用戶列表,能夠控制哪些用戶能夠訪問或者禁止訪問,我通常配置爲容許訪問 ftp 的用戶列表
1)vsftpd.conf 文件中每一個選項設置爲一行,格式爲「option=value」,「=」號兩邊不能留空白符
useradd zhaoshuai passwd zhaoshuai
[root@srv05-CT75 vsftpd]# touch /home/zhaoshuai/aaa.txt [root@srv05-CT75 vsftpd]# mkdir -p /home/zhaoshuai/bbb [root@srv05-CT75 vsftpd]# ll /home/zhaoshuai/ total 4 -rw-r--r-- 1 root root 0 Jun 19 02:18 aaa.txt drwxr-xr-x 2 root root 4096 Jun 19 02:18 bbb
vim /etc/vsftpd/ftpusers ------------------------------- root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody -------------------------------
vim /etc/vsftpd/user_list ------------------------------- zhaoshuai -------------------------------
ftp 127.0.0.1
[root@srv05-CT75 pam.d]# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 3.0.2) Name (127.0.0.1:root): zhaoshuai 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ftp> ftp> ls 227 Entering Passive Mode (127,0,0,1,94,91). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Jun 18 18:18 aaa.txt drwxr-xr-x 2 0 0 4096 Jun 18 18:18 bbb 226 Directory send OK. ftp> exit 221 Goodbye.
cd /etc/vsftpd/ vim vsftpd.conf ---------------------------------------- anonymous_enable=NO local_enable=YES write_enable=YES #local_umask=022 chroot_local_user=YES userlist_enable=YES userlist_deny=NO 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 ------------------------------------- systemctl restart vsftpd systemctl status vsftpd
guest_enable=YES # 增長,啓用虛擬用戶模式 guest_username=ftpvuser # 增長,配置虛擬用戶映射到的本地用戶名 pam_service_name=/etc/pam.d/ftpvuser.pam # 修改,配置虛擬用戶的認證方式 user_config_dir=/etc/vsftpd/vuser.d # 增長,虛擬用戶的配置文件目錄
1)除了主配置文件外,還能夠給特定用戶設定我的配置文件 2)虛擬用戶默承認以讀寫,訪問時映射爲本地用戶,因此須要啓用對本地用戶的控制 3)實際的訪問權限可由用戶獨立的配置文件進行單獨控制
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/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 account required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser -----------------------------------
mkdir -p /data/ftpdata/zhaoshuai touch /data/ftpdata/zhaoshuai/ccc.txt # 建立測試文件 mkdir -p /data/ftpdata/zhaoshuai/ddd chown -R ftpvuser.ftpvuser /data/ftpdata chmod 755 /data/ftpdata/ ls -lhd /data/ftpdata/ ls -lh /data/ftpdata/
vim /etc/vsftpd/user_list --------------------- zhaoshuai ----------------------
1)註釋掉其餘本地用戶認證的內容,由於啓用了 guest_enable 後,本地用戶將失效,全部非匿名用戶變成虛擬用戶 2)由於須要受權訪問的用戶比較少,因此user_list設置爲能夠訪問ftp服務的用戶
cd /etc/vsftpd/vuser.d vim vuser.list -------------------- zhaoshuai zhaoshuai # 這裏的密碼和系統用戶 zhaoshuai 的密碼不一樣用以區分 -------------------- db_load -T -t hash -f vuser.list vuser.db
該文件的格式爲:一行用戶名一行密碼linux
cd /etc/vsftpd/vuser.d vim zhaoshuai --------------------------- # 指定宿主目錄,配置訪問權限 local_root=/data/ftpdata/zhaoshuai # 虛擬用戶的宿主目錄 write_enable=YES anon_upload_enable=YES # 上傳 anon_mkdir_write_enable=YES # 建立目錄寫權限 anon_other_write_enable=YES # 其餘寫入權限 ---------------------------
systemctl restart vsftpd systemctl status vsftpd
[root@srv05-CT75 vuser.d]# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 3.0.2) Name (127.0.0.1:root): zhaoshuai 331 Please specify the password. Password: # 在這裏使用系統用戶zhaoshuai的密碼沒法登錄 530 Login incorrect. Login failed. ftp> exit 221 Goodbye. [root@srv05-CT75 vuser.d]# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 3.0.2) Name (127.0.0.1:root): zhaoshuai 331 Please specify the password. Password: # 使用虛擬用戶zhaoshuai的密碼能夠正常登陸 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ftp> ls # 能夠查看到上面建立的測試文件 227 Entering Passive Mode (127,0,0,1,226,175). 150 Here comes the directory listing. drwxr-xr-x 3 1000 1000 4096 Jun 12 07:59 ccc.txt drwxr-xr-x 6 1000 1000 4096 Jun 12 07:45 ddd 226 Directory send OK. ftp> exit 221 Goodbye.
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
service vsftpd restart service vsftpd status
ftp相關技術文檔,寫的較早,看文筆很不錯,應該又能夠借鑑的地方vim
http://os.51cto.com/art/201008/222036.htmcentos