20190306 日志管理及网络文件共享服务 实现基于MYSQL验证的vsftpd虚拟用户

日志管理:
syslogd: system application 记录应用日志
klogd: linux kernel 记录内核日志
rsyslog:
程序包:rsyslog 主程序:/usr/sbin/rsyslogd
CentOS 6:service rsyslog {start|stop|restart|status} CentOS 7:/usr/lib/systemd/system/rsyslog.service
配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/.conf 库文件: /lib64/rsyslog/.so
target: 文件路径:通常在/var/log/,文件路径前的-表示异步写入 用户:将日志事件通知给指定的用户,* 表示登录的所有用户
日志服务器:@host,把日志送往至指定的远程服务器记录 管道: | COMMAND,转发给其它命令处理
[root@centos7 ~]#systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-03-05 21:09:44 CST; 23h ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 6666 (rsyslogd)
Tasks: 3
CGroup: /system.slice/rsyslog.service
└─6666 /usr/sbin/rsyslogd -n

实验:自定义日志:
1、[root@centos7 ~]#vim /etc/ssh/sshd_config   该文件定义日志记录的信息
#SyslogFacility AUTHPRIV
SyslogFacility local0      
2、[root@centos7 ~]#vim /etc/rsyslog.conf
local0.*                                                /var/log/sshd.log     
[root@centos7 ~]#systemctl restart sshd
[root@centos7 ~]#tail -f /var/log/sshd.log
Mar  6 20:29:44 centos7 sshd[43542]: Server listening on 0.0.0.0 port 22.
Mar  6 20:29:44 centos7 sshd[43542]: Server listening on :: port 22.  端口已经出现,该文件已生成。
3、[root@centos6 ~]#ssh 192.168.141.200   当另一台主机ssh连上200时, 
[email protected]'s password:
Last login: Wed Mar  6 20:28:35 2019 from 192.168.141.253
[root@centos7 ~]#tail -f /var/log/sshd.log
Mar  6 20:29:44 centos7 sshd[43542]: Server listening on 0.0.0.0 port 22.
Mar  6 20:29:44 centos7 sshd[43542]: Server listening on :: port 22.
Mar  6 20:30:54 centos7 sshd[43578]: Accepted password for root from 192.168.141.253 port 39224 ssh2   此新纪录会出现。
实验:利用日志基于网络,把日志发往远程主机,把很多台主机日志集中于一台主机
准备:2台主机,150,200,centos6做测试   
这个实验的原理是:把200主机的日志发往150的远程主机,当有人ssh连接200主机时,在150主机上即可查看到200主机的日志。
1、在150主机上:
[root@centos7 ~]#vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514  取消注释,
local0.*                                            /var/log/test.log  设为test.log文件   
[root@centos7 ~]#systemctl restart rsyslog
[root@centos7 ~]#ss -ntua
Netid  State      Recv-Q Send-Q    Local Address:Port               Peer Address:Port              
udp    UNCONN     0      0                     *:514                    *:*        514端口已开,此时就可以接收远程发日志了。
现在在200上加以配置,把日志往150上发:
[root@xingxiaoya ~]#vim /etc/rsyslog.conf
local0.*                                                @192.168.141.150  local0记录ssh的日志
[root@200 ~]#vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV
SyslogFacility local0     local0对应的是这些
[root@xingxiaoya ~]#systemctl restart rsyslog
[root@xingxiaoya ~]#systemctl restart sshd
2、这时去centos6上ssh200:
[root@centos6 ~]#ssh 192.168.141.200
[email protected]'s password:
Last login: Wed Mar  6 20:42:01 2019 from 192.168.141.200
[root@xingxiaoya ~]# 
150主机上的记录为:[root@xingxiaoya ~]#tail /var/log/test.log
Mar  6 20:56:21 xingxiaoya sshd[44189]: Accepted password for root from 192.168.141.253 port 39226 ssh2  该记录显示6的IP号,7的主机   走的是udp协议
3、若想要做tcp(它稳定)就要修改配置文件:
[root@xingxiaoya ~]#vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514    
local0.*                                                @@192.168.141.150 
[root@xingxiaoya ~]#systemctl restart rsyslog
[root@xingxiaoya ~]#ss -ntua
Netid  State      Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
udp    UNCONN     0      0                    :::514                              :::* 
tcp    LISTEN     0      25                    *:514                               *:*    
此时2种端口都具备了。该实验结束。

