詳解CentOS7安裝配置vsftp搭建FTP

安裝配置vsftpd做FTP服務,我們的Web應用使用git管理進行迭代,公共文件軟件存儲使用開源網盤Seafile來管理,基本夠用。想不到FTP的使用的場景,感覺它好像老去了,雖然現在基本沒有用到這個工具,但剛好公司公司刷一個硬件需要使用FTP來下載配置文件,於是研究使用了一下,記錄了一下使用過程。

安裝

在安裝前查看是否已安裝vsftpd

# 查看是否已安裝 方法一
[root@localhost ~]# rpm -q vsftpd
vsftpd-3.0.2-21.el7.x86_64
 
# 查看是否已安裝 方法二
[root@localhost ~]# vsftpd -v
vsftpd: version 3.0.2
 
# 安裝 vsftpd
[root@localhost ~]# yum -y install vsftpd


查看位置

[root@localhost ~]# whereis vsftpd
vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz

 


啓動vsftpd服務

systemctl start vsftpd.service

 

關閉firewall和SELinux

setenforce 0  # 設置SELinux 成爲permissive模式 (關閉SELinux)
setenforce 1  # 設置SELinux 成爲enforcing模式  (開啓SELinux)
 
# 或者修改配置
vi /etc/selinux/config
# SELINUX=enforcing
# 註釋掉
# SELINUXTYPE=targeted
# 註釋掉
SELINUX=disabled
# 增加
:wq! #保存退出
setenforce 0


或者設置SELinux

getsebool -a | grep ftp
setsebool -P ftpd_full_access on
systemctl stop firewalld.service
#停止firewall
systemctl disable firewalld.service
#禁止firewall開機啓動


如果你不願意關閉防火牆,需要防火牆添加FTP服務。

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload


配置文件/etc/vsftpd/vsftpd.conf修改配置文件

anonymous_enable=NO    # 不允許匿名訪問,禁用匿名登錄
chroot_local_user=YES   # 啓用限定用戶在其主目錄下
use_localtime=YES     # 使用本地時(自行添加)
chroot_list_enable=YES
local_enable=YES      # 允許使用本地帳戶進行FTP用戶登錄驗證
allow_writeable_chroot=YES # 如果啓用了限定用戶在其主目錄下需要添加這個配置,解決報錯 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
xferlog_enable=YES     # 啓用上傳和下載的日誌功能,默認開啓。
local_umask=022      # 設置本地用戶默認文件掩碼022
# FTP上本地的文件權限,默認是077,不過vsftpd安裝後的配置文件裏默認是022


當virtual_use_local_privs=YES 時,虛擬用戶和本地用戶有相同的權限;虛擬用戶高級參數

  • 當virtual_use_local_privs=NO  時,虛擬用戶和匿名用戶有相同的權限,默認是NO。

  • 當virtual_use_local_privs=YES,write_enable=YES時,虛擬用戶具有寫權限(上傳、下載、刪除、重命名)。

  • 當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,anon_upload_enable=YES時,虛擬用戶不能瀏覽目錄,只能上傳文件,無其他權限。

  • 當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_upload_enable=NO時,虛擬用戶只能下載文件,無其他權限。

  • 當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_upload_enable=YES時,虛擬用戶只能上傳和下載文件,無其他權限。

  • 當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_mkdir_write_enable=YES時,虛擬用戶只能下載文件和創建文件夾,無其他權限。

  • 當virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_other_write_enable=YES時,虛擬用戶只能下載、刪除和重命名文件,無其他權限。

匿名登錄

安裝完默認情況下是開啓匿名登錄的,對應的是 /var/ftp 目錄,這時只要服務啓動了,就可以直接連上FTP了。默認用戶名是ftp,密碼是空的。如果你在配置裏面配置了anonymous_enable=NO,匿名就無法登錄。

$ ftp 192.168.188.114
 
Connected to 192.168.188.114.
220 (vsFTPd 3.0.2)
Name (192.168.188.114:kennywang): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||47867|).
150 Here comes the directory listing.
-rw-r--r--  1 0    0       12 Jan 18 06:31 README.md
drwxr-xr-x  2 0    0        6 Nov 05 19:43 pub
226 Directory send OK.


多用戶配置需要自己手工添加配置,下面內容到vsftpd.conf末尾多用戶配置

