參考:https://blog.csdn.net/tancy_weipj/article/details/82911171
一. 設置用戶訪問FTP的權限
為了安全起見,在搭建FTP服務器的時候會限制用戶的登錄,那些用戶我讓他訪問,那些不讓訪問,FTP服務器提供了兩個配置文件:
/etc/vsftpd/user_list // 許可哪些用戶可以訪問
/etc/vsftpd/ftpusers // 不允許哪些用戶訪問
我這里創建了三個用戶用於測試
-
[root@localhost vsftpd] # useradd ftptest
-
[root@localhost vsftpd] # useradd ftpuser
-
[root@localhost vsftpd] # useradd ftpname
首先我們測試許可ftptest用戶
登錄的時候出現一個問題:
-
[root@localhost ~]# ftp 192.168.219.129
-
ftp connect 沒有主機的路由
-
> ftp
訪問被拒絕了,首先想到是防火牆(iptables)的原因,在FTP服務器上查看防火牆狀態發現防火牆是開的,停了再次連FTP就沒問題了
-
[root@localhost vsftpd] # firewall-cmd --state
-
running
-
[root@localhost vsftpd] # systemctl stop firewalld.service
-
[root@localhost vsftpd] # firewall-cmd --state
-
not running
在沒有許可ftptest用戶前連接被拒絕了
-
[root@localhost ~]# ftp 192.168.219.129
-
Connected to 192.168.219.129 (192.168.219.129).
-
220 ( vsFTPd 3.0.2)
-
Name (192.168.219.129:root): ftptest
-
530 Permission denied.
-
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(其他用戶按照這一步驟操作即可)
-
[root@localhost ~]# ftp 192.168.219.129
-
Connected to 192.168.219.129 (192.168.219.129).
-
220 ( vsFTPd 3.0.2)
-
Name (192.168.219.129:root): ftptest
-
331 Please specify the password.
-
Password:
-
230 Login successful.
-
Remote system type is UNIX.
-
Using binary mode to transfer files.
-
ftp>
二. 設置FTP,SFTP的根目錄
設置FTP的根目錄
正常情況下FTP和SFTP默認的根目錄是在登錄用的家目錄(/home/ftpuser)下,這樣的話會有一個問題,當我們用不同的用戶登錄的時候,他進的FTP目錄不一樣,例:
為了方便測試我們在不用的用戶根目錄下新建標識文件:
-
[root@localhost home] # touch /home/ftpuser/ftpuser.txt
-
[root@localhost home] # touch /home/ftpname/ftpname.txt
- 首先用ftpuser用戶登錄ftp
-
[ root@localhost ~]# ftp 192.168.219.129
-
Connected to 192.168.219.129 (192.168.219.129).
-
220 (vsFTPd 3.0.2)
-
Name (192.168.219.129:root): ftpuser
-
331 Please specify the password.
-
Password:
-
230 Login successful.
-
Remote system type is UNIX.
-
Using binary mode to transfer files.
-
ftp> pwd
-
257 "/"
-
ftp> ls
-
227 Entering Passive Mode (192,168,219,129,194,109).
-
150 Here comes the directory listing.
-
-rw-r--r-- 1 0 0 0 Oct 08 16:12 ftpuser.txt
-
226 Directory send OK.
-
- 用ftpname 用戶登錄ftp
-
[ root@localhost ~]# ftp 192.168.219.129
-
Connected to 192.168.219.129 (192.168.219.129).
-
220 (vsFTPd 3.0.2)
-
Name (192.168.219.129:root): ftpname
-
331 Please specify the password.
-
Password:
-
230 Login successful.
-
Remote system type is UNIX.
-
Using binary mode to transfer files.
-
ftp> pwd
-
257 "/"
-
ftp> ls
-
227 Entering Passive Mode (192,168,219,129,118,21).
-
150 Here comes the directory listing.
-
-rw-r--r-- 1 0 0 0 Oct 08 16:11 ftpname.txt
-
226 Directory send OK.
像上面的情況,不用的用戶登錄不通的ftp,他會進入各自的家目錄,如果想要不同的用戶進入同一目錄可以參照下面的設置:
local_root=/var/www/ftp/ (自己指定的ftp根目錄)
這時候需要注意一點根目錄的權限是drwxr-xr-x.,這時候ftp是沒有寫入權限的,需要寫入權限可以給他分配成777(注意:要是ftp和sftp的根目錄保持一致的話就不能給跟目錄分配成777,可以在根目錄下新建一個文件夾再分配777的權限)-
-
550 Create directory operation failed.
設置SFTP的根目錄
打開/etc/ssh/sshd_config文件修改配置-
#Subsystem sftp /usr/libexec/openssh/sftp-server
-
Subsystem sftp internal-sftp
在文件結尾加上下面配置即可
-
Match User ftpuser
-
ChrootDirectory /var/www/ftp/
-
ForceCommand internal-sftp
重啟sshd驗證
service sshd restart
為了方便區分,我在設置的ftp根目錄下新建test文件touch /var/www/ftp/test
登錄SFTP驗證
-
[ root@localhost ~]# sftp ftpuser@192.168.219.129
-
ftpuser@192.168.219.129's password:
-
Connected to 192.168.219.129.
-
sftp> ls -l
-
-rw-r--r-- 1 0 0 0 Oct 9 05:38 test
登錄FTP驗證
-
[ root@localhost ~]# ftp 192.168.219.129
-
Connected to 192.168.219.129 (192.168.219.129).
-
220 (vsFTPd 3.0.2)
-
Name (192.168.219.129:root): ftpuser
-
331 Please specify the password.
-
Password:
-
230 Login successful.
-
Remote system type is UNIX.
-
Using binary mode to transfer files.
-
ftp> ls
-
227 Entering Passive Mode (192,168,219,129,162,143).
-
150 Here comes the directory listing.
-
-rw-r--r-- 1 0 0 0 Oct 09 13:38 test
-
226 Directory send OK.
以上步驟都是自己手動實驗做的,文采不好,寫的不好,還望各位客官多提意見
-