参考: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.
以上步骤都是自己手动实验做的,文采不好,写的不好,还望各位客官多提意见
-