CentOS 7 - VSFTP

FTP(File Transfer Protocol)

讓我們透過 Network 在 Server 和 Client 之間傳遞檔案
以下是基本設置。有錯誤可留言謝謝。

  1. Installing FTP Server
    安裝 vsftpd Server
    # yum install vsftpd -y
    啟動 vsftp 預設是 disable
    # systemctl start vsftpd
    # systemctl enable vsftpd
    # systemctl status vsftpd
    設置 firewall
    # firewall-cmd --zone=public --permanent --add-port=21/tcp
    # firewall-cmd --zone=public --permanent --add-service=ftp
    # firewall-cmd --reload
  2. 配置 FTP Server
    配置檔預設路徑
    # ll /etc/vsftpd/ 下有個 vsftpd.conf
    備份 vsftpd.conf 以防萬一
    # cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.original
    用 vim 或 vi 開啟 vsftp.conf
    # /etc/vsftpd/vsftpd.conf
    預設內容及介紹
    anonymous_enable=YES  enable anonymous login
    local_enable=YES  permit local login
    write_enable=YES  enable FTP commands
    local_umask=022   local users 建立檔案umask的值
    dirmessage_enable=YES  當 users 進入目錄時顯示消息
    xferlog_enable=YES  保存 log file 詳細紀錄 uploads and downloads
    connect_from_port_20=YES 在 Server 上使用Port 20(ftp-data)進行連接
    xferlog_std_format=YES  保持標準的log file 格式
    listen=NO   防止vsftpd在獨立模式下運行
    listen_ipv6=YES   vsftpd偵聽IPv6,而不是IPv4
    pam_service_name=vsftpd         vsftpd使用PAM服務的名稱
    userlist_enable=YES  vsftpd 啟用用戶名列表
    tcp_wrappers=YES  支援 TCP Wrappers
    根據用戶列表文件 /etc/vsftpd/user_list,配置 FTP 允許/拒絕用戶對 FTP 訪問(以下沒有的可自行新增)

    userlist_file=/etc/vsftpd/user_list   
    userlist_enable = YES #來處理一些不受歡迎的帳號
    userlist_deny=YES #選項設置為YES,若為 YES,則當使用者帳號被列入到某個檔案(user_list)時,在檔案內的使用者無法登入 vsftpd Server
    userlist_deny=NO #會改變設置,這表示只有 user_list 中明確列出的用戶才能被登錄
    
    以下三個選項將FTP用戶限制到其主目錄
    #註解拿掉
    
    chroot_local_user=YES #限制使用者在自己的home目錄
    chroot_list_enable=YES #寫入列表功能
    FTP 線上連線相關設定
    idle_session_timeout=300 #如果使用者在 300 秒內都沒有啥動作,送他強制離線
    data_connection_timeout=300 #資料連線已建立,但 300 秒內無法順利傳送,送他離線
    
    被動連線設定
    主動:主要以 Port 20 對外連線,防火牆的處理比較簡單。
    被動:會隨機取幾個沒有在使用中的 Port 建立被動式連線,相對的防火牆的處理就麻煩。
    自行加上。
    pasv_min_port=65400
    pasv_max_port=65420
    以上儲存後離開,並 restart 服務
    # systemctl restart vsftpd
  3. 使用 SELinux 保護FTP Server
    將SELinux boolean 設置為允許 FTP 讀取用戶主要目錄中的文件
    跟 FTP 服務有關的規則
    #getsebool -a | grep ftp
    ftpd_anon_write --> off
    ftpd_connect_all_unreserved --> off
    ftpd_connect_db --> off
    ftpd_full_access --> off
    ftpd_use_cifs --> off
    ftpd_use_fusefs --> off
    ftpd_use_nfs --> off
    ftpd_use_passive_mode --> off
    httpd_can_connect_ftp --> off
    httpd_enable_ftp_server --> off
    tftp_anon_write --> off
    tftp_home_dir --> off
    # setsebool -P tftp_home_dir 1
  4. Testing FTP Server
    建立 FTP 使用者,以下是創建 2 個測試
    # adduser itachi
    # passwd itachi
    # echo "itachi" >> /etc/vsftpd/chroot_list #記得每個用戶要加入至 chroot_list
    把 itachi 新增至 user_list
    # echo "itachi" >> /etc/vsftpd/user_list
    # cat /etc/vsftpd/user_list
    匿名登入測試
    發現是不允許的...
    # ftp 192.168.64.180
    Connected to 192.168.64.180 (192.168.64.180).
    220 (vsFTPd 3.0.2)
    Name (192.168.64.180:root): anonymous
    530 Permission denied.
    Login failed.
    ftp>
    測試一下 user_list 文件中未列出的用戶是否被授予登錄權限
    真的不行...  

    # ftp 192.168.64.180
    Connected to 192.168.64.180 (192.168.64.180).
    220 (vsFTPd 3.0.2)
    Name (192.168.64.180:root): naruto
    530 Permission denied.
    Login failed.
    ftp>
    最後檢查文件 user_list 中列出的用戶 (itachi) 是否在登錄後實際放置在他的目錄中: 
    # ftp 192.168.64.180
    Connected to 192.168.64.180 (192.168.64.180).
    220 (vsFTPd 3.0.2)
    Name (192.168.64.180:root): itachi
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp>

參考資料:
https://yukifans.com/ie/2014/11/400
http://linux.vbird.org/linux_server/0410vsftpd.php

留言

熱門文章