其它的日志文件:
/var/log/secure:系统安装日志,文本格式,应周期性分析
/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看
/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看
/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
/var/log/dmesg:系统引导过程中的日志信息,文本格式 文本查看工具查看 专用命令dmesg查看
/var/log/messages :系统中大部分的信息 /var/log/anaconda : anaconda的日志

日志管理journalctl
Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件/etc/systemd/journald.conf
journalctl用法 1、查看所有日志(默认情况下 ,只保存本次启动的日志):journalctl 2、查看内核日志(不显示应用日志) :journalctl -k
3、查看系统本次启动的日志 :journalctl -b :journalctl -b -0 4、查看上一次启动的日志(需更改设置):journalctl -b -1
5、显示尾部的最新10行日志 :journalctl -n 6、显示尾部指定行数的日志 :journalctl -n 20 7、实时滚动显示最新日志 :journalctl -f

实验:rsyslog将日志记录于MYSQL中
准备:150做数据库,200做服务器  centos6
在200主机:[root@xingxiaoya ~]#yum install rsyslog-mysql
[root@xingxiaoya ~]#rpm -ql rsyslog-mysql
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
[root@xingxiaoya ~]#cat /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
CREATE DATABASE Syslog;
USE Syslog;
CREATE TABLE SystemEvents
(
        ID int unsigned not null auto_increment primary key,
        CustomerID bigint,
        ReceivedAt datetime NULL,
        DeviceReportedTime datetime NULL,
        Facility smallint NULL,
        Priority smallint NULL,
        FromHost varchar(60) NULL,
        Message text,
        NTSeverity int NULL,
        Importance int NULL,
        EventSource varchar(60),
        EventUser varchar(60) NULL,
        EventCategory int NULL,
        EventID int NULL,
        EventBinaryData text NULL,
        MaxAvailable int NULL,
        CurrUsage int NULL,
        MinUsage int NULL,
        MaxUsage int NULL,
        InfoUnitID int NULL ,
        SysLogTag varchar(60),
        EventLogType varchar(60),
        GenericFileName VarChar(60),
        SystemID int NULL
);
CREATE TABLE SystemEventsProperties
(
        ID int unsigned not null auto_increment primary key,
        SystemEventID int NULL ,
        ParamName varchar(255) NULL ,
        ParamValue text NULL
);
在150主机:一、[root@centos7 ~]#vim rsyslog.sql
CREATE DATABASE Syslog;
USE Syslog;
CREATE TABLE SystemEvents
(
        ID int unsigned not null auto_increment primary key,
        CustomerID bigint,
        ReceivedAt datetime NULL,
        DeviceReportedTime datetime NULL,
        Facility smallint NULL,
        Priority smallint NULL,
        FromHost varchar(60) NULL,
        Message text,
        NTSeverity int NULL,
        Importance int NULL,
        EventSource varchar(60),
        EventUser varchar(60) NULL,
        EventCategory int NULL,
        EventID int NULL,
        EventBinaryData text NULL,
        MaxAvailable int NULL,
        CurrUsage int NULL,
        MinUsage int NULL,
        MaxUsage int NULL,
        InfoUnitID int NULL ,
        SysLogTag varchar(60),
        EventLogType varchar(60),
        GenericFileName VarChar(60),
        SystemID int NULL
);
CREATE TABLE SystemEventsProperties
(
        ID int unsigned not null auto_increment primary key,
        SystemEventID int NULL ,
        ParamName varchar(255) NULL ,
        ParamValue text NULL
);    该脚本要在mysql数据库中运行
二、[root@centos7 ~]#mysql -uroot -p123gxy  < rsyslog.sql
[root@centos7 ~]#mysql -uroot -p123gxy
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Syslog             | 该数据库已被搭好。
| mysql              |
| performance_schema |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> use Syslog
Database changed
MariaDB [Syslog]> show tables;
+------------------------+
| Tables_in_Syslog       |
+------------------------+
| SystemEvents           |
| SystemEventsProperties |
+------------------------+
2 rows in set (0.00 sec)  此时,表已生成。
三、创建用户 MariaDB [Syslog]> grant all on Syslog.* to loguser@'192.168.141.%' identified by '123gxy';
Query OK, 0 rows affected (0.01 sec)
四、在200主机:[root@centos7 ~]#vim /etc/rsyslog.conf  该配置文件需要修改的是下面2项
$ModLoad ommysql
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
local7.*                             /var/log/boot.log
local0.*                        :ommysql:192.168.141.150,Syslog,loguser,123gxy  
[root@200 ~]#vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV
SyslogFacility local0     local0对应的是这些
[root@200 ~]#systemctl restart rsyslog
[root@200 ~]#systemctl restart sshd
五、下面,我们去测试:在centos6上ssh200主机:[root@centos6 ~]#ssh 192.168.141.200
[email protected]'s password:
Last login: Thu Mar  7 08:20:58 2019 from 192.168.141.253
六、150主机立刻会有记录生成:MariaDB [Syslog]> select * from SystemEvents;
+----+------------+---------------------+---------------------+----------+----------+----------+-----------------------------------------------------------------+------------+------------+-------------+-----------+---------------+---------+-----------------+--------------+-----------+----------+----------+------------+--------------+--------------+-----------------+----------+
| ID | CustomerID | ReceivedAt          | DeviceReportedTime  | Facility | Priority | FromHost | Message                                                         | NTSeverity | Importance | EventSource | EventUser | EventCategory | EventID | EventBinaryData | MaxAvailable | CurrUsage | MinUsage | MaxUsage | InfoUnitID | SysLogTag    | EventLogType | GenericFileName | SystemID |
+----+------------+---------------------+---------------------+----------+----------+----------+-----------------------------------------------------------------+------------+------------+-------------+-----------+---------------+---------+-----------------+--------------+-----------+----------+----------+------------+--------------+--------------+-----------------+----------+
|  1 |       NULL | 2019-03-07 08:36:14 | 2019-03-07 08:36:14 |       16 |        6 | centos7  | Accepted password for root from 192.168.141.253 port 39230 ssh2 |       NULL |       NULL | NULL        | NULL      |          NULL |    NULL | NULL            |         NULL |      NULL |     NULL |     NULL |          1 | sshd[17021]: | NULL         | NULL            |     NULL |
+----+------------+---------------------+---------------------+----------+----------+----------+-----------------------------------------------------------------+------------+------------+-------------+-----------+---------------+---------+-----------------+--------------+-----------+----------+----------+------------+--------------+--------------+-----------------+----------+
1 row in set (0.00 sec)    此实验结束!
实验:搭建LAP

