vsftpd实战练习


Vsftpd文件系统服务

实验:vsftpd中禁止匿名用户的登录,yixuanxiaozhu同时映射系统用户vuser,但是两个虚拟用户却一个有上传权限,一个没有,主要的原因是在vsftpd.conf配置文件中有一个user_upload_dir=/etc/vsftpd/vusers.conf.d

1.Vsftpd服务介绍

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

2.vsftpd配置文件的格式

配置文件:/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:表示此列表为白名单;      

3.虚拟用户

基于数据库表中的某一个用户实现登录访问

           基于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


你可能感兴趣的:(System,配置文件,vsftpd)