1. 程式人生 > 實用技巧 >FTP,SFTP伺服器登入許可權和根目錄的設定

FTP,SFTP伺服器登入許可權和根目錄的設定

參考:https://blog.csdn.net/tancy_weipj/article/details/82911171

一. 設定使用者訪問FTP的許可權

為了安全起見,在搭建FTP伺服器的時候會限制使用者的登入,那些使用者我讓他訪問,那些不讓訪問,FTP伺服器提供了兩個配置檔案:

/etc/vsftpd/user_list //許可哪些使用者可以訪問

/etc/vsftpd/ftpusers //不允許哪些使用者訪問

我這裡建立了三個使用者用於測試

  1. [root@localhost vsftpd]# useradd ftptest
  2. [root@localhost vsftpd]# useradd ftpuser
  3. [root@localhost vsftpd]# useradd ftpname

首先我們測試許可ftptest使用者

登入的時候出現一個問題:

  1. [root@localhost ~]# ftp 192.168.219.129
  2. ftp connect 沒有主機的路由
  3. >ftp

訪問被拒絕了,首先想到是防火牆(iptables)的原因,在FTP伺服器上檢視防火牆狀態發現防火牆是開的,停了再次連FTP就沒問題了

  1. [root@localhost vsftpd]# firewall-cmd --state
  2. running
  3. [root@localhost vsftpd]# systemctl stop firewalld.service
  4. [root@localhost vsftpd]# firewall-cmd --state
  5. not running

在沒有許可ftptest使用者前連線被拒絕了

  1. [root@localhost ~]# ftp 192.168.219.129
  2. Connected to 192.168.219.129 (192.168.219.129).
  3. 220 (vsFTPd 3.0.2)
  4. Name (192.168.219.129:root): ftptest
  5. 530 Permission denied.
  6. Login failed.

現在許可一下看看,在/etc/vsftpd/user_list裡面加入ftptest(注意:一個使用者單獨佔一行)

這是報錯:500 OOPS: vsftpd: refusing to run with writable root inside chroot()

解決辦法:用命令chmod a-w /home/ftptest去除使用者主目錄的寫許可權,注意把目錄替換成自己的。或者你可以在vsftpd的配置檔案中增加下面的內容:allow_writeable_chroot=YES

再次登入測試,這時登入OK(其他使用者按照這一步驟操作即可)

  1. [root@localhost ~]# ftp 192.168.219.129
  2. Connected to 192.168.219.129 (192.168.219.129).
  3. 220 (vsFTPd 3.0.2)
  4. Name (192.168.219.129:root): ftptest
  5. 331 Please specify the password.
  6. Password:
  7. 230 Login successful.
  8. Remote system type is UNIX.
  9. Using binary mode to transfer files.
  10. ftp>

二. 設定FTP,SFTP的根目錄

設定FTP的根目錄
正常情況下FTP和SFTP預設的根目錄是在登入用的家目錄(/home/ftpuser)下,這樣的話會有一個問題,當我們用不同的使用者登入的時候,他進的FTP目錄不一樣,例:

為了方便測試我們在不用的使用者根目錄下新建標識檔案:

  1. [root@localhost home]# touch /home/ftpuser/ftpuser.txt
  2. [root@localhost home]# touch /home/ftpname/ftpname.txt
  1. 首先用ftpuser使用者登入ftp
    1. [root@localhost ~]# ftp 192.168.219.129
    2. Connected to 192.168.219.129 (192.168.219.129).
    3. 220 (vsFTPd 3.0.2)
    4. Name (192.168.219.129:root): ftpuser
    5. 331 Please specify the password.
    6. Password:
    7. 230 Login successful.
    8. Remote system type is UNIX.
    9. Using binary mode to transfer files.
    10. ftp> pwd
    11. 257 "/"
    12. ftp> ls
    13. 227 Entering Passive Mode (192,168,219,129,194,109).
    14. 150 Here comes the directory listing.
    15. -rw-r--r-- 1 0 0 0 Oct 08 16:12 ftpuser.txt
    16. 226 Directory send OK.
  2. 用ftpname使用者登入ftp
    1. [root@localhost ~]# ftp 192.168.219.129
    2. Connected to 192.168.219.129 (192.168.219.129).
    3. 220 (vsFTPd 3.0.2)
    4. Name (192.168.219.129:root): ftpname
    5. 331 Please specify the password.
    6. Password:
    7. 230 Login successful.
    8. Remote system type is UNIX.
    9. Using binary mode to transfer files.
    10. ftp> pwd
    11. 257 "/"
    12. ftp> ls
    13. 227 Entering Passive Mode (192,168,219,129,118,21).
    14. 150 Here comes the directory listing.
    15. -rw-r--r-- 1 0 0 0 Oct 08 16:11 ftpname.txt
    16. 226 Directory send OK.

    像上面的情況,不用的使用者登入不通的ftp,他會進入各自的家目錄,如果想要不同的使用者進入同一目錄可以參照下面的設定:
    local_root=/var/www/ftp/ (自己指定的ftp根目錄)
    這時候需要注意一點根目錄的許可權是drwxr-xr-x.,這時候ftp是沒有寫入許可權的,需要寫入許可權可以給他分配成777(注意:要是ftp和sftp的根目錄保持一致的話就不能給跟目錄分配成777,可以在根目錄下新建一個資料夾再分配777的許可權)

    1. ftp> mkdir test
    2. 550 Create directory operation failed.

    設定SFTP的根目錄
    開啟/etc/ssh/sshd_config檔案修改配置

    1. #Subsystem sftp /usr/libexec/openssh/sftp-server
    2. Subsystem sftp internal-sftp

    在檔案結尾加上下面配置即可

    1. Match User ftpuser
    2. ChrootDirectory /var/www/ftp/
    3. ForceCommand internal-sftp


    重啟sshd驗證
    service sshd restart
    為了方便區分,我在設定的ftp根目錄下新建test檔案

    touch /var/www/ftp/test

    登入SFTP驗證

    1. [root@localhost ~]# sftp [email protected]
    2. [email protected]'s password:
    3. Connected to 192.168.219.129.
    4. sftp> ls -l
    5. -rw-r--r-- 1 0 0 0 Oct 9 05:38 test

    登入FTP驗證

    1. [root@localhost ~]# ftp 192.168.219.129
    2. Connected to 192.168.219.129 (192.168.219.129).
    3. 220 (vsFTPd 3.0.2)
    4. Name (192.168.219.129:root): ftpuser
    5. 331 Please specify the password.
    6. Password:
    7. 230 Login successful.
    8. Remote system type is UNIX.
    9. Using binary mode to transfer files.
    10. ftp> ls
    11. 227 Entering Passive Mode (192,168,219,129,162,143).
    12. 150 Here comes the directory listing.
    13. -rw-r--r-- 1 0 0 0 Oct 09 13:38 test
    14. 226 Directory send OK.

    以上步驟都是自己手動實驗做的,文采不好,寫的不好,還望各位客官多提意見