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。

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