CentOS7 安裝 vsftpd 服務

CentOS7 安裝 vsftpd 服務


0.FTP簡介

  • FTP服務是一個跨平臺的文件共享解決方案

0.1.FTP兩種模式的區分:服務端的主被動模式

1)ftp通常分爲兩種模式,PORTFTP和PASVFTP
2)這兩種FTP在創建控制鏈接時操做是同樣的,都是由客戶端首先和FTP服務器的控制端口(默認值爲21)創建控制連接,並經過此鏈接進行傳輸操做指令。它們的區別在於使用數據傳輸端口(ftp-data)的方式。
3)PORTFTP模式下由FTP服務器指定數據傳輸所使用的端口,默認值爲20。
4)PASVFTP模式下由FTP客戶端決定數據傳輸的端口。PASVFTP這種作法,主要是考慮到存在防火牆的環境下,由客戶端與服務器進行溝通(客戶端向服務器發出數據傳輸請求中包含了數據傳輸端口),決定二者之間的數據傳輸端口更爲方便一些。

0.2.FTP 經常使用的三中用戶受權方式

  • 1.匿名用戶訪問
默認安裝完 vsftpd 服務,啓動後就是匿名方式的ftp服務器,使用
ftp 127.0.0.1
便可登陸查看指定的目錄文件,
注意:這種方式不是很安全,通常在要求臨時快速提供跨平臺文件共享時會使用
  • 2.系統用戶受權訪問
容許 linux 系統用戶使用 ftp 服務訪問該用戶的宿主目錄或者指定的系統目錄
用途:通常用於我的搭建的自用 ftp 服務器,配置簡單,便於管理(用戶少)
優勢:配置簡單
缺點:若是須要提供大量用戶的受權訪問,不推薦使用,用戶管理不方便
  • 3.虛擬用戶受權訪問
原理:獨立的維護一個虛擬用戶列表,能夠建立不一樣的虛擬用戶映射到同一個系統用戶上進行受權管理,以這個系統用戶的進行文件共享訪問以及受權管理
優勢:適用於大量用戶的受權訪問,好比公司內部文件共享,較爲安全且經常使用
缺點:配置較爲複雜

1.安裝FTP服務端

1.1.環境準備

  • 檢查系統環境,若是系統版本較低,建議升級內核等
uname -a
cat /etc/redhat-release 
yum update -y

1.2.安裝vsftpd,建立數據目錄

  • 包括服務端和客戶端
yum install vsftpd ftp -y
which vsftpd
  • 建立 ftp 用戶及宿主目錄
useradd -d /data/ftpdata/ -s /sbin/nologin ftpvuser     
chmod 755 /data/ftpdata/
chown -R ftpvuser.ftpvuser /data/ftpdata/
ls -lhd /data/ftpdata/
  • 注意:這個 ftpvuser 是 linux 系統用戶,用於映射 ftp 虛擬用戶,只須要建立一次

1.3.啓動 vsftpd 服務並配置開機自啓動

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.

1.4.配置 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.使用匿名用戶訪問 FTP 服務器

  • 剛安裝好並啓動的 vsftpd 服務,默認爲匿名訪問
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.
  • 以上是匿名用戶登陸 vsftpd 服務器的演示

3.使用系統用戶訪問 FTP 服務器

3.1.修改配置文件並重啓服務

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 功能重複,沒有必要
  • vsftpd 的配置文件列表
/etc/vsftpd/vsftpd.conf     # 主配置文件
/etc/vsftpd/ftpusers        # FTP限制訪問的用戶,裏面是一些系統用戶,默認不容許訪問,防止被入侵,通常不須要修改
/etc/vsftpd/user_list       # 受權用戶列表,能夠控制哪些用戶能夠訪問或者禁止訪問,我通常配置爲容許訪問 ftp 的用戶列表
  • 特別注意:
