一、配置詳解
匿名用戶權限控制:
- anonymous_enable=YES #是否啟用匿名用戶
- no_anon_password=YES #匿名用戶login時不詢問口令
- anon_upload_enable=(yes/no); #控制匿名用戶對文件(非目錄)上傳權限
- anon_world_readable_only=(yes/no); #控制匿名用戶對文件的下載權限
- anon_mkdir_write_enable=(yes/no); #控制匿名用戶對文件夾的創建權限
- anon_other_write_enable=(yes/no); #控制匿名用戶對文件和文件夾的刪除和重命名
- write_enable=YES #全局設置,是否容許寫入(無論是匿名用戶還是本地用戶,若要啟用上傳權限的話,就要開啟它)
- anon_root=(none) #匿名用戶主目錄
- anon_max_rate=(0) #匿名用戶速度限制
- anon_umask=(077) #匿名用戶上傳文件時有掩碼(若想讓匿名用戶上傳的文件能直接被匿名下載,就這設置這里為073)
- chown_uploads=YES #所有匿名上傳的文件的所屬用戶將會被更改成chown_username
- chown_username=whoever #匿名上傳文件所屬用戶名
本地用戶權限控制:
-
write_enable=YES #可以上傳(全局控制) 刪除,重命名
-
local_umask=022 #本地用戶上傳文件的umask
-
這里說一下umask umask是unix操作系統的概念,umask決定目錄和文件被創建時得到的初始權限 umask = 022 時,新建的目錄 權限是755,文件的權限是 644 umask = 077 時,新建的目錄 權限是700,文件的權限時 600 在unix中文件權限是三類用戶,三種權限。三類用戶分別是文件所有者user(u),文件所有者所在主群組group(g)、其它用戶others(o),三種權限分別是起讀read(r)、寫write(w)、執行execute(x)。 如果一個文件的權限如下:所有者有讀寫的權限,群組有讀和執行權限、其它用戶有讀權限,可以寫成: rw-r-xr-- 其中前三位指明了所有者的權限、中間三位指明了組權限、最后三位指明了其它用戶的權限。我們用ls -l可以看到文件權限詳情,列出來的是10位,最前一位如果是d表示是子目錄。 如果權限是022(八進制) 轉換為二進制為:000010010 轉換權限為: 000010010 rwxrwxrwx = ----w--w- 指取消組的寫權限、取消其它用戶的寫權限。 屏蔽這些權限后,剩下什么權限呢?用字母表示是: rwxr-xr-x 用二進制數表示是: 111101101 你可以對比一下 000010010 可以知道屏蔽前后的換算關系。
-
-
userlist_enable=YES #限制了/etc/vsftpd/user_list文件里的用戶不能訪問
-
local_root #設置一個本地用戶登錄后進入到的目錄
-
user_config_dir #設置用戶的單獨配置文件所在目錄,用哪個帳戶登陸就用哪個賬號名稱在目錄下新建文件,實現不同用戶不同權限
-
download_enable #限制用戶的下載權限
-
chroot_local_user=YES/NO #是否禁止用戶離開設置的根目錄
-
chroot_list_enable=YES #如果啟動這項功能,則所有列在chroot_list_file之中的使用者不能更改根目錄
-
chroot_list_file=/etc/vsftpd/chroot_list #指出被鎖定/允許 在自家目錄中的用戶的列表文件
下面一段話很形象三個屬性的配置
如果設置為 chroot_local_user=YES chroot_list_enable=YES(這行可以沒有, 也可以有) chroot_list_file=/etc/vsftpd.chroot_list 那么, 凡是加在文件vsftpd.chroot_list中的用戶都是不受限止的用戶,即, 可以瀏覽其主目錄的上級目錄. 如果不希望某用戶能夠瀏覽其主目錄上級目錄中的內容,可以如上設置,然后在文件vsftpd.chroot_list中去掉或不添加該用戶即可。 也可以如下配置 chroot_local_user=NO chroot_list_enable=YES(這行必須要有, 否則文件vsftpd.chroot_list不會起作用) chroot_list_file=/etc/vsftpd.chroot_list 然后把所有不希望有這種瀏覽其主目錄之上的各目錄權限的用戶添加到文件vsftpd.chroot_list中即可(一行一個用戶名,此時, 在該文件中的用戶都是不可以瀏覽其主目錄之外的目錄的)
虛擬用戶設置:
- pam_service_name=vsftpd #設置PAM使用的名稱,默認值為/etc/pam.d/vsftpd。
- check_shell=YES #(注意:僅在沒有pam驗證版本時有用,是否檢查用戶有一個有效的shell來登錄 )
- guest_enable= YES/NO #啟用虛擬用戶。默認值為NO。
- guest_username=ftp #這里設置虛擬用戶的宿主用戶。默認值為ftp。
- virtual_use_local_privs=YES/NO #當該參數激活(YES)時,虛擬用戶與其宿主用戶有相同的權限。 當此參數關閉(NO)時,虛擬用戶與匿名用戶有相同的權限。默認情況下此參數是關閉的(NO)
-
當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時,虛擬用戶只能下載、刪除和重命名文件,無其他權限。
-
超時設置
- idle_session_timeout=600 #空閑連接超時
- data_connection_timeout=120 #數據傳輸超時
- ACCEPT_TIMEOUT=60 #PASV請求超時
- connect_timeout=60 #PROT模式連接超時
服務器功能選項:
- xferlog_enable=YES #開啟日記功能
- xferlog_std_format=YES #使用標准格式
- log_ftp_protocol=NO #當xferlog_std_format關閉且本選項開啟時,記錄所有ftp請求和回復,當調試比較有用.
- pasv_enable=YES #允許使用pasv模式
- pasv_promiscuous=NO #關閉安全檢查,小心呀.
- port_enable=YES #允許使用port模式
- tcp_wrappers=YES #開啟tcp_wrappers支持
- pam_service_name=vsftpd #定義PAM 所使用的名稱,預設為vsftpd。
- nopriv_user=nobody #當服務器運行於最底層時使用的用戶名
- pasv_addr_resolve=YES # 與下面配置組合使用
- pasv_address=(none) #使vsftpd在pasv命令回復時跳轉到指定的IP地址.
服務器性能選項:
- ls_recurse_enable=YES #是否能使用ls -R命令以防止浪費大量的服務器資源
- one_process_model #是否使用單進程模式
- listen=YES #綁定到listen_port指定的端口,既然都綁定了也就是每時都開着的,就是那個什么standalone模式
- text_userdb_names=NO #當使用者登入后使用ls -al 之類的指令查詢該檔案的管理權時,預設會出現擁有者的UID,而不是該檔案擁有者的名稱。若是希望出現擁有者的名稱,則將此功能開啟。
- use_localtime=NO #顯示目錄清單時是用本地時間還是GMT時間,可以通過mdtm命令來達到一樣的效果
- use_sendfile=YES #測試平台優化
信息類設置:
- ftpd_banner=welcome to FTP . #login時顯示歡迎信息.如果設置了banner_file則此設置無效
- dirmessage_enable=YES #允許為目錄配置顯示信息,顯示每個目錄下面的message_file文件的內容
- setproctitle_enable=YES #顯示會話狀態信息,關!
目錄下文件定義:
- chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #定義限制/允許更改用戶主目錄的文件
- userlist_file=/etc/vsftpd/vsftpd.user_list #定義限制/允許用戶登錄的文件
- banner_file=/etc/vsftpd/banner #定義登錄信息文件的位置
- banned_email_file=/etc/vsftpd/banned_emails #禁止使用的匿名用戶登陸時作為密碼的電子郵件地址
- xferlog_file=/var/log/vsftpd.log #日志文件位置
- message_file=.message #目錄信息文件 與上面的信息設置關聯
目錄定義:
- user_config_dir=/etc/vsftpd/userconf #定義用戶配置文件的目錄
- local_root=webdisk #此項設置每個用戶登陸后其根目錄為/home/username/webdisk。定義本地用戶登陸的根目錄,注意定義根目錄可以是相對路徑也可以是絕對路徑。相對路徑是針對用戶家目錄來說的.
- anon_root=/var/ftp #匿名用戶登陸后的根目錄
用戶連接選項:
- max_clients=100 #可接受的最大client數目
- max_per_ip=5 #每個ip的最大client數目
- connect_from_port_20=YES #使用標准的20端口來連接ftp
- listen_address=192.168.0.2 #綁定到某個IP,其它IP不能訪問,多網卡多IP機器時有用
- listen_port=2121 #綁定到某個端口
- ftp_data_port=2020 #數據傳輸端口
- pasv_max_port=0 #pasv連接模式時可以使用port 范圍的上界,0 表示任意。默認值為0。 需要開啟被動模式
- pasv_min_port=0 #pasv連接模式時可以使用port 范圍的下界,0 表示任意。默認值為0。需要開啟被動模式
數據傳輸選項、vsftp限速:
- anon_max_rate=51200 #匿名用戶的傳輸比率(b/s)
- local_max_rate=5120000 #本地用戶的傳輸比率(b/s)
安全選項:
- Idle_session_timeout=600 #(用戶會話空閑后600秒斷)
- Data_connection_timeout=120 #(將數據連接空閑120秒斷)
- Accept_timeout=60 #(將客戶端空閑1分鍾后斷)
- Connect_timeout=60 #(中斷1分鍾后又重新連接)
- local_max_rate=50000 #(本地用戶傳輸率50K)
- anon_max_rate=30000 # (匿名用戶傳輸率30K)
- Max_clients=200 #(FTP的最大連接數)
- Max_per_ip=4 #(每IP的最大連接數)
- listen_port=5555 #綁定鏈接端口
SSL相關選項:
- ssl_enable=yes/no //是否啟用 SSL,默認為no
- allow_anon_ssl=yes/no //是否允許匿名用戶使用SSL,默認為no
- force_anon_logins_ssl=yes/no //匿名用戶登錄時是否加密,默認為no
- force_anon_data_ssl=yes/no //匿名用戶數據傳輸時是否加密,默認為no
- force_local_logins_ssl=yes/no //非匿名用戶登陸時是否加密,默認為yes
- force_local_data_ssl=yes/no //非匿名用戶傳輸數據時是否加密,默認為yes
- rsa_cert_file=/path/to/file //rsa證書的位置
- dsa_cert_file=/path/to/file //dsa證書的位置
- ssl_sslv2=yes/no //是否激活sslv2加密,默認no
- ssl_sslv3=yes/no //是否激活sslv3加密,默認no
- ssl_tlsv1=yes/no //是否激活tls v1加密,默認yes
- ssl_ciphers=加密方法 //默認是DES-CBC3-SHA,也可以是值HIGH,安全性更加好。相關的值,可以用man ciphers在幫組文檔中找到
- implicit_ssl=YES // 是否啟用隱式ssl功能
- listen_port=990 // 隱式ftp端口設置,如果不設置,默認還是21,但是當客戶端以隱式ssl連接時,默認會使用990端口,導致連接失敗!!
- debug_ssl=YES // 輸出ssl相關的日志信息
鏈接限制相關:
connect_timeout=60
單位是秒,在數據連接的主動式聯機模式下,我們發出的連接訊號在 60 秒內得
不到客戶端的響應,則不等待並強制斷線。
accept_timeout=60
當用戶以被動式 PASV 來進行數據傳輸時,如果服務器啟用 passive port 並等
待 client 超過 60 秒而無回應, 那么就給他強制斷線!這個設定值與
connect_timeout 類似,不過一個是管理主動聯機,一個管理被動聯機。
data_connection_timeout=300
如果服務器與客戶端的數據聯機已經成功建立 (不論主動還是被動聯機),但是
可能由於線路問題導致 300 秒內還是無法順利的完成數據的傳送,那客戶端的
聯機就會被我們的 vsftpd 強制剔除!
idle_session_timeout=300
如果使用者在 300 秒內都沒有命令動作,強制脫機!
max_clients=0
如果 vsftpd 是以 stand alone 方式啟動的,那么這個設定項目可以設定同一
時間,最多有多少 client 可以同時連上 vsftpd !限制使用 FTP 的用量!
max_per_ip=0
與上面 max_clients 類似,這里是同一個 IP 同一時間可允許多少聯機
ftp文件配置文件
以下均為默認配置
名稱/路徑 | 用途 |
/etc/vsftpd/vsftpd.conf | ftp配置文件 |
/usr/sbin/vsftpd | ftp主程序 |
/etc/rc.d/init.d/vsftpd | ftp啟動程序 |
/etc/pam.d/vsftpd | PAM認證文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止訪問的用戶來自/etc/vsftpd/ftpusers文件中的用戶) |
/etc/vsftpd/ftpusers | 禁止使用vsftpd的用戶列表文件。記錄不允許訪問FTP服務器的用戶名單,管理員可以把一些對系統安全有威脅的用戶賬號記錄在此文件中,以免用戶從FTP登錄后獲得大於上傳下載操作的權利,而對系統造成損壞。(注意:linux-4中此文件在/etc/目錄下) |
/etc/vsftpd/user_list | 禁止或允許使用vsftpd的用戶列表文件。這個文件中指定的用戶缺省情況(即在/etc/vsftpd/vsftpd.conf中設置userlist_deny=YES)下也不能訪問FTP服務器,在設置了userlist_deny=NO時,僅允許user_list中指定的用戶訪問FTP服務器。(注意:linux-4中此文件在/etc/目錄下) |
/var/ftp | 匿名用戶主目錄;本地用戶主目錄為:/home/用戶主目錄,即登錄后進入自己家目錄 |
/var/ftp/pub | 匿名用戶的下載目錄,此目錄需賦權根chmod 1777 pub(1為特殊權限,使上載后無法刪除) |
/etc/logrotate.d/vsftpd.log | Vsftpd的日志文件 |
tcp_wrappers 詳解
# 是否使用tcp_wrappers作為主機訪問控制方式。
# tcp_wrappers可以實現linux系統中網絡服務的基於主機地址的訪問控制
# 在/etc目錄中的hosts.allow和hosts.deny兩個文件用於設置tcp_wrappers的訪問控制
# 前者設置允許訪問記錄,后者設置拒絕訪問記錄。
# 如想限制某些主機對FTP服務器192.168.57.2的匿名訪問,編緝/etc/hosts.allow文件,如在下面增加兩行命令:
# vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY
# 表明限制IP為192.168.57.1/192.168.57.9主機訪問IP為192.168.57.2的FTP服務器
# 此時FTP服務器雖可以PING通,但無法連接
tcp_wrappers=YES
指定用戶的權限設置
vsftpd.user_list文件需要與vsftpd.conf文件中的配置項結合來實現對於vsftpd.user_list文件中指定用戶賬號的訪問控制:
(1)設置禁止登錄的用戶賬號
當vsftpd.conf配置文件中包括以下設置時,vsftpd.user_list文件中的用戶賬號被禁止進行FTP登錄:
1
2
|
userlist_enable=YES
userlist_deny=YES
|
userlist_enable設置項設置使用vsftpd.user_list文件,userlist_deny設置為YES表示vsftpd.user_list文件用於設置禁止的用戶賬號。
(2)設置只允許登錄的用戶賬號
當vsftpd.conf配置文件中包括以下設置時,只有vsftpd.user_list文件中的用戶賬號能夠進行FTP登錄:
1
2
|
userlist_enable=YES
userlist_deny=NO
|
userlist_enable設置項設置使用vsftpd.user_list文件,userlist _deny設置為NO表示vsftpd.usre_list文件用於設置只允許登錄的用戶賬號,文件中未包括的用戶賬號被禁止FTP登錄。
Userlist_enable=YES |
Ftpusers中用戶允許訪問 |
Userlist_enable=NO |
Ftpusers中用戶禁止訪問 |
Userlist_deny=YES |
Ftpusers中用戶禁止訪問(登錄時可以看到密碼輸入提示,但仍無法訪問) |
Userlist_deny=NO |
ftpusers中用戶禁止訪問 |
Userlist_enable=YES 並且 |
Ftpusers中用戶禁止訪問 |
Userlist_enable=YES 並且 |
Ftpusers中用戶禁止訪問 |
網上看到個很形象的文章
在配置vsftpd的過程中,雖然查了不少資料,但一直沒有搞清楚userlist_deny和userlist_enable到底有什么區別。只能動手測試一下各種情況的表現,從而推測他們的功能。上表為測試結果,從表中可以看出,當userlist_enable為NO時,userlist_deny為YES或NO都登錄成功了。這里推測,userlist_enable的功能是關閉和啟用userlist機制,而user_deny用於是否阻止user_list文件中的用戶登錄,這么說有點繞。換種說法就是,只要userlist_enable開啟了,就可能有用戶被禁止登錄,如果開啟userlist_deny,那么禁用的是user_list文件中指定的用戶,否則user_list文件外的用戶被禁用。
鏈接地址:https://www.cnblogs.com/helloxk/p/3592834.html
二、常用功能
開啟日志功能
開始vsftp記錄日志。修改/etc/vsftpd/vsftpd.conf 如下:
xferlog_enable=YES
## 如果啟用該選項,系統將會維護記錄服務器上傳和下載情況的日志文件。默認情況下,該日志文件為 /var/log/vsftpd.log。但也可以通過配置文件中的 vsftpd_log_file 選項來指定其他文件。默認值為NO。
xferlog_std_format=YES
## 如果啟用該選項,傳輸日志文件將以標准 xferlog 的格式書寫,該格式的日志文件默認為 /var/log/xferlog,也可以通過 xferlog_file 選項對其進行設定。默認值為NO。
xferlog_file=/var/log/xferlog
dual_log_enable=YES
## 如果啟用該選項,將生成兩個相似的日志文件,默認在 /var/log/xferlog 和 /var/log/vsftpd.log 目錄下。前者是 wu-ftpd 類型的傳輸日志,可以利用標准日志工具對其進行分析;后者是Vsftpd類型的日志。
常見的日志解決方案如下:
xferlog_enable=YES xferlog_std_format=YES xferlog_file=/var/log/xferlog dual_log_enable=YES vsftpd_log_file=/var/log/vsftpd.log