# 
# 
 
use_localtime=YES     # 使用本地時(自行添加)
listen_port=21
chroot_local_user=YES   # 啓用限定用戶在其主目錄下
idle_session_timeout=300
 
data_connection_timeout=120 # 數據連接超時時間
guest_enable=YES       # 設定啓用虛擬用戶功能
guest_username=ftpuser    # 指定虛擬用戶的宿主用戶 ftpuser(就是我們後面會新建這個用戶)
# guest_username=www
# 如果ftp目錄是指向網站根目錄,用來上傳網站程序,
# 可以指定虛擬用戶的宿主用戶爲nginx運行賬戶www,可以避免很多權限設置問題 
 
 
user_config_dir=/etc/vsftpd/vuser_conf  # 虛擬用戶配置文件目錄
virtual_use_local_privs=YES # NO時,虛擬用戶和匿名用戶有相同的權限,默認是NO
 
pasv_min_port=10060     # 被動模式最小端口號10060
pasv_max_port=10090     # 被動模式最大端口號10090
 
accept_timeout=5
connect_timeout=1


新建系統用戶ftpuser,用戶目錄爲/home/vsftpd, 用戶登錄終端設爲/bin/false(即使之不能登錄系統)創建宿主用戶

# 方法一
# 創建用戶 ftpuser 指定 `/home/vsftpd` 目錄
useradd -g root -M -d /home/vsftpd -s /sbin/nologin ftpuser
 
# 設置用戶 ftpuser 的密碼
passwd ftpuser
# 把 /home/vsftpd 的所有權給ftpuser.root
chown -R ftpuser.root /home/vsftpd
 
# 方法二
useradd ftpuser -d /home/vsftpd -s /bin/false
chown ftpuser:ftpuser /home/vsftpd -R 
 
# 如果虛擬用戶的宿主用戶爲www,需要這樣設置
# www目錄是你應用的目錄
chown www:www /home/www -R


建立虛擬用戶文件刪除用戶 userdel ftpuser

touch /etc/vsftpd/vuser_passwd
# 編輯虛擬用戶名單文件:(
# 第一行賬號,第二行密碼,注意:不能使用root做用戶名,系統保留)
vi /etc/vsftpd/vuser_passwd
# 編輯內容,下面是 vuser_passwd 內容
wcj
123456
hss
123456
#保存退出


生成虛擬用戶數據文件

db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
chmod 600 /etc/vsftpd/vuser_passwd.db


創建用戶配置

mkdir /etc/vsftpd/vuser_conf # 建立虛擬用戶個人vsftp的配置文件
cd /etc/vsftpd/vuser_conf   # 進入目錄
touch hss wcj         # 這裏創建兩個虛擬用戶配置文件


每一個文件配置文件都差不多,只是參數local_root不一樣。

local_root=/home/vsftpd/hss  # 用戶 hss 配置目錄,這個地方不一樣
write_enable=YES       # 允許本地用戶對FTP服務器文件具有寫權限
anon_world_readable_only=NO
anon_upload_enable=YES    # 允許匿名用戶上傳文件(須將全局的write_enable=YES,默認YES)
anon_mkdir_write_enable=YES  # 允許匿名用戶創建目錄
anon_other_write_enable=YES  # 允許匿名用戶刪除和重命名權限(自行添加)


每個用戶目錄文件夾是有root用戶創建的,也就是上面local_root配置目錄,其權限應設置爲755。因爲權限的問題在該文件夾內無法直接上傳文件。而如果設置爲777則無法訪問,這是由於vsftpd的安全性設置。解決上傳問題的方法是在local_root文件夾內新建一個upload的文件夾,權限設置爲777,可將文件上傳到該文件夾。創建用戶目錄

mkdir -p /home/vsftpd/hss   # 每個用戶對於一個目錄,創建兩個目錄“hss”、“wcj”
 
# 下面是目錄結構
/home/vsftpd
   ├── hss
   │  ├── filename.md
   │  └── upload
   └── wcj
     └── filename.md
 
 
# 賦予其權限
chmod -R 777 /var/vsftpd/hss/upload/
 
# 在/var/ftp下新建一個目錄來實現匿名用戶上傳
mkdir /var/ftp/upload


