一、环境准备
yum -y install glibc
yum -y install libcap
yum -y install libnsl
yum -y install openssl
yum -y install pam
二、yum安装
yum -y install vsftpd
三、启动
systemctl start vsftpd
ps aux | grep vsftpd #检测是否启动
四、本地用户登录
1、修改配置文件
vim /etc/vsftpd/vsftpd.conf
启用如下:
anonymous_enable=NO #不允许匿名用户登录
local_enable=YES #允许本地用户登录
write_enable=YES #允许写入权限 包括删除修改
local_umask=022 #本地用户文件上传权限限制
dirmessage_enable=YES #显示目录说明文件
xferlog_enable=YES #记录所有的上传下载信息,默认放在/var/log/vsftpd.log
connect_from_port_20=YES #使用20端口
listen=YES
pam_service_name=vsftpd
userlist_enable=YES #在userlist_file文件内的用户可以使用ftp服务
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES
2、添加用户
useradd ftpuser -s /sbin/nologin #添加账户 禁止登录bash
passwd ftpuser #设置密码
3、编辑user_list文件
vim /etc/vsftpd/user_list
添加ftpuser等用户到文件中
4、开启防火墙 ftp默认端口21
firewall-cmd --zone=public --add-port=21/tcp --permanent #开启防火墙21端口
systemctl restart firewalld.service #重启防火墙服务
firewall-cmd --query-port=21/tcp #查询防火墙21端口是否打开
注:netstat命令是在可用接口上监听端口,若该端口没有被占用,则不会查询到
5、修改SELinux
getsebool -a | grep ftp
可以看到都是off,没有开启外网访问
setsebool -P allow_ftpd_full_access on
setsebool -P tftp_home_dir on
6、启动服务
systemctl start vsftpd
7、在另一台linux服务器安装ftp客户端,接下来的操作都在这台进行(也可以在windows终端执行)
yum -y install ftp
同时开启本机防火墙的21端口 或者是关闭防火墙
8、登录到服务器端192.168.162.128
ftp 192.168.162.128
可以看到,提示530登陆失败,寻找错误原因
解决办法:
决定一个用户是否可以通过ftp登录有两个配置文件:ftpusers和user_list。在ftpusers中的用户都不能通过ftp登录,在user_list中的用户根据配置决定。给这两个文件授权。chmod 644 ftpusers chmod 644 user_list (不过这里好像没说权限问题)
查看日志tail -f /var/log/secure 部分信息为Unregistered Authentication Agent for unix-process:6284
修改/etc/pam.d/vsftpd文件 注释#auth required pam_shells.so
该pam设置含义为如果用户想登录系统,那么它的shell必须是在/etc/shells文件中之一的shell
9、测试
- 下载文件
-----get 文件名
上传文件
-----put 文件名
删除文件
-----delete 文件名
修改文件名
-----rename 原文件名 新文件名
五、虚拟用户登录
1、继续修改配置文件
vim /etc/vsftpd/vsftpd.conf
在本地用户的基础下启用如下:
guest_enable=YES #启用虚拟用户
guest_username=vuser #虚拟用户使用的系统用户名
virtual_use_local_privs=YES #设定虚拟用户的权限符合他们的宿主用户。
user_config_dir=/etc/vsftpd/vusers_conf #虚拟用户使用的配置文件目录
2、在/etc/vsftpd下面建立虚拟用户信息文件,在其中写入用户和密码,奇数行为用户,偶数行为密码
vim vusers
3、生成虚拟用户数据库文件
db_load -T -t hash -f /etc/vsftpd/vusers /etc/vsftpd/vusers.db
为了保护信息,该文件是乱码文件
4、设置文件权限
chmod 700 /etc/vsftpd/vusers.db
5、配置pam文件
vim /etc/pam.d/vsftpd
注释掉所有内容,然后添加(不能写成db=/etc/vsftpd/vusers.db)
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
6、添加一个系统用户vuser,用它来对应所有虚拟用户,虚拟用户使用系统用户访问ftp
useradd vuser
mkdir -p /home/ftp/vuser #虚拟用户的目录
chown vuser:vuser /home/ftp/vuser
7、创建虚拟用户使用的配置文件目录
mkdir /etc/vsftpd/vusers_conf
8、设置虚拟用户配置文件(文件名设置成和账户名相同)
touch /etc/vsftpd/vusers_conf/admin
touch /etc/vsftpd/vusers_conf/ham
touch /etc/vsftpd/vusers_conf/snake
并在其中写入(注意配置文件行后面不能有空格,否则会报错):
local_root= /home/ftp/vuser #指定虚拟用户的目录
anon_world_readable_only=NO #浏览FTP目录和下载
anon_upload_enable=YES #允许上传
anon_mkdir_write_enable=YES #允许建立和删除目录
anon_other_write_enable=YES #允许改名和删除文件
9、重新启动ftp服务
systemctl restart vsftpd
10、虚拟用户登录192.168.162.128
出现权限被拒绝:
530 Permission denied.
Login failed.
解决:在user_list中加入虚拟用户
11、测试
- 上传文件
-----put 文件名
下载文件
-----get 文件名
删除文件
-----delete 文件名
修改文件名
-----rename 原文件名 新文件名
(注:部分资料来源于网络,如有侵权,请联系作者)