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 ftpuser@192.168.219.129
    2.  
      ftpuser@192.168.219.129'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.

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


免責聲明!

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



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