零、目的
在centos上搭建一个ftp服务器,可以通过windows的资源管理器访问,并且既可以匿名访问,也可以用户登录访问,只是权限不一样、访问的目录不一样:
- 要求匿名登录时只可下载,不可修改、删除及上传;
- 要求两种访问方式进入的目录不一样,用户登录访问既能进入匿名的根目录,也有自己的目录
这样用户登录访问的权限及目录完全包含了匿名登录,便于ftp的文件管理。
一、安装vsftpd
- 先查看是否已经安装vsftpd
[root@localhost ~]# rpm -q vsftpd
未安装软件包 vsftpd
- 安装vsftpd服务及ftp命令
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# yum -y install ftp
3. 验证是否安装成功
[root@localhost ~]# rpm -q vsftpd
vsftpd-3.0.2-27.el7.x86_64
- 启动vsftpd服务并验证状态
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2020-11-04 16:53:01 CST; 9s ago
Process: 1986 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 1987 (vsftpd)
Tasks: 1
CGroup: /system.slice/vsftpd.service
└─1987 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
11月 04 16:53:01 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon...
11月 04 16:53:01 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.
- 加入开机启动:
[root@localhost ~]# chkconfig vsftpd on
二、SELinux及防火墙处理
- 关闭SELinux限制
先执行下面一条命令,临时关闭(重启后失效)
[root@localhost ~]# setenforce 0
再修改配置文件,即使服务器重启,仍为permissive状态,只需改动第8行
[root@localhost ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=permissive
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
- 添加防火墙白名单(或关闭防火墙)
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=ftp
success
[root@localhost ~]# firewall-cmd --reload
success
三、添加ftp账户
新建一个账户
[root@localhost software]# cd /home
[root@localhost home]# useradd ftpuser
[root@localhost home]# passwd ftpuser
用ftpuser建立两个目录以便测试
[root@localhost home]# cd /home/ftpuser
[root@localhost home]# su ftpuser
[root@localhost home]# mkdir denyroot
[root@localhost home]# mkdir ftproot
设置ftpuser不可登录
[root@localhost ftpuser]# su
[root@localhost ftpuser]# vim /etc/passwd
#将最后一行改为:
ftpuser:x:1001:1001::/home/ftpuser:/sbin/nologin
在/etc/shells添加登录shell,如有已有则不用再添加
[root@localhost ftpuser]# vim /etc/shells
另外,注意改一下目录的权限
[root@localhost ftpuser]# chmod -R 700 ftproot/
[root@localhost ftpuser]# chmod -R 755 denyroot/
四、修改配置文件
引用以下最简单的配置
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=NO
tcp_wrappers=YES
#增加下列内容,赋给匿名用户相应权限
anon_other_write_enable=YES
anon_world_readable_only=NO
anon_root=/home/ftpuser/denyroot
重启ftp服务
[root@localhost vsftpd]# systemctl restart vsftpd
五、验证
在windows资源管理器中输入ftp://192.168.3.29/,可直接访问到denyroot
在windows资源管理器中右键登录,输入用户名密码后,直接访问到ftpuser(新建的ftp账户)目录下
另,可逐一测试下载、上传、修改、删除等权限,均无问题。
六、遇到的一些坑
- 刚开始仿照另一台ftp服务器配置,设置了vsftpd.conf中的listen=NO,并且启用了IPv6,配置如下:
listen_ipv6=YES
listen_port=9070
pasv_enable=YES
pasv_min_port=9071
pasv_max_port=9079
但实际在windows资源管理器中访问时,输入的IP是基于IPv4的,所以该方法不可行。
- 因为设置了新建的ftpuser账户不可登录,/sbin/nologin,导致在匿名访问时能正常访问,但登录时总是提示用户名密码不正确,用ftp命令登录时提示如下:
530 Login incorrect. Login failed
这是因为contos系统中没有配置登录用到的shell,所以需要在/etc/shells文件中添加登录脚本:/sbin/nologin
该问题感谢这位的帮助:https://blog.csdn.net/hahahaxiaoyu/article/details/100582853