1)vsftpd.conf 文件中每一個選項設置爲一行,格式爲「option=value」,「=」號兩邊不能留空白符

3.2.建立測試用的本地用戶

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

3.3.修改受權的本地用戶列表

  • ftpusers 禁止登陸 ftp 服務器的用戶列表,通常是系統用戶不須要修改,能夠增長
vim /etc/vsftpd/ftpusers
-------------------------------
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
-------------------------------
  • user_list 容許登錄 ftp 服務器的用戶列表
vim /etc/vsftpd/user_list 
-------------------------------
zhaoshuai
-------------------------------
  • 備註:以上兩個文件修改完不須要重啓 vsftpd 服務

3.4.使用本地用戶登錄測試

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.
  • 若是要使用 xftp 等圖形工具,須要選擇主動模式
  • 對於阿里雲,青雲等雲平臺的虛擬機,須要考慮安全組:容許20,21端口的接入請求
  • 阿里雲配置nat網關的端口轉發能夠經過公網鏈接,或者直接綁定EIP,青雲須要直接綁定EIP進行公網鏈接
  • 阿里雲和青雲都沒法經過負載均衡的端口轉發提供ftp服務的訪問,由於通過了他們內部的路由轉發,沒法直接找到對應的主機,總之ftp須要直連服務器才行

4.使用虛擬用戶訪問 FTP 服務器

  • ftp配置爲匿名訪問顯然是不安全也不便於管理的,另外,單純使用系統用戶的 ftp 也較難管理,一般狀況下是使用一個系統用戶做爲ftp用戶登錄ftp服務器的代理用戶進行管理

4.1.修改vsftpd.conf 文件,重啓服務

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)實際的訪問權限可由用戶獨立的配置文件進行單獨控制

4.2.設置 ftp 虛擬用戶的驗證受權方式

  • 1)建立虛擬用戶的祕鑰文件
mkdir -p /etc/vsftpd/vuser.d
cd /etc/vsftpd/vuser.d
touch vuser.list
  • 2)加密虛擬用戶的祕鑰文件
# 使用 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)建立虛擬用戶的受權認證文件
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
-----------------------------------
  • 注意:db=/etc/vsftpd/vuser.d/vuser 不能夠加.db的擴展名,不然認證不成功

4.3.實例演示:配置一個虛擬用戶

  • 1)建立 ftp 虛擬用戶 test1 的數據目錄和祕鑰文件
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/
  • 2)把該虛擬用戶 test1 添加到 user_list 文件中
vim /etc/vsftpd/user_list 
---------------------
zhaoshuai
----------------------
  • 備註:
1)註釋掉其餘本地用戶認證的內容,由於啓用了 guest_enable 後,本地用戶將失效,全部非匿名用戶變成虛擬用戶
2)由於須要受權訪問的用戶比較少,因此user_list設置爲能夠訪問ftp服務的用戶
  • 3)建立或修改虛擬用戶祕鑰信息
cd /etc/vsftpd/vuser.d
vim  vuser.list
--------------------
zhaoshuai
zhaoshuai               # 這裏的密碼和系統用戶 zhaoshuai 的密碼不一樣用以區分
--------------------
db_load -T -t hash -f vuser.list vuser.db
  • 該文件的格式爲:一行用戶名一行密碼linux

  • 4)爲用戶建立受權配置文件(文件名必須爲虛擬用戶名)
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         # 其餘寫入權限
---------------------------
  • 5)配置完成刷新配置信息
systemctl restart vsftpd
systemctl status vsftpd
  • 6)登錄測試
[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.

拓展1: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

拓展2:CentOS6安裝vsftpd

  • 方法相同,區別在於服務的啓動命令是
service vsftpd restart
service vsftpd status

同類文章推薦

  • ftp相關技術文檔,寫的較早,看文筆很不錯,應該又能夠借鑑的地方vim

    http://os.51cto.com/art/201008/222036.htmcentos

END

相關文章
相關標籤/搜索