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
  • 該文件的格式為:一行用戶名一行密碼

  • 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相關技術文檔,寫的較早,看文筆很不錯,應該又可以借鑒的地方

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

END


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM