vsftpd服务
一、FTP介绍
vsftpd服务提供了三种ftp登录形式
1.anonymous:匿名用户登录。如果用户在FTP服务器上没有帐号,那么可以使用匿名用户登录,其登录的目录默认为匿名FTP服务器的根目录/var/ftp。
2.local/real:本地帐号,即以真实的用户名和密码进行登录,登录的目录为用户自己的目录,该目录在系统建立帐号时系统自动创建,如在RedHat linux 7.2中建立一个westos用户,那么它的默认目录就是/home/westos,真实用户可以访问整个目录结构。
3.guest:虚拟用户,该帐号只能用于文件传输服务。
二、安装与启动vsftpd
(1)配置selinux
vim/etc/sysconfig/selinux
第7行修改为SELINUX=disabled
:wq
reboot #重启,使修改内容生效
重启后使用getenforce 进行查看
[root@localhost~]# getenforce
Disabled
(2)配置网络
[root@localhost ~]# vim/etc/sysconfig/network-scripts/eth0
DEVICE=eth0
BOOTPROTO=no
ONBOOT=yes
IPADDR=172.25.254.109
PREFIX=24
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=1
[root@localhost ~]# systemctl restartnetwork #重启网络
(3)配置yum源
[root@localhost ~]# vim/etc/yum.repos.d/rhel_dvd.repo
[root@localhost ~]# yum clean all #清空yum源缓存,使可以识别新的yum源
Loaded plugins: langpacks
Cleaning repos: rhel_dvd
Cleaning up everything
(4)安装vsftpd服务器
1.yum search vsftp
2.yum install vsftpd .x86_64 -y
2.systemctl start vsftpd
(5)设置火墙
1.systemctl start firewalld #开启火墙
systemctlenable firewalld
[root@localhost ~]# firewall-cmd --list-all #显示火墙允许的服务
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client ssh #火墙允许访问的服务
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
[root@localhost ~]# firewall-cmd--permanent --add-service=ftp #允许访问ftp服务
success
[root@localhost ~]# firewall-cmd --reload #重新加载火墙服务
success
三、vsftpd.conf文件详述
vsftpd服务的主配置文件/etc/vsftpd/vsftpd.conf
14anonymous_enable=YES #是否允许匿名用户登录FTP服务器,默认是允许
16local_enable=YES #是否允许本地用户登录FTP服务器,默认是允许
19write_enable=YES #是否允许用户在FTP服务器文件中执行写的权限,默认是允许
23local_umask=022 #设置本地用户的文件生成的掩码是022,默认是077
29#anon_upload_enable=YES #匿名用户是否允许上传文件
33#anon_mkdir_write_enable=YES #是否允许账户在FTP服务器中创建目录
37dirmessage_enable=YES #激活目录信息,当远程用户更改目录时,将出现提示信息
40 xferlog_enable=YES #用户上传和下载日志功能
43 connect_from_port_20=YES #启用FTP数据端口的连接请求
114 listen=NO
123 listen_ipv6=YES
124
125 pam_service_name=vsftpd #设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d下
126 userlist_enable=YES #用户列表中的用户是否允许登录FTP服务器,默认是不允许
127 tcp_wrappers=YES
四、登录FTP服务器
(一)匿名帐号FTP服务器配置
1.vim /etc/vsftpd/vsftpd.conf
anonymoous_enable=YES #设置允许匿名用户登录
local_enable=YES #允许本地用户登录
write_enable=YES #允许本地用户有写全权限
2.匿名用户家目录默认是:/var/ftp
3.anon_root=/direcotry #匿名用户家目录修改
4. [root@localhost~]# vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES #匿名帐号具有上传功能
[root@localhost~]# chgrp ftp /var/ftp/pub
[root@localhost~]# chmod 775 /var/ftp/pub/ #为上传目录指定写权限
[root@localhost~]# systemctl restart vsftpd.service
5. 匿名用户的文件下载权限
修改主配置文件
anon_world_readable_only=YES|NO ##设定参数值为NO表示匿名用户可以下载
6.anon_mkdir_write_enable=YES #匿名用户可以创建目录
7.anon_other_write_enable=YES匿名用户删除目录的功能
8.anon_max_rate=xxx#用户上传最大速率设定
9.max_per_ip=xxx #设置用户同一时段并发下载的线程数,即同时可以下载的文件数
10.anon_umask=xxx #匿名用户上传文件默认权限修改
chown_upload=YES
chown_username=XXX #匿名用户登录后所使用的身份
(二)真实帐号登录配置
local_enable=YES #允许本地用户登录
write_enable=YES #本地用户有写权限
(1)本地用户家目录修改
本地用户登录FTP服务器后所在家目录默认为/home/用户名
修改主配置文件:local_root=/directory 如下图中,将家目录改为/mnt
(2)本地用户上传文件权限,默认是644
(3)(临时)限制用户列表中的用户登录
A.用户列表内的用户不能访问,列表外的可以访问
修改配置文件使下面语句生效:
userlist_enable=YES
同时将不允许登录的用户帐号加入到vsftpd.user_list文件中
B.用户列表内的可以访问,不在列表中的不允许访问
修改配置文件,使下面语句生效
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list #原本的黑名单将变成白名单
重启vsftpd服务
(4)限制用户访问特定的目录
默认情况下,本地用户登录到FTP服务器后可以访问服务器中自己目录外的文件。为增加安全性,需对此进行限制,方法是在主配置文件/etc/vsftpd/vsftpd.conf中添加如下语句:
chroot_local_user=YES #启用家目录限制,其默认情况下是NO
chmod u-w /home/* #避免权限过大
如下图是未限制前,westos用户可以切换至其他目录
修改主配置文件后:
A.用户黑名单建立
chroot_local_user=NO #名单中的用户会被限制在家目录中,不能切换,其它用户均可切换。
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list #写入该文件中的用户将被限制,如下:student将被限制
B.用户白名单建立,名单中的用户可以切换,其余用户均不可
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list
如下:student 在白名单中则可以切换目录,其余用户如westos将不能完成切换
(5)限制本地用户登陆
vim /etc/vsftpd/ftpusers ##用户黑名单
vim /etc/vsftpd/user_list ##用户临时黑名单
B.临时用户白名单设定
userlist_deny=NO
/etc/vsftpd/user_list ##参数设定,此文件变成用户白名单,只在名单中出现的用户可以登陆ftp
重启vsftpd服务
注:当用户同时出现在ftpusers和user_list中时,ftpusers优先起作用,即为用户黑名单。
(三)ftp虚拟用户
(1)虚拟用户创建以登陆
1.vim /etc/vsftpd/文件名
如: vim/etc/vsftpd/userfile
用户1
密码
用户2
密码
...
2.db_load -T -t hash -f userfileuserfile.db ##生成一个加密文件,可以cat查看
-T:转换
-thash:以哈希方式进行转换
3.虚拟用户的配置文件:/etc/pam.d/文件名,如:
vim/etc/pam.d/ftpuser
account required pam_userdb.so db=/etc/vsftpd/userfile
##表示:用户必须通过pam认证才能使用
##pam_userdb.so是一种插件,专门认证/ecc/vsftpd/userfile中是否存在该虚拟用户名
auth required pam_userdb.so db=/etc/vsftpd/userfile
##密码必须通过pam认证才可以使用
##pam_userdb.so认证/etc/vsftpd/userfile中是否存在此密码
4.修改ftp主配置文件
vim/etc/vsftpd/vsftpd.conf
输入: pam_service_name=ftpuser ##表示本地用户不能登陆,ftpuser中的虚拟用户名可以登陆
guest_enable=YES ##开启虚拟用户登陆功能
guest_username=名称 ##设置虚拟用户登陆后显示的登陆身份
如: guest_username=linux #虚拟用户身份为linux
5.重启ftp服务
systemctl restart vsftpd.service
(2)虚拟用户家目录分配
cd /etc/vsftpd
1.为用户建立家目录
mkdir /ftpdir/user{1..3} -p
mkdir /ftpdir/user{1..3}/upload
touch /ftpdir/user1/userfile1 #user1可以登陆对应的家目录userfile1
touch /ftpdir/user2/userfile2
touch /ftpdir/user3/userfile3
2.虚拟帐号家目录独立设定
vim /etc/vsftpd/vsftpd.conf
local_root=/ftpuserhome/$USER
user_sub_token=$USER
(3)虚拟账户独立权限的配置
Vsftpd可以为每个虚拟用户设置单独的配置文件,其文件名和用户名相同,这些配置文件需要统一放在一个目录下,目录位置由user_config_dir选项指定,这样,虚拟用户就可以在自己的配置文件中设置不同的内容,实现不同用户拥有不同权限的功能。
1.首先,在主配置文件vsftpd.conf中添加user_config_dir选项,指定配置文件的存放位置。
2.mkdir/etc/vsftpd/userconfig -p
3.在子配置文件中开放自身的某些权限
vim/etc/vsftpd/userconfig/user* #编写某虚拟用户的主配置文件
如:vim/etc/vsftpd/userconfig/user1 #为user1分配权限
4.重启服务