該方案將xferlog_enable設置為YES,表明FTP服務器記錄上傳下載的情況,而將xferlog_std_format也設置為YES,則表明將記錄的上傳下載情況寫在xferlog_file所指定的文件中,即/var/log/xferlog文件。 同時,該方案啟用dual_log_enable,表明啟用了雙份日志。在用xferlog文件記錄服務器上傳下載情況的同時,vsftpd_log_file所指定的文件,即/var/log/vsftpd.log,也將用來記錄服務器的傳輸情況。 2、/var/log/xferlog 實例: Sun Feb 23 21:14:36 2014 4 212.73.193.130 915950 /LilleOL_IconSport4/win_230214_51_19.jpg b _ i r sipafranch ftp 0 * c Sun Feb 23 21:14:46 2014 5 212.73.193.130 1018969 /LilleOL_IconSport4/win_230214_51_18.jpg b _ i r sipafranch ftp 0 * c Sun Feb 23 22:07:44 2014 1 212.73.193.130 189 /Lille_IconSP/message_46263.txt b _ i r sipafranch ftp 0 * c Sun Feb 23 22:07:49 2014 4 212.73.193.130 891359 /Lille_IconSP/win_230214_84_80.jpg b _ i r sipafranch ftp 0 * c Sun Feb 23 22:07:54 2014 4 212.73.193.130 874509 /Lille_IconSP/win_230214_52_15.jpg b _ i r sipafranch ftp 0 * c Sun Feb 23 22:07:59 2014 4 212.73.193.130 862666 /Lille_IconSP/win_230214_52_12.jpg b _ i r sipafranch ftp 0 * c Sun Feb 23 22:08:04 2014 4 212.73.193.130 726242 /Lille_IconSP/win_230214_52_13.jpg b _ i r sipafranch ftp 0 * c Sun Feb 23 22:08:09 2014 4 212.73.193.130 833576 /Lille_IconSP/win_230214_84_77.jpg b _ i r sipafranch ftp 0 * c Sun Feb 23 22:08:15 2014 5 212.73.193.130 1009117 /Lille_IconSP/win_230214_84_78.jpg b _ i r sipafranch ftp 0 * c Sun Feb 23 22:08:20 2014 4 212.73.193.130 507537 /Lille_IconSP/win_230214_84_79.jpg b _ i r sipafranch ftp 0 * c Sun Feb 23 22:08:26 2014 6 212.73.193.130 1023575 /Lille_IconSP/win_230214_52_11.jpg b _ i r sipafranch ftp 0 * c 3、每列含義: Sun Feb 23 22:08:26 2014|6|212.73.193.130|1023575| /Lille_IconSP/win_230214_52_11.jpg|b|_|i|r|sipafranch|ftp|0|*|c 記錄含義 Sun Feb 23 22:08:26 2014FTP傳輸時間 6傳輸文件所用時間。單位/秒 212.73.193.130ftp客戶端名稱/IP 1023575傳輸文件大小。單位/Byte /Lille_IconSP/win_230214_52_11.jpg傳輸文件名,包含路徑 b傳輸方式: a以ASCII方式傳輸;b以二進制(binary)方式傳輸; _特殊處理標志位:"_"不做任何處理;"C"文件是壓縮格式;"U"文件非壓縮格式;"T"文件是tar格式; i傳輸方向:"i"上傳;"o"下載; r用戶訪問模式:“a”匿名用戶;"g"訪客模式;"r"系統中用戶; sipafranch登錄用戶名 ftp服務名稱,一般都是ftp 0認證方式:"0"無;"1"RFC931認證; *認證用戶id,"*"表示無法獲取id c完成狀態:"i"傳輸未完成;"c"傳輸已完成
三、其他配置
日志數據分析
/var/log/xferlog日志文件中數據的分析和參數說明
記錄數據 |
參數名稱 |
參數說明 |
Thu Sep 6 09:07:48 2007 |
當前時間 |
當前服務器本地時間,格式為: DDD MMM dd hh:mm:ss YYY |
7 |
傳輸時間 |
傳送文件所用時間,單位為秒 |
192.168.57.1 |
遠程主機名稱/IP |
遠程主機名稱/IP |
4323279 |
文件大小 |
傳送文件的大小,單位為byte |
/home/student/phpMyadmin- 2.11.0-all-languages.tar.gz |
文件名 |
傳輸文件名,包括路徑 |
b |
傳輸類型 |
傳輸方式的類型,包括兩種: a以ASCII傳輸 b以二進制文件傳輸 |
– |
特殊處理標志 |
特殊處理的標志位,可能的值包括: _ 不做任何特殊處理 C 文件是壓縮格式 U 文件是非壓縮格式 T 文件是tar格式 |
i |
傳輸方向 |
文件傳輸方向,包括兩種: o 從FTP服務器向客戶端傳輸 i 從客戶端向FTP服務器傳輸 |
r |
訪問模式 |
用戶訪問模式,包括: a 匿名用戶 g 來賓用戶 r 真實用戶,即系統中的用戶 |
student |
用戶名 |
用戶名稱 |
ftp |
服務名 |
所使用的服務名稱,一般為FTP |
0 |
認證方式 |
認證方式,包括: 0 無 1 RFC931認證 |
* |
認證用戶id |
認證用戶的id,如果使用*,則表示無法獲得該id |
c |
完成狀態 |
傳輸的狀態: c 表示傳輸已完成 i 表示傳輸示完成 |
常見FTP命令及其功能
FTP命令 |
功能 |
FTP命令 |
功能 |
ls |
顯示服務器上的目錄 |
ls [remote-dir][local-file] |
顯示遠程目錄remote-dir,並存入本地文件local-file |
get remote-file [local-file] |
從服務器下載指定文件到客戶端 |
mget remote-files |
下載多個遠程文件(mget命令允許用通配符下載多個文件) |
put local-file [remote-file] |
從客戶端上傳指定文件到服務器 |
mput local-file |
將多個文件上傳至遠程主機(mput命令允許用通配符上傳多個文件) |
open |
連接FTP服務器 |
mdelete [remote-file] |
刪除遠程主機文件 |
close |
中斷與遠程服務器的ftp會話(與open對應) |
mkdir dir-name |
在遠程主機中創建目錄 |
open host[port] |
建立指定的ftp服務器連接,可指定連接端口 |
newer file-name |
如果遠程主機中file-name的修改時間比本地硬盤同名文件的時間更近,則重傳該文件 |
cd directory |
改變服務器的工作目錄 |
rename [from][to] |
更改遠程主機的文件名 |
lcd directory |
在客戶端上(本地)改變工作目錄 |
pwd |
顯示遠程主機的當前工作目錄 |
bye |
退出FTP命令狀態 |
quit |
同bye,退出ftp會話 |
ascii |
設置文件傳輸方式為ASCII模式 |
reget remote-file [local-file] |
類似於get,但若local-file存在,則從上次傳輸中斷處續傳 |
binary |
設置文件傳輸方式為二進制模式 |
rhelp [cmd-name] |
請求獲得遠程主機的幫助 |
![cmd [args]] |
在本地主機中交互shell后退回到ftp環境,如:!ls *.zip |
rstatus [file-name] |
若未指定文件名,則顯示遠程主機的狀態,否則顯示文件狀態 |
accout [password] |
提供登錄遠程系統成功后訪問系統資源所需的密碼 |
hash |
每傳輸1024字節,顯示一個hash符號(#) |
append local-file [remote-file] |
將本地文件追加到遠程系統主機,若未指定遠程系統文件名,則使用本地文件名 |
restart marker |
從指定的標志marker處,重新開始get或put,如restart 130 |
bye |
退出ftp會話過程 |
rmdir dir-name |
刪除遠程主機目錄 |
case |
在使用mget命令時,將遠程主機文件名中的大寫轉為小寫字母 |
size file-name |
顯示遠程主機文件大小,如: size idle 7200 |
cd remote-dir |
進入遠程主機目錄 |
status |
顯示當前ftp狀態 |
cdup |
進入遠程主機目錄的父目錄 |
system |
顯示遠程主機的操作系統 |
delete remote-file |
刪除遠程主機文件 |
user user-name [password][account] |
向遠程主機表明自己的身份,需要密碼時,必須輸入密碼,如:user anonymous my@email |
dir [remote-dir][local-file] |
顯示遠程主機目錄,並將結果存入本地文件 |
help [cmd] |
顯示ftp內部命令cmd的幫助信息,如help get |
FTP數字代碼的意義
110 重新啟動標記應答。 120 服務在多久時間內ready。 125 數據鏈路端口開啟,准備傳送。 150 文件狀態正常,開啟數據連接端口。 200 命令執行成功。 202 命令執行失敗。 211 系統狀態或是系統求助響應。 212 目錄的狀態。 213 文件的狀態。 214 求助的訊息。 215 名稱系統類型。 220 新的聯機服務ready。 221 服務的控制連接端口關閉,可以注銷。 225 數據連結開啟,但無傳輸動作。 226 關閉數據連接端口,請求的文件操作成功。 227 進入passive mode。 230 使用者登入。 250 請求的文件操作完成。 257 顯示目前的路徑名稱。 331 用戶名稱正確,需要密碼。 332 登入時需要賬號信息。 350 請求的操作需要進一部的命令。 421 無法提供服務,關閉控制連結。 425 無法開啟數據鏈路。 426 關閉聯機,終止傳輸。 450 請求的操作未執行。 451 命令終止:有本地的錯誤。 452 未執行命令:磁盤空間不足。 500 格式錯誤,無法識別命令。 501 參數語法錯誤。 502 命令執行失敗。 503 命令順序錯誤。 504 命令所接的參數不正確。 530 未登入。 532 儲存文件需要賬戶登入。 550 未執行請求的操作。 551 請求的命令終止,類型未知。 552 請求的文件終止,儲存位溢出。 553 未執行請求的的命令,名稱不正確。
主動模式與被動模式
主動模式 Port_enable=YES 開啟主動模式 Connect_from_port_20=YES 當主動模式開啟的時候 是否啟用默認的20端口監聽 Ftp_date_port=%portnumber% 上一選項使用NO參數是 指定數據傳輸端口 被動模式 PASV_enable=YES 開啟被動模式 PASV_min_port=%number% 被動模式最低端口 PASV_max_port=%number% 被動模式最高端口
在被動模式,服務器做了NAT,例如雲主機,這時候我們用特定的IP訪問機器,其實還轉了一層。FTP客戶端訪問機器可能會沒響應。具體情況為登錄成功,但是list目錄和文件的時候卡住。
這時候我們用lsof -i:21
vsftpd 22411 nobody 0u IPv4 68905 0t0 TCP 10.140.41.65:ftp->10.10.10.98:43380 (ESTABLISHED) vsftpd 22411 nobody 1u IPv4 68905 0t0 TCP 10.140.41.65:ftp->10.10.10.98:43380 (ESTABLISHED)
這時候可以看到機器的真正IP。
我們需要設置
pasv_addr_resolve=yes
pasv_address=本機ip【就是我們能訪問的外網IP】
這里補個圖,感覺很形象
圖片地址:https://www.jianshu.com/p/cd5f4f4a0d5d
IPV4與IPV6配置相關
vsftpd的配置文件/etc/vsftpd.conf把中"listen=YES"和"listen_ipv6=YES"是不能同時開啟。 默認配置下"listen=YES"開啟,"listen_ipv6=YES"被注釋掉了,此時vsftpd只能監聽到IPv4的FTP請求,不能監聽到IPv6的FTP請求。怎樣讓vsftpd同時支持IPv4和IPv6哪?經過測試發現只要把'/etc/vsftpd.conf'配置文件中listen=YES"注釋掉,,"listen_ipv6=YES"開啟,保存配置文件。
常用配置相關
listen_port=5021 ;命令通道端口,默認為21 listen_data_port=5020 ;數據通道端口,默認為20 pasv_enable=YES ;允許被動模式 pasv_min_port=10000 ;被動模式使用端口范圍 pasv_max_port=10010 local_max_rate=200000 ;用戶寬帶限制 chroot_local_user=YES ;禁用戶離開主目錄
pasv_addr_resolve=YES listen_address=192.168.0.21 ;讓他監聽ip:192.168.0.21
四、遇到問題匯總
1、登入ftp:500 OOPS: vsf_sysutil_bind, maximum number of attempts to find a listening port exceeded
這是因為端口號占用,我這邊是因為被動模式分配的端口太少,都被占用了,所以分配不到端口號了
修改/etc/vsftpd/vsftpd.conf,增加端口
pasv_min_port=60000
pasv_max_port=60100
2、**425 Security: Bad IP connecting.解決方法**
登錄是成功的,ls一直連接超時,wget可以顯示 ip地址更改。
問題分析:
FTP客戶端軟件連接VSftpd服務報此錯誤,大概原因是在連接中變換了IP地址。
問題解決:
1.#vim /etc/vsftpd/vsftpd.conf
2.添加:pasv_promiscuous=YES
3.保存后退出
4.重啟vsftpd #service vsftpd restart
還可以使用以下組合,進行ip綁定
pasv_addr_resolve=YES
pasv_address=本機ip
參考文章:https://blog.csdn.net/qq_15127715/article/details/69055099
附上一個最終版的配置

anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 anon_mkdir_write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chown_uploads=YES xferlog_std_format=YES async_abor_enable=YES ascii_upload_enable=YES ascii_download_enable=YES ftpd_banner=Welcome to blah FTP service. chroot_local_user=YES listen=YES pam_service_name=vsftpd userlist_enable=YES use_localtime=YES listen_port=2121 idle_session_timeout=300 guest_enable=YES guest_username=vsftpd user_config_dir=/etc/vsftpd/uconf data_connection_timeout=100 virtual_use_local_privs=YES pasv_enable=YES pasv_min_port=60000 pasv_max_port=61000 accept_timeout=5 connect_timeout=100 allow_writeable_chroot=YES pasv_promiscuous=YES pasv_addr_resolve=YES pasv_address=121.41.39.238 xferlog_enable=YES xferlog_std_format=YES xferlog_file=/data/logs/vsftp/xfer.log dual_log_enable=YES vsftpd_log_file=/data/logs/vsftp/vsftp.log
參考文件:
https://www.cnblogs.com/idlo/p/10825094.html
https://www.xuebuyuan.com/404886.html (virtual_use_local_privs 詳解)
https://blog.csdn.net/hajistark/article/details/82954777 內外網訪問配置
https://blog.csdn.net/weixin_33851604/article/details/89579494 日志參考
https://www.jb51.net/article/94223.htm
https://www.cnblogs.com/helloxk/p/3592834.html
https://blog.csdn.net/weixin_34384915/article/details/94629922
https://blog.csdn.net/hawht/article/details/22684865