安装:ftp服务:yum -y instal vsftpd
安装:ftp客户端:yum -y instal ftp
启动ftp服务:systemctl start vsvtpd
使用普通用户(不是root)登录测试:
[root@localhost vsftpd]# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.3)
Name (localhost:root): tomcat
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||60430|)
150 Here comes the directory listing.
-rw-r--r-- 1 1001 50 0 Jun 03 15:09 1.txt
drwxr-xr-x 2 1001 50 6 Jun 03 16:04 ftp_in
drwxr-xr-x 2 1001 50 6 Jun 03 16:04 ftp_in_bak
226 Directory send OK.
测试使用ls和cd命令,可以到tomcat用户下的任何目录,这不是我们期望的,只能限定用户在指定的目录操作。
[root@localhost data]# vi /etc/vsftpd/vsftpd.conf
chroot_local_user=YES #限制ftp登录用户只能在local_root指定的目录内操作
local_root=/data/ftp #指定ftp根目录
allow_writeable_chroot=YES #指定根目录写权限,否则报500 OOPS: vsftpd: refusing to run with writable root inside chroot()
#指定chroot_list文件里的用户可以操作local_root以外的目录,需要指定chroot_list_file配置,这里不启用
#chroot_list_enable=YES
# (default follows) 这里要配合chroot_list_enable使用,指定不限制目录的用户,这里不启用
#chroot_list_file=/etc/vsftpd/chroot_list
修改/data/ftp目录操作权限(这里视情况给权限,安装测试时先用777,避免权限问题):
chmod -R 777 /data/ftp
重启ftp服务:
systemctl restart vsftpd
重新登录ftp后就只能在指定的目录: /data/ftp 下操作了
处理因selinux拦截ls命令报错问题:
先启用selinux
[root@localhost ~]# setenforce 1
ftp> ls #这里已经报错
229 Entering Extended Passive Mode (|||34974|)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
关闭 selinux
[root@localhost ~]# setenforce 0
ftp> ls #关闭selinux后正常
229 Entering Extended Passive Mode (|||21252|)
150 Here comes the directory listing.
-rw-r--r-- 1 1001 50 0 Jun 03 15:09 1.txt
drwxr-xr-x 2 1001 50 6 Jun 03 16:04 boss_in
drwxr-xr-x 2 1001 50 6 Jun 03 16:04 boss_in_bak
226 Directory send OK.
查看selinux有关ftp的规则:
[root@localhost ~]# getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
设置启用ftpd_full_access
setsebool -P ftpd_full_access=on
再登录ftp测试,问题解决。这里根据实际情况开启其它规则,如:tftp_home_dir,ftpd_connect_db等。
因配置文件有写权限会导致不能登录:
[root@localhost vsftpd]# ll /etc/vsftpd
total 20
-rw-------. 1 root root 0 Jun 3 23:05 chroot_list
-rw-rw-rw-. 1 root root 125 May 14 2019 ftpusers
-rw-------. 1 root root 361 May 14 2019 user_list
-rw-rw-rw-. 1 root root 5154 Jun 4 01:24 vsftpd.conf
-rw-rw-rw-. 1 root root 348 May 14 2019 vsftpd_conf_migrate.sh
要保证chroot_list,ftpusers,user_list几个文件的其它权限不能有可写的权限2,关于这几个文件,文件头部有详细的使用说明。
增加只能ftp登录的用户,必须要保证/etc/shells里有/sbin/nologin
如:新增只能ftp登录的用户:useradd -d /data/ftp -s /sbin/nologin ttm
设置登录密码:passwd ttm
vi /etc/shells #添加/sbin/nologin,保存退出即可生效
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/sbin/nologin
开启防火墙的情况下,需要开放FTP端口,增加ftp服务,否则远程机无法连接
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload