在Centos7+Apache环境下
安装apache
yum -y install httpd #安装apache
yum -y install net-tools #安装netstat命令
systemctl restart httpd
netstat -anput |grep httpd #查看apache是否正常运行
tcp6 0 0 :::80 :::* LISTEN 1223/httpd
FTP指定目录为:/var/www/html,且需要具有下载上传权限
安装VSFTP
yum -y install vsftpd
systemctl restart vsftpd
netstat -anput |grep vsftpd
tcp6 0 0 :::21 :::* LISTEN 1282/vsftpd
vsftp有三种用户访问模式:
匿名用户
本地用户
虚拟用户
现在将分别对其进行设置
首先备份配置文件
cp /etc/vsftpd/vsftpd.conf{,.bak} #复制文件的快捷写法
ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh vsftpd.conf.rpmsave
一.匿名用户模式
配置vsftpd主配置文件,匿名用户相关权限
vim /etc/vsftpd/vsftpd.conf
找到anonymous_enable=YES行,在下面添加
anon_root=/var/www/
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022
备注:
本来此处FTP指定目录该为/var/www/html,但是新版本的vsftp加入了安全策略,切换了根目录(默认是/var/ftp),根目录不能有写入权限,但是我们需要具备写入权限,所有就把实际上传的路径往上取了一层,不给写入权限,把写入权限给到实际需要的www下一层html目录
给/var/www/html目录赋予文件系统other写入权限
chmod -R o+rw /var/www/html
ll /var/www
total 0
drwxr-xr-x 2 root root 6 Apr 21 2018 cgi-bin
drwxr-xrwx 2 root root 24 Aug 8 15:16 html
以上便配置好,以匿名用户的形式登陆FTP,并将FTP的工作目录指定到了apache的工作目录,方便直接通过FTP客户端,直接上传下载及管理web代码
但是,缺点很明显,只要知道ftp站点IP就可以上去对web代码进行管理,安全性极差,所以实际使用中也很少使用该方式,该方式仅限自己测试用.下面将说下常用的方式,本地用户验证方式
二.本地用户模式
配置vsftpd主配置文件文件
先用备份的配置文件覆盖一次配置文件
cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf
cp: overwrite ‘/etc/vsftpd/vsftpd.conf’? y
将如果忘记备份配置文件可以直接先卸载一次vsftpd,再安装一次
yum -y remove vsftpd && yum -y install vsftpd
修改配置文件,禁用匿名用户,配置本地用户相关权限
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
找到被注释的chroot_local_user=yes,取消掉其注释并添加两行字段,最后效果如下
chroot_local_user=YES #限制用从/var/www/html切换到上一级目录
local_root=/var/www/html #指定用户登陆后的默认目录
allow_writeable_chroot=YES #设置启用用户不能切换目录后的上传,删除,改名等权限
新建本地用户并设置密码
useradd -s /sbin/nologin u1 #加 -s /sbin/nologin意思是该用户不能以系统用户身份登陆到centos系统中,只能作为ftp的用户登陆到ftp用
useradd -s /sbin/nologin u2
echo "u1:123" |chpasswd
echo "u2:123" |chpasswd
设置 /var/www/html写入权限
chmod o+w /var/www/html -R
ll /var/www/
total 0
drwxr-xr-x 2 root root 6 Apr 21 2018 cgi-bin
drwxr-xrwx 2 root root 24 Aug 8 16:23 html
启动服务
systemctl restart vsftpd
测试效果如下:
这里说下为什么本地用户时,ftp默认目录是/var/www/html,而匿名则是/var/www/,刚才介绍匿名的时候就说了因为vsftp本身的安全策略导致,但是我们在配置本地用户时,加入了allow_writeable_chroot=YES字段,该字段正好可以修改此策略,但是该字段只用于本地用户和虚拟用户,匿名用户类似该字段功能字段我没有找到,如果有人找到了可以告知一下.
备注一下:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
三个字段的关系
chroot_local_user=YES
是防止登陆的用户切换到上一级及更上一级目录,如果想测试,可以把YES改成NO试试效果
chroot_list_enable=YES
则是启用例外名单
chroot_list_file=/etc/vsftpd/chroot_list
则是指定例外名单的文件名
可以这样理解三个字段的意思
chroot_local_user=YES 是公司不准迟到的规则
chroot_list_enable=YES 是启用公司老总可以例外
chroot_list_file=/etc/vsftpd/chroot_list 则是通过chroot_list名单来指定哪些是公司领导
如chroot_local_user设置为YES,然后通过chroot_list_file指定了例外名单文件名,把刚才创建的用户名随便一个写进chroot_list(一个用户名写一行),则该用户则不受切换目录限制,可以通过ftp在linux系统目录中任意切换,也具备一定的安全风险,所以才使用chroot_local_user=YES
三.虚拟用户模式
安装pam认证方式
yum -y install pam pam-devel
添加虚拟用户映射的本地用户
useradd -s /sbin/nologin virftp
echo "virftp:123" |chpasswd
配置vsftp主配置文件
如果之前做了其他配置建议覆盖一下配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #禁用匿名用户登录
guest_enable=YES #启用虚拟用户登陆,需添加
guest_username=virftp #指定虚拟用户映射的本地用户,需添加
user_config_dir=/etc/vsftpd/vsftpd_virusers #设置各虚拟用户的配置文件目录
pam_service_name=vsftpd #指定使用pam验证的配置文件,已存在不用修改
配置虚拟用户
添加虚拟用户
vim /etc/vsftpd/vir_user #奇数行为账号,偶数行为密码
cat /etc/vsftpd/vir_user
test01
123
test02
123
创建虚拟用户数据库
db_load -T -t hash -f /etc/vsftpd/vir_user /etc/vsftpd/vir_user.db
修改数据库权限属主权限
chmod 700 /etc/vsftpd/vir_user.db
配置pam验证文件
cp /etc/pam.d/vsftpd{,.bak}
vim /etc/pam.d/vsftpd
将auth及account的所有配置行均注释掉,再添加如下两行
auth required pam_userdb.so db=/etc/vsftpd/vir_user
account required pam_userdb.so db=/etc/vsftpd/vir_user
单独配置虚拟用户的权限
mkdir /etc/vsftpd/vsftpd_virusers/
vim /etc/vsftpd/vsftpd_virusers/test01
输入以下字段控制权限
anon_upload_enable=YES #虚拟用户的上传权限
anon_mkdir_write_enable=YES #虚拟用户创建文件目录权限
anon_other_write_enable=YES #虚拟用户改名等其他权限
anon_umask=022 #设置在ftp中新建和上传的文件的初始权限
local_root=/var/www/html #设置虚拟用户登陆后的目录
allow_writeable_chroot=YES #设置启用用户不能切换目录后的上传,删除,改名等权限
chroot_local_user=YES #启用用户登录后不能切上一级目录
设置 /var/www/html写入权限
chmod o+w /var/www/html -R
ll /var/www/
total 0
drwxr-xr-x 2 root root 6 Apr 21 2018 cgi-bin
drwxr-xrwx 2 root root 24 Aug 8 16:23 html
重启vsftp服务
systemctl restart vsftpd
最后验证
添加新虚拟用户
设置虚拟用户名称和密码
vim /etc/vsftpd/vir_user
在奇数行设置用户名,紧随其后的偶数行为其密码
导入到pam验证的用户数据库
db_load -T -t hash -f /etc/vsftpd/vir_user /etc/vsftpd/vir_user.db
配置新用户的权限
只需要把之前的用户的权限配置文件复制一份并重新命名为新用户即可,如果有权限需要设置,可以根据具体情况进行调整
cp /etc/vsftpd/vsftpd_viruser/test01 /etc/vsftpd/vsftpd_viruser/test02
============================================================================================
至此,vsftp的三种用户验证方式都配置完成,