实验:vsftpd中禁止匿名用户的登录,yixuan与xiaozhu同时映射系统用户vuser,但是两个虚拟用户却一个有上传权限,一个没有,主要的原因是在vsftpd.conf配置文件中有一个user_upload_dir=/etc/vsftpd/vusers.conf.d
vsftpd:very secure ftpdaemon一个安全的ftp服务
启动文件:/usr/sbin/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
CentOS6:
启动程序:/etc/rc.d/init.d/vsftpd
开机自启:chkconfig vsftpd on
CentOS7:
启动程序:/usr/lib/systemd/system/vsftpd.service
开机自启:systemctl enable vsftpd.service
配置文件:/etc/vsftpd/vsftpd.conf
配置文件中指令格式:directive=value
匿名用户:
anonymous_enable=YES:允许匿名用户登录
anon_upload_enable=YES:匿名用户上传权限
注意:匿名用户的上传操作;生效要依赖于write_enable=YES;
anon_mkdir_write_enable=YES:匿名用户创建目录的权限;
anon_other_write_enable:匿名用户的删除,重命名操作权限;
本地用户:
local_enable:所有的非匿名的生效,都依赖于此指令;
local_umask=022:本地用户上传文件的权限掩码;
说明:文件掩码666,目录掩码777
目录消息:
dirmessage_enable=YES:用户第一次进入目录时,vsftpd会查看.message文件,并将其内容显示给用户;
message_file指定文件路径,而不使用默认的.message;
数据传输日志:
xferlog_enable:是否支持上传及下载日志
xferlog_std_format:是否使用上传标准格式日志
xferlog_file=/var/log/xferlog:上传下载日志文件路径
数据传输模式:
connect_from_port_20:是否启用PORT模式
修改匿名用户上传的文件的属主:
chown_uploads:是否修改;
chown_username:启用chown_uploads指令时,将文件属主修改为此指令指定的用户;默认为root;
chown_upload_mode:设定匿名用户上传的文件的权限;默认为600;
设定会话超时时长:
idle_session_timeout:空闲会话超时时长;
connect_timeout:PORT模式下,服务器连接客户端的超时时长;
data_connection_timeout:数据传输的超时时长;
命令连接的监听端口:
listen_port:默认为21;
设定连接及传输速率:
ocal_max_rate:本地用户的最大传输速率,单位是字节;默认为0,表示无限制;
anon_max_rate:匿名用户的最大传输速率;
max_clients:最大并发连接数;
max_per_ip:每个IP所允许发起的最大连接数;
禁锢本地用户:
chroot_local_user=YES:禁锢所有本地用户;
注意:要求用户不能对家目录有写权限;
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
禁锢指定用户于家目录中;
userlist_enable
启用时,vsftpd将加载一个由userlist_file指令指定的用户列表文件;此文件中的用户是否能访问vsftpd服务取决于userlist_deny指令;
userlist_deny=YES:表示此列表为黑名单;
userlist_deny=NO:表示此列表为白名单;
基于数据库表中的某一个用户实现登录访问
基于db文件: /etc/vsftpd/vusers.txt文件
格式:
奇数行:用户名
偶数行:密码
基于mysql服务:
[注意]vsftpd框架是基于pam认证,如果想要使用mysql,就要使用pam认证,对于pam来说能支持N中数据库,默认情况下是不支持mysql驱动的,在/lib64/security目录下显示pam支持的所有驱动,对于mysql,我们需要自己编译
(1)编译程序包之前提供开发环境
[linux@server ~]# yum -y groupinstall "Development Tools" "Server Platform Development"
(2)提供mariadb-servermaradb-devel openssl-devel
[linux@server ~]# yum -y install pam-devel openssl-develmariadb-devel
(3)开启mariadb服务并开机开启
(4)下载pam_mysql-0.7RC1.tar.gz编译安装
[提示]./conifgure �help查看编译的选项参数信息
[linux@server ~]# ./configure--with-mysql=/usr --with-openssl=/usr --with-pam=/usr--with- pam-mods-dir=/lib64/security [linux@server ~]# make && makeinstall
(5)进入mysql创建一个数据库,在数据库中创建一个表,(用户的密码采用的是password加密方式,因此我们要考虑pam是否支持password的加密方式)
[root@localhost security]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.44-MariaDBMariaDB Server Copyright (c) 2000, 2015,Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' toclear the current input statement. MariaDB [(none)]> createdatabase vsftpd; Query OK, 1 row affected (0.00sec) MariaDB [(none)]> use vsftpd; Database changed MariaDB [vsftpd]> createtable users( ->id int AUTO_INCREMENT not null primary key, ->name char(30)not null, ->passwd char(48) binary not null); Query OK, 0 rows affected (0.10sec) MariaDB [vsftpd]> desc users; +--------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key |Default | Extra | +--------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL |auto_increment | | name | char(30)| NO | | NULL | | | passwd | char(48) | NO | | NULL | | +--------+----------+------+-----+---------+----------------+ 3 rows in set (0.08 sec) MariaDB [vsftpd]> insertinto users(name,password) value ('xiaozhu',password('xiaozhu')); ERROR 1054 (42S22): Unknowncolumn 'password' in 'field list' MariaDB [vsftpd]> insertinto users(name,passwd) value ('xiaozhu',password('xiaozhu')); Query OK, 1 row affected (0.06sec) MariaDB [vsftpd]> insertinto users(name,passwd) value ('yixuan',password('yixuan')); Query OK, 1 row affected (0.01sec) MariaDB [vsftpd]> select *from users; +----+---------+-------------------------------------------+ | id | name |passwd | +----+---------+-------------------------------------------+ | 1 | xiaozhu | *9C9ABCC50CA3281C861B0C79CA0B67274D5477B4| | 2 | yixuan | *36728ECF64E6D5EADAF4C3234142F116A64CCEAE| +----+---------+-------------------------------------------+ 2 rows in set (0.00 sec) MariaDB [vsftpd]> grant select on vsftpd.*to [email protected] identified by 'mysql'; Query OK, 0 rows affected (0.11 sec) MariaDB [vsftpd]> grant select on vsftpd.*to vsftpd@’localhost’ identified by 'mysql'; #正向与反向解析 MariaDB [vsftpd]> flush privileges; Query OK, 0 rows affected (0.06 sec) MariaDB [vsftpd]> exit Bye
(6)检验授权是否正确
[root@localhost security]# mysql -u vsftpd -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 13 Server version: 5.5.44-MariaDBMariaDB Server Copyright (c) 2000, 2015,Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' toclear the current input statement. MariaDB [(none)]> showdatabases; +--------------------+ | Database | +--------------------+ | information_schema | | test | | vsftpd | +--------------------+ 3 rows in set (0.00 sec) MariaDB [(none)]> use vsftpd; Reading table information for completion oftable and column names You can turn off this feature to get aquicker startup with -A Database changed MariaDB [vsftpd]> select *from users; +----+---------+-------------------------------------------+ | id | name |passwd | +----+---------+-------------------------------------------+ | 1 | xiaozhu | *9C9ABCC50CA3281C861B0C79CA0B67274D5477B4| | 2 | yixuan | *36728ECF64E6D5EADAF4C3234142F116A64CCEAE| +----+---------+-------------------------------------------+ 2 rows in set (0.00 sec) MariaDB [vsftpd]>
(7)vim /etc/vsftpd/vsftpd.conf中的pam_service_name=vsftpd就是数据库用户的认证文件
Vsftpd文件在/etc/pam.d/vsftpd文件
(可以通过man vsftpd.conf查看pam_service_name参数找到vsftpd相对路径)
(8)在/etc/pam.d/下创建一个认证文件pam.mysql
Pa.mysql配置文件内容
auth required pam_mysql.so user=vsftpd passwd=mageedu host=localhostdb=vsftpd table= users usercolumn=name passwdcolumn=passwdcrypt=2 account required pam_mysql.so user=vsftpdpasswd=mageedu host=localhost db=vsftpd table= usersusercolumn=name passwdcolumn=passwd crypt=2
(扩展)查看password加密的crypt值,我们可以查看pam_mysql-0.7RC1.tar.gz解压缩之后文件中的README文件中的crypt选项
(9)因为任何的虚拟用户都必须要映射到系统用户,因此要创建一个系统用户,作为映射使用的用户
# useradd -s /sbin/nologin -d /ftproot vuser
(10)映射用户的读写权限
# chmod go+rx /ftproot/ # chmod �w /ftproot/
(11)确保/etc/vsftpd/vsftpd.conf中的pam_service_name=pam.mysql
(12)在/etc/vsftpd/vsftpd.conf文件中添加
guest_ensble=YES来宾用户可以访问
guest_username=vuser 把所有来宾用户映射到系统用户vuser
(13)当然我们也可以关闭匿名用户
(14)如何能在文件系统中上传文件呢
注意两点:必须开启匿名上传功能的权限,并且用户对文件系统具有写权限
#chown vuser /ftproot/upload
(15)vim /etc/vsftpd/vsftpd.conf 开启anon_upload_enable=YES
思考:两个用户同时映射一个系统用户,如何控制一个用户能上传,一个用户不能上传呢?
1. 首先取消匿名上传权限#anon_upload_enable=YES
2. Mkdir /etc/vsftpd/vusers.conf.d
3. cd /etc/vsftpf/vusers.conf.d
4. 创建一个yixuan的文件vim yixuan
5. anon_upload_enable=YES
6. cp yixuan xiaozhu
7. vim /etc/vsftpd/vsftpd.conf 添加user_config_dir=/etc/vsftpd/vusers.conf.d
8. systemctl restart vsftpd.service
走到这里vsftpd的配置就完成了,下面是vsftpd.conf的配置文件
anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 # anon_upload_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES user_config_dir=/etc/vsftpd/vusers.conf.d pam_service_name=vsftpd.mysql guest_enable=YES guest_username=vuser userlist_enable=YES tcp_wrappers=YES