本地用戶:用戶在FTP服務器擁有賬號,且該賬號爲本地用戶的賬號,可以通過自己的賬號和口令進行授權登錄,登錄目錄爲自己的home目錄$HOME vsftpd中幾種用戶的區分:

虛擬用戶:用戶在FTP服務器上擁有賬號,但該賬號只能用於文件傳輸服務。登錄目錄爲某一特定的目錄,通常可以上傳和下載 

匿名用戶:用戶在FTP服務器上沒有賬號,登錄目錄爲/var/ftp

最後重啓vsftpd服務器

systemctl restart vsftpd.service


服務運維

systemctl restart vsftpd.service # 重啓服務
systemctl start vsftpd.service  # 啓動服務
systemctl status vsftpd.service  # 服務狀態查看

vsftp限制FTP用戶只能訪問自己的目錄

 

修改配置文件/etc/vsftpd/vsftpd.conf

chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

/etc/vsftpd/chroot_list
在這個配置文件中添加用戶,每個用戶一行,則在這個文件裏的用戶登錄ftp後,可以訪問上級目錄。
而不在這個配置文件中的用戶只能訪問自己的home目錄。


FTP命令

ftp> ascii # 設定以ASCII方式傳送文件(缺省值) 
ftp> bell  # 每完成一次文件傳送,報警提示. 
ftp> binary # 設定以二進制方式傳送文件. 
ftp> bye  # 終止主機FTP進程,並退出FTP管理方式. 
ftp> case # 當爲ON時,用MGET命令拷貝的文件名到本地機器中,全部轉換爲小寫字母. 
ftp> cd   # 同UNIX的CD命令. 
ftp> cdup  # 返回上一級目錄. 
ftp> chmod # 改變遠端主機的文件權限. 
ftp> close # 終止遠端的FTP進程,返回到FTP命令狀態, 所有的宏定義都被刪除. 
ftp> delete # 刪除遠端主機中的文件. 
ftp> dir [remote-directory] [local-file] # 列出當前遠端主機目錄中的文件.如果有本地文件,就將結果寫至本地文件. 
ftp> get [remote-file] [local-file] # 從遠端主機中傳送至本地主機中. 
ftp> help [command] # 輸出命令的解釋. 
ftp> lcd # 改變當前本地主機的工作目錄,如果缺省,就轉到當前用戶的HOME目錄. 
ftp> ls [remote-directory] [local-file] # 同DIR. 
ftp> macdef         # 定義宏命令. 
ftp> mdelete [remote-files] # 刪除一批文件. 
ftp> mget [remote-files]  # 從遠端主機接收一批文件至本地主機. 
ftp> mkdir directory-name  # 在遠端主機中建立目錄. 
ftp> mput local-files # 將本地主機中一批文件傳送至遠端主機. 
ftp> open host [port] # 重新建立一個新的連接. 
ftp> prompt      # 交互提示模式. 
ftp> put local-file [remote-file] # 將本地一個文件傳送至遠端主機中. 
ftp> pwd # 列出當前遠端主機目錄. 
ftp> quit # 同BYE. 
ftp> recv remote-file [local-file] # 同GET. 
ftp> rename [from] [to]   # 改變遠端主機中的文件名. 
ftp> rmdir directory-name  # 刪除遠端主機中的目錄. 
ftp> send local-file [remote-file] # 同PUT. 
ftp> status  # 顯示當前FTP的狀態. 
ftp> system  # 顯示遠端主機系統類型. 
ftp> user user-name [password] [account] # 重新以別的用戶名登錄遠端主機. 
ftp> ? [command] # 同HELP. [command]指定需要幫助的命令名稱。如果沒有指定 command,ftp 將顯示全部命令的列表。
ftp> ! # 從 ftp 子系統退出到外殼。


bye關閉FTP連接

exit

quit

下載文件

ftp> get readme.txt # 下載 readme.txt 文件
ftp> mget *.txt   # 下載


上傳文件

ftp> put /path/readme.txt # 上傳 readme.txt 文件
ftp> mput *.txt      # 可以上傳多個文件

 


230 - 登錄成功狀態碼

  • 200 - 命令執行成功

  • 150 - 文件狀態正常,開啓數據連接端口

  • 250 - 目錄切換操作完成

  • 226 - 關閉數據連接端口,請求的文件操作成功

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

原文鏈接:http://www.jb51.net/article/103904.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章