准备:200做日志服务器和LAP 150做mysql数据库
1、[root@200 ~]#yum install httpd php php-mysql :php为模块方式,php-mysql为了连数据库 我的httpd已安装,此处可以不装
2、将官网的软件包传到200主机:[root@200 ~]#ls
loganalyzer-4.1.7.tar.gz (官网下载地址:https://loganalyzer.adiscon.com/download/
[root@200 ~]#tar xf loganalyzer-4.1.7.tar.gz
[root@200 ~]#cd loganalyzer-4.1.7/
[root@200 loganalyzer-4.1.7]#ls
ChangeLog contrib COPYING doc INSTALL src
[root@200 src]#mv /root/loganalyzer-4.1.7/src /var/www/html/log
[root@200 src]#cd /var/www/html/log 此文件夹为了存放php程序包
[root@200 log]#ls
admin classes details.php include lang search.php userchange.php
asktheoracle.php convert.php export.php index.php login.php statistics.php
BitstreamVeraFonts cron favicon.ico install.php reportgenerator.php templates
chartgenerator.php css images js reports.php themes
3、[root@200 ~]#cd loganalyzer-4.1.7/
[root@200 loganalyzer-4.1.7]#ls
ChangeLog contrib COPYING doc INSTALL
[root@200 loganalyzer-4.1.7]#cd contrib/
[root@200 contrib]#ls
config.php configure.sh secure.sh
[root@200 contrib]#cat configure.sh
#!/bin/sh
touch config.php
chmod 666 config.php
[root@200 contrib]#cat secure.sh
#!/bin/sh
chmod 644 config.php

4、[root@200 loganalyzer-4.1.7]#touch /var/www/html/log/config.php
[root@200 loganalyzer-4.1.7]#chmod 666 /var/www/html/log/config.php
5、开启fastcgi端口,[root@200 conf.d]#service php-fpm start
Redirecting to /bin/systemctl start php-fpm.service
[root@200 conf.d]#chkconfig php-fpm on
Note: Forwarding request to 'systemctl enable php-fpm.service'.
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.
6、访问网站会有如下页面弹出:
20190306  日志管理及网络文件共享服务  实现基于MYSQL验证的vsftpd虚拟用户

20190306  日志管理及网络文件共享服务  实现基于MYSQL验证的vsftpd虚拟用户

20190306  日志管理及网络文件共享服务  实现基于MYSQL验证的vsftpd虚拟用户

20190306  日志管理及网络文件共享服务  实现基于MYSQL验证的vsftpd虚拟用户

此时既然包已经生成,就把权限收回:[root@200 contrib]#chmod 644 /var/www/html/log/config.php
7、现在我们要去安装能够画图的工具包:
[root@200 contrib]#yum install php-gd
[root@200 contrib]#rpm -ql php-gd
/etc/php.d/gd.ini
/usr/lib64/php/modules/gd.so
/usr/share/doc/php-gd-5.4.16
/usr/share/doc/php-gd-5.4.16/libgd_COPYING
/usr/share/doc/php-gd-5.4.16/libgd_README
该包是模块方式的,要重启httpd服务。[root@200 contrib]#systemctl restart httpd
8、 弹出的页面如下:
20190306  日志管理及网络文件共享服务  实现基于MYSQL验证的vsftpd虚拟用户
因为我的软件版本问题,没显示出来饼状图。此实验结束。

Logrotate日志

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
配置文件是 /etc/logrotate.conf
vsftpd:因为进程的权限是发起者的权限,而非程序的权限,vsftpd服务的启动权限很低,对linux系统的操作是很有限的,vsftpd可以使用chroot函数来将特定的目录变成根目录,并非操作系统上的“/”,而是vsftpd活动的根目录。基于虚拟用户的vsftpd:虚拟用户的认证方式是单独的(pam_userdb)口令卡文件,
FTP
NFS (网络文件系统)
SMABA
应用层服务、基于C/S, 在客户端与服务器之间进行文件的传输 使用TCP协议
基于内核实现网络文件共享服务
解决跨平台的文件共享服务
使用命令通信连接、数据传输连接
NFS主要借助于RPC来实现文件共享,RPC通过函数调用一部分功能由本地程序完成,另一部分功能由远程主机的函数完成,两者共同完成资源的共享,没有固定端口,随机采用小于1024的端口来传输数据。
功能:共享打印机,进行Windows网络上的主机名称解析,nmb管理工作组合NetBIOS name 解析,走UDP的137、138两个端口负责名字解析任务;smb管理Samba主机锁分享的目录、文件或打印机,走TCP的139、445端口进行数据传输。
数据传输连接分为主动和被动方式
需要用RPC,功能:指定NFS功能所对应的端口号, 并反馈给用户。
配置文件:/etc/samba/smb.conf
主动方式:1、C有一个随机端口1000,然后C以这个端口去连接S的21端口来完成命令连接;2、S会根据当前的配置(主动方式)以tcp的20端口主动去连接对应C的1001号端口来进行数据传输的连接;3、开始数据的传输,格式就是上面说的(源数是什么格式编码的就以什么格式传输)。
被动方式:1、C有一个随机端口1000,然后C去连接S的21号端口完成命令连接;2、S会根据当前的配置(被动方式)告诉客户请链接我的2000号端口来进行数据的传输;3、C就以1001号端口去连接S的2000端口来进行数据传输的连接;4、开始传输数据,格式就是上面说的(源数据是什么格式编码的就以什么格式传输)。
配置文件:/etc/exports
配置文件:/etc/samba/smb.conf
测试配置文件是否有语法错误,以及显示最终生效的配置:testparm
两个服务脚本:/etc/rc.d/init.d/nmb
/etc/rc.d/init.d/smb

S端常用软件:proftpd、pureftp、vsftpd、
C端常用软件:ftp、lftp、wget、curl、gftp、cuteftp

功能:数据传输、实现不同等级的用户身份验证,限制用户的活动目录
默认情况下有三种身份:实体账号、访客、匿名用户

vsftpd:针对操作系统的权限来设计的

第26章 网络文件共享服务

20190306  日志管理及网络文件共享服务  实现基于MYSQL验证的vsftpd虚拟用户

文件传输协议FTP
File Transfer Protocol 早期的三个应用级协议之一
基于C/S结构
双通道协议:数据和命令连接
数据传输格式:二进制(默认)和文本
两种模式:服务器角度
主动(PORT style):服务器主动连接
命令(控制):客户端:随机port ---服务器:tcp21
数据:客户端:随机port ---服务器:tcp20
被动(PASV style):客户端主动连接
命令(控制):客户端:随机port ---服务器:tcp21
数据:客户端:随机port ---服务器:随机port
服务器被动模式数据端口示例:
服务器数据端口为:224*256+59

[root@centos7 logrotate.d]#yum info vsftpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Packages
Name : vsftpd
Arch : x86_64
Version : 3.0.2
Release : 25.el7
Size : 171 k
Repo : base
Summary : Very Secure Ftp Daemon
URL : https://security.appspot.com/vsftpd.html
License : GPLv2 with exceptions
Description : vsftpd is a Very Secure FTP daemon. It was written completely from
: scratch.

[root@200 ~]#ftp 172.20.0.1
Connected to 172.20.0.1 (172.20.0.1).
220 (vsFTPd 2.2.2)
Name (172.20.0.1:root): ftp
331 Please specify the password.
Password:输入密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (172,20,0,1,178,184).
150 Here comes the directory listing.
drwxr-xr-x 21 0 0 4096 Apr 09 2018 pub
226 Directory send OK.
ftp> pwd
257 "/"
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (172,20,0,1,236,104).
150 Here comes the directory listing.
drwxr-xr-x 38 0 0 4096 May 24 2018 Books
drwxr-xr-x 2 0 0 4096 Jan 16 2018 Files
drwxr-xr-x 6 0 0 4096 Jan 19 07:49 ISOs
226 Directory send OK.
ftp> mget get 支持通配符下载
mget getty? y
227 Entering Passive Mode (172,20,0,1,28,116).
150 Opening BINARY mode data connection for getty (338796 bytes).
226 Transfer complete.
338796 bytes received in 0.0299 secs (11312.43 Kbytes/sec)
ftp>quit
eg:ftp> cd ISOs
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (172,20,0,1,48,163).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Mar 04 09:03 CentOS
drwxr-xr-x 2 0 0 4096 Nov 22 09:31 ubuntu
drwxr-xr-x 2 0 0 4096 Nov 10 2017 win7
-rw-r--r-- 1 0 0 711854080 Nov 10 2017 winxp_ghost.iso
226 Directory send OK.
ftp> get winxp_ghost.iso
local: winxp_ghost.iso remote: winxp_ghost.iso
227 Entering Passive Mode (172,20,0,1,25,127).
150 Opening BINARY mode data connection for winxp_ghost.iso (711854080 bytes).
226 Transfer complete.
711854080 bytes received in 32.5 secs (21933.73 Kbytes/sec)
ftp> quit
221 Goodbye.
[root@200 ~]#echo 25
256+127|bc
6527
[root@200 ~]#ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.141.200:22 192.168.141.1:64456
ESTAB 0 52 192.168.141.200:22 192.168.141.1:64883
ESTAB 0 0 172.20.9.200:59758 172.20.0.1:21
ESTAB 3237736 0 172.20.9.200:42866 172.20.0.1:6527 数值相等,说明下载成功。

[root@200 ~]#lftp 172.20.0.1
lftp 172.20.0.1:~> ls
drwxr-xr-x 21 0 0 4096 Apr 09 2018 pub
lftp 172.20.0.1:/>

[root@200 ~]#lftpget ftp://172.20.0.1/pub/getty
[root@200 ~]#wget ftp://172.20.0.1/pub/getty 2种方法都可以下载
--2019-03-07 15:52:20-- ftp://172.20.0.1/pub/getty => ‘getty.1’
Connecting to 172.20.0.1:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /pub ... done.
==> SIZE getty ... 338796
==> PASV ... done. ==> RETR getty ... done.
Length: 338796 (331K) (unauthoritative)
100%[==============================================================================>] 338,796 --.-K/s in 0.01s
2019-03-07 15:52:20 (27.8 MB/s) - ‘getty.1’ saved [338796]

FTP服务
状态码:1XX:信息 125:数据连接打开2XX:成功类状态 200:命令OK 230:登录成功3XX:补充类 331:用户名OK
4XX:客户端错误 425:不能打开数据连接5XX:服务器错误 530:不能登录
用户认证:匿名用户:ftp,anonymous,对应Linux用户ftp
系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
虚拟用户:特定服务的专用用户,独立的用户/密码文件 nsswitch:network service switch名称解析框架
pam:pluggable authentication module 用户认证/lib64/security /etc/pam.d/ /etc/pam.co

实验:实现基于MYSQL验证的vsftpd虚拟用户
准备:150做数据库,存放用户账户,200做ftp服务器 [root@200 ~]#yum install vsftpd
1、150主机:[root@150 ~]#systemctl restart mariadb
2、将官网软件包传入200主机: [root@200 ~]#ls
pammysql-0.7RC1(1).tar.gz
[root@200 ~]# tar xf pammysql-0.7RC1(1).tar.gz
3、#yum install gcc glibc pam-devel mariadb-devel
[root@200 ~]#cd pam_mysql-0.7RC1/
[root@200 pam_mysql-0.7RC1]#ls
acinclude.m4 config.guess configure CREDITS ltmain.sh missing pam_mysql.c pkg.m4
aclocal.m4 config.h.in configure.in INSTALL Makefile.am mkinstalldirs pam_mysql.spec README
ChangeLog config.sub COPYING install-sh Makefile.in NEWS pam_mysql.spec.in stamp-h.in
4、[root@200 pam_mysql-0.7RC1]#./configure --with-pam-mods-dir=/lib64/security/ 指定的pam模块路径
[root@200 pam_mysql-0.7RC1]#./configure
make && make install
5、查看列表是否生成文件:[root@200 pam_mysql-0.7RC1]#ll /lib64/security/ -t
total 1372
-rwxr-xr-x. 1 root root 883 Mar 7 18:40 pam_mysql.la
-rwxr-xr-x. 1 root root 141752 Mar 7 18:40 pam_mysql.so 文件已创建成功
此时,编译安装已经完成。
6、150主机:MariaDB [(none)]> create database vsftpd;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use vsftpd
MariaDB [vsftpd]> create table vusers (id int auto_increment primary key,name char(40) binary not null,password char(50) binary not null);
Query OK, 0 rows affected (0.01 sec)
MariaDB [vsftpd]> insert vusers (name,password)values('user1',password('centos')),('user2',password('123gxy'));
Query OK, 2 rows affected (0.01 sec)
MariaDB [vsftpd]> select from vusers;
+----+-------+-------------------------------------------+
| id | name | password |
+----+-------+-------------------------------------------+
| 1 | user1 |
128977E278358FF80A246B5046F51043A2B1FCED |
| 2 | user2 | *52C1ACD249A578837D17B2712586BF1C2A611354 |
+----+-------+-------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [vsftpd]> grant select on vsftpd.vusers to vsftpd@'192.168.141.%' identified by '123gxy'; 这是给查询的账户做授权。
Query OK, 0 rows affected (0.01 sec)
[root@200 ~]#mysql -u vsftpd -p123gxy -h 192.168.141.150
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.60-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> 连接成功。
7、我们把模块修改一下;[root@200 ~]#cd /etc/vsftpd/
[root@200 vsftpd]#ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@200 vsftpd]#vim vsftpd.conf
#pam_service_name=vsftpd
pam_service_name=vsftpd.mysql 该模块的后缀改变。
[root@200 vsftpd]#cd /etc/pam.d
[root@200 pam.d]#vim vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123gxy host=192.168.141.150 db=vsftpd table=vusers usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123gxy host=192.168.141.150 db=vsftpd table=vusers usercolumn=name passwdcolumn=password crypt=2 这里引用的“pam_mysql.so"就是/lib64/security/中的模块。
8、root@200 data]#mkdir ftproot
[root@200 data]#ls /data/ftproot/
[root@200 data]#touch /data/ftproot/f1.txt 创建一个映射的操作系统用户
[root@200 data]#ll /data/ftproot/ -d
drwxr-xr-x. 2 root root 20 Mar 9 18:20 /data/ftproot/ 根目录不能有写权限
[root@200 data]#chmod -w /data/ftproot/
[root@200 data]#ll /data/ftproot/ -d
dr-xr-xr-x. 2 root root 20 Mar 9 18:20 /data/ftproot/ 该文件要去掉写权限。
[root@200 pam.d]#useradd -s /sbin/nologin -d /data/ftproot vuser 把用户建起来。
9、[root@200 ftproot]#mkdir upload
[root@200 ftproot]#ll
total 0
-rw-r--r--. 1 root root 0 Mar 7 20:16 f1.txt
drwxr-xr-x. 2 root root 6 Mar 7 20:20 upload
[root@200 ftproot]#setfacl -m u:vuser:rwx upload 用setfacl授权vuser操作系统账户对目录是有写权限。
10、[root@200 ftproot]#vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser 此时所有的虚拟用户就映射在vuser中,正常用户存放在pam模块中。看下图就能明白:
[root@200 pam.d]#cat /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123gxy host=192.168.141.150 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123gxy host=192.168.141.150 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 刚才刚建好的文件,此处重复只为和虚拟用户做显示说明。
[root@200 ftproot]#systemctl restart vsftpd
11、在centos6上进行远程连接:一、[root@centos6 ~]#ftp 192.168.141.200
Connected to 192.168.141.200 (192.168.141.200).
220 (vsFTPd 3.0.2)
Name (192.168.141.200:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/" 此处的“/”是/etc/ftproot/
ftp> ls
227 Entering Passive Mode (192,168,141,200,118,189).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Mar 09 10:20 f1.txt
drwxrwxr-x 2 0 0 6 Mar 09 10:29 upload
226 Directory send OK.
二、[root@centos6 ~]#ftp 192.168.141.200
Connected to 192.168.141.200 (192.168.141.200).
220 (vsFTPd 3.0.2)
Name (192.168.141.200:root): user2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (192,168,141,200,214,115).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Mar 09 10:20 f1.txt
drwxrwxr-x 2 0 0 6 Mar 09 10:29 upload
226 Directory send OK. 一和二ls到的是同一个目录,此时2个用户的权限是一样的。
12、我们单独创建一个文件存放user2的权限:
[root@200 ftproot]#cd /etc/vsftpd/
[root@200 vsftpd]#mkdir vusers
[root@200 vsftpd]#cd vusers/
[root@200 vusers]#vim user2
anon_upload_enable=YES 开启匿名上传文件
anon_mkdir_write_enable=YES 可以建文件夹
anon_other_write_enable=YES 可以建/删文件
13、告诉vsftpd我们创建了一个文件夹,专门用来存放个人的配置,在配置文件中加入一条指令。
[root@200 vusers]#pwd
/etc/vsftpd/vusers
[root@200 vusers]#cd ..
[root@200 vsftpd]#vim vsftpd.conf
user_config_dir=/etc/vsftpd/vusers
此时在centos6上ftp 192.168.141.200登陆,user不能上传东西,user2可以。
14、我们把用户1和2的目录分开,每次ftp登陆两者的目录文件夹不同,就要分别设置:
[root@200 vsftpd]#cd /data/ftproot/
[root@200 ftproot]#mkdir /data/ftproot1
[root@200 ftproot]#chmod -w /data/ftproot1 去除写权限。
[root@200 ftproot]#touch /data/ftproot1/user1.txt

[root@200 ~]#cd /etc/vsftpd
[root@200 vsftpd]#ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh vusers
[root@200 vsftpd]#cd vusers
[root@200 vusers]#vim user1
local_root=/data/ftproot1
[root@200 vusers]#systemctl restart vsftpd
15、

20190306  日志管理及网络文件共享服务  实现基于MYSQL验证的vsftpd虚拟用户
NFS服务
端口:2049(nfsd), 其它端口由portmap(111)
分配配置件:/etc/exports,/etc/exports.d/.expor
NFS服务主要进程:
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
rpc.lockd 非必要,管理文件锁,避免同时写出错
rpc.statd 非必要,检查文件一致性,可修复文件
日志:/var/lib/nfs/
配置防火墙
配置防火墙,开放NFS服务• 配置NFS使用固定端口
vim /etc/sysconfig/nfsRQUOTAD_PORT=875LOCKD_TCPPORT=32803LOCKD_UDPPORT=32769MOUNTD_PORT=892STATD_PORT=662STATD_OUTGOING_PORT=2020
防火墙除开放上述端口,还需开放TCP和UDP的111和2049共4个
NFS服务
[root@200 data]#mkdir nfsdir1
[root@200 data]#mkdir nfsdir2
[root@200 data]#touch nfsdir1/dir1.txt
[root@200 data]#touch nfsdir2/dir2.txt
[root@200 data]#tree
.
├── nfsdir1
│ └── dir1.txt
└── nfsdir2
└── dir2.txt
2 directories, 2 files
[root@200 ~]#vim /etc/exports
/data/nfsdir1

[root@centos6 ~]#showmount -e 192.168.141.200
Export list for 192.168.141.200:
/data/nfsdir1 此时,在centos6上就可看到共享的内容。
一、先建一个文件:[root@centos6 ~]#mkdir /mnt/nfs1
[root@centos6 ~]#mount 192.168.141.200:/data/nfsdir1 /mnt/nfs1 把centos6的文件挂载到200主机:
[root@centos6 ~]#df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 50264772 4442020 43262752 10% /
tmpfs 952580 72 952508 1% /dev/shm
/dev/sda1 10194120 61264 9608364 1% /boot
/dev/sda3 20027260 44992 18958268 1% /data
/dev/sr0 3897932 3897932 0 100% /misc
192.168.141.200:/data/nfsdir1
20961280 33024 20928256 1% /mnt/nfs1
二、再建一个文件:[root@centos6 ~]#mkdir /mnt/nfs2
[root@centos6 ~]#mount 192.168.141.200:/data/nfsdir2 /mnt/nfs2
[root@centos6 ~]#df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 50264772 4442020 43262752 10% /
tmpfs 952580 72 952508 1% /dev/shm
/dev/sda1 10194120 61264 9608364 1% /boot
/dev/sda3 20027260 44992 18958268 1% /data
/dev/sr0 3897932 3897932 0 100% /misc
192.168.141.200:/data/nfsdir1
20961280 33024 20928256 1% /mnt/nfs1
192.168.141.200:/data/nfsdir2
20961280 33024 20928256 1% /mnt/nfs2
[root@centos6 ~]#cd /mnt/nfs2
[root@centos6 nfs2]#ls
dir2.txt
[root@centos6 nfs2]#touch a.txt
touch: cannot touch a.txt': Permission denied
该文件夹能不能访问有两个要素:1、网络服务要打开;2、文件系统的权限要打开;
三、[root@200 data]#ll
drwxr-xr-x. 2 root root 22 Mar 9 21:23 nfsdir2
[root@200 data]#getent passwd nfsnobody
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
修改配置文件:[root@200 ~]#vim /etc/exports
/data/nfsdir1

/data/nfsdir2 (rw) 把写权限赋予。
[root@200 data]#setfacl -m u:nfsnobody:rwx nfsdir2
[root@200 data]#ll
drwxrwxr-x+ 2 root root 22 Mar 9 21:23 nfsdir2 把nfsdir2映射成nfsnobody,给它读写执行权限。
[root@centos6 nfs2]#touch a.txt 此时在centos6上创建文件就能成功。
[root@centos6 nfs2]#ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Mar 10 2019 a.txt
-rw-r--r--. 1 root root 0 Mar 9 2019 dir2.txt
四、[root@200 data]#chmod 777 nfsdir2 先放开权限
[root@centos6 nfs2]#su li
[li@centos6 nfs2]$touch b.txt
[li@centos6 nfs2]$ll
-rw-r--r--. 1 nfsnobody nfsnobody 0 Mar 10 2019 a.txt
-rw-rw-r--. 1 li li 0 Mar 10 2019 b.txt 该用户被创建成功。
-rw-r--r--. 1 root root 0 Mar 9 2019 dir2.txt
[root@200 data]#useradd -u 500 yi
[root@200 data]#ll nfsdir2
-rw-r--r--. 1 nfsnobody nfsnobody 0 Mar 10 16:00 a.txt
-rw-r--r--. 1 root root 0 Mar 9 21:23 dir2.txt
[root@200 data]#ll nfsdir2
-rw-r--r--. 1 nfsnobody nfsnobody 0 Mar 10 16:00 a.txt
-rw-rw-r--. 1 yi 500 0 Mar 10 16:06 b.txt
-rw-r--r--. 1 root root 0 Mar 9 21:23 dir2.txt
然而在200主机上该用户的属主属组均已改变。 nfs客户端若拿一普户访问nfs服务器,它就认为该用户的账户映射成了nfs服务器中同id的人,但是root会映射成nfsnobody。这种行叫“root_squash”压榨。普户不压榨,只压榨root,这是系统默认行为,若不想让root被压榨就要修改文件:
[root@200 ~]#vim /etc/exports
/data/nfsdir1

/data/nfsdir2 *(rw.no_root_squash)即可。
[root@200 ~]#exportfs -r 使其生效。
五、使其权限恢复收回:
[root@200 data]#chmod 755 nfsdir2
[root@200 data]#getfacl nfsdir2

file: nfsdir2

owner: root

group: root

user::rwx
user:nfsnobody:rwx #effective:r-x
group::r-x
mask::r-x
other::r-x
[root@200 data]#setfacl -b nfsdir2
[root@200 data]#getfacl nfsdir2
file: nfsdir2
owner: root
group: root
user::rwx
group::r-x
other::r-x
[root@200 data]#ll
drwxr-xr-x. 2 root root 22 Mar 9 21:23 nfsdir1
drwxr-xr-x. 2 root root 61 Mar 10 16:24 nfsdir2 之前的+号被去除,此时root就不被压榨了,远程的root过来后就是root。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章