FTP,SFTP伺服器登入許可權和根目錄的設定
參考: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 [email protected]
- [email protected]'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.
以上步驟都是自己手動實驗做的,文采不好,寫的不好,還望各位客官多提意見