1、搭建時間服務器,日志服務器并簡述sudo安全切換
-
搭建時間服務器
Linux操作系統中大家熟悉的時期服務器有兩個:
ntp
chrony
- 這里我們以chrony來搭建時間服務器
chrony是一個ntp協議的實現程序,既可以當做服務端,也可以充當客戶端;它專為間歇性互聯網連接的系統而設計,當然也能良好應用于持久互聯網連接的環境;chrony有三個時間參考:硬件時鐘、實時時鐘以及手動同步。- chrony的程序安裝
[root@node01 ~]# yum -y install chrony
- chrony的程序環境
[root@node01 ~]# rpm -ql chrony ... /etc/chrony.conf #主配置文件 /usr/bin/chronyc #客戶端程序 /usr/sbin/chronyd #服務端程序
- chrony配置服務端
[root@node01 ~]# vim /etc/chrony.conf 兩個主要配置: server cn.pool.ntp.org iburst #1、格式為:server 時間服務器域名 iburst allow 10.192.0.0/16 #允許指定網段的客戶端進行時間同步 [root@node01 ~]# systemctl enable chronyd [root@node01 ~]# systemctl start chronyd
- chrony客戶端配置
[root@ceph_deploy ~]# yum -y install chrony [root@ceph_deploy ~]# vim /etc/chrony.conf 一個主要配置 server 10.192.2.222 iburst #server指向時間服務器ip地址或域名 [root@ceph_deploy ~]# systemctl enable chronyd [root@ceph_deploy ~]# systemctl start chronyd
- 客戶端測試
[root@ceph_deploy ~]# chronyc sources 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* ns1.peaoguo.com 3 6 377 40 +4852us[-2383us] +/- 159ms 或者ntpdate測試 [root@ceph_deploy ~]# ntpdate 10.192.2.222 22 Mar 16:04:13 ntpdate[2314700]: adjust time server 10.192.2.222 offset -0.009135 sec
-
搭建日志服務器收集bash命令日志
通常我們想知道某個用戶在服務器上到底執行了那些命令,以備后續做故障分析和審計分析等等,這了我們用rsyslog收集日志,并轉發給mysql服務器,然后通過web頁面進行展示,設計方案如下:
-
環境準備
為了方便,我這里將web和日志轉發放在一臺服務器(10.192.2.222),將Mariadb和客戶端放在一臺服務器(10.192.1.161),
1、客戶端服務器和日志轉發服務器均安裝rsyslog服務,默認操作系統已經安裝rsyslog服務,如果沒有運行如下命令
yum -y install rsyslog
2、數據庫服務器安裝安裝Mariadb,和授權
yum -y install mariadb-server
MariaDB [(none)]> GRANT ALL PRIVILEGES ON Syslog.* TO rsyslog@10.192.2.222 IDENTIFIED BY 'rsyslog'
3、安裝LogAnalyzer及web服務
LogAnalyzer軟件下載地址http://loganalyzer.adiscon.com/
上傳 loganalyzer-4.1.7.tar.gz 安裝包至web服務器[root@node01 ~]# tar -xzvf loganalyzer-4.1.7.tar.gz -C /data/ [root@node01 ~]# cd /data [root@node01 data]# ln -vs loganalyzer-4.1.7 rsyslog [root@node01 data]# yum -y install httpd [root@node01 data]# vim /etc/httpd/conf.d/rsyslog.conf <VirtualHost 10.192.2.222:80> ServerName www.rsyslog.com DocumentRoot "/data/rsyslog" <Directory "/data/rsyslog"> Options None AllowOverride None Require all granted </Directory> </VirtualHost> [root@node01 data]# systemctl start httpd
-
客戶端配置
思路:將bash命令按照一定格式保存在一個文件中,在通過rsyslog的轉發功能將其轉發給日志收集服務器,創建一個任何人都只有追加權限的文件 [root@ceph_deploy ~]# mkdir -p /var/log/bash/ [root@ceph_deploy ~]# touch /var/log/bash/bash.log [root@ceph_deploy ~]# chown nobody:nobody /var/log/bash/bash.log [root@ceph_deploy ~]# chmod 002 /var/log/bash/bash.log [root@ceph_deploy ~]# chattr +a /var/log/bash/bash.log 添加環境變量,將每一條命令日志存入上面創建的文件中 [root@ceph_deploy ~]# vim /etc/profile export HISTORY_FILE=/var/log/bash/bash.log export SRC_IP=`who am i |awk '{ print $5}'|sed 's/(//g'|sed 's/)//g'` export PROMPT_COMMAND='{ date "+%F %T #### USER:$USER IP:$SRC_IP PS:$SSH_TTY ppid=$PPID pwd=$PWD #### $(history 1 | { read x cmd; echo "$cmd"; })";} >>$HISTORY_FILE' [root@ceph_deploy ~]# source /etc/profile 配置rsyslog #load imfile module $ModLoad imfile $WorkDirectory /etc/rsyslog.d $PrivDropTOGroup root $InputFilePollInterval 1 $InputFilePersistStateInterval 1 #bash.log $InputFileName /var/log/bash/bash.log $InputFileTag bashTag: $InputFileStateFile bash_log $InputFileSeverity info $InputFileFacility local0 $InputRunFileMonitor #bash audit local0.info @@10.192.2.222:514
-
日志轉發服務器配置
思路:將收集到的日志轉發給MariaDB服務器保存安裝rsyslog寫入mysql數據庫接口工具 [root@node01 ~]# yum -y install rsyslog-mysql 修改rsyslog配置文件 [root@node01 ~]# vim /etc/rsyslog.conf $ModLoad imtcp $InputTCPServerRun 514 設置為rsyslog收集轉發服務器監聽tpc514端口 $ModLoad ommysql 加載寫入mysql模塊 將特定的日志轉發給mysql服務器 local0.info :ommysql:10.192.1.161,Syslog,rsyslog,rsyslog [root@node01 ~]# systemctl restart rsyslog
-
web服務器查看bash日志
在客戶端服務器輸入兩條bash命令[root@ceph_deploy ~]# pwd /root [root@ceph_deploy ~]# ifconfig
瀏覽器查看
查看bash命令記錄 -
sudo安全切換
- 功能簡介:
sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,如halt,reboot,su等等。這樣不僅減少了root用戶的登錄和管理時間,同樣也提高了安全性。 - sudo運行流程
1、當用戶運行sudo時,系統于/etc/sudoers文件里查找該用戶是否有運行sudo的權限
2、若具有運行sudo的權限,那么用戶輸入自己的password,注意這里輸入的是用戶自己的password
3、假設password正確,進行sudo后面的命令,root運行sudo是不須要輸入password的,切換到的身份與運行者身份同樣的時候。也不須要輸入password。 - 修改sudo配置文件
sudo配置文件有兩個/etc/sudoers和/etc/sudoers.d/*
使用visudo命令修改配置文件visudo -f /etc/sudoers.d/file
- 授權格式
who where=(whom) commands
users hosts=(runas) commands
users:username,#uid,%groupname,%#gid,user_ailas
hosts: ip, hostname,NetAddr,host_alias,ALL
ruanas:runas_alias,ALL - 示例
別名定義了一個USERADMIN組,包含zhangsan和lisi兩個用戶 User_Alias USERADMIN=zhangsan,lisi 別名定義了一組NETADM命令組,可使用ip和route這兩個路徑,這里必須用絕對路徑 Cmnd_Alias NETADM=/usr/sbin/ip,/usr/sbin/route 別名定義了一組USERADM命令組,用用于用戶添加和刪除 Cmnd_Alias USERADM=/usr/sbin/useradd,/sbin/userdel,/usr/bin/passwd,/sbin/reboot 這里wangwu用戶擁有兩個命令組的權限,前一組不需要輸入密碼,后一組執行時需要輸入用戶 wangwu ALL=(ALL) NOPASSWD:NETADM,PASSWD:USERADM USERADMIN 用戶組擁有USERADM命令組的命令執行權限 USERADMIN ALL=(ALL) USERADM xp用戶擁有USERADM中命令組中除了reboot的權限 xp ALL=(ALL) USERADM,!/sbin/reboot
- 功能簡介:
2、詳解nginx模塊使用方法
- nginx簡介
Nginx (engine x) 是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務
nginx高度模塊化,但其模塊早期不支持DSO機制,近期版本支持動態裝載和卸載 - 模塊分類:
- 核心模塊:core module
- 標準模塊:
- HTTP modules:
- Standard HTTP modules
- Optional HTTP modules
- Mail modules
- Stream modules
- HTTP modules:
- 第三方模塊
- 核心模塊
- 正常運行必備的配置:
- 1、user;指明運行使用的用戶
- 2、pid /PATH/TO/PID_FIEL;指定存儲nginx主進程進程號的文件路徑
- 3、include file | mask;指明包含進來的其它配置文件片段
- 4、load_module file;指明要裝載的動態模塊
- 性能優化相關配置
- 1、worker_processes number |auto;
worker進程的數量,通常應該為當前主機的cpu的物理核心數
auto:當前主機物理CPU核心數 - 2、worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
0001:0號CPU
0010:1號CPU
例如:
worker_processes number 2
worker_cpu_affinity 0100,1000;
這表示機器有4顆CPU,nginx啟用2個進程,分別綁定在后兩顆CPU上 - 3、worker_priority number;
指定worker進程的nice值,設定work進程優先級:[-20到20之間] - 4、worker_rlimit_nofile number;
worker進程所能夠打開的文件數量上限
- 1、worker_processes number |auto;
- 調試、定位問題
- 1、daemon on|off; 是否以守護進程方式運行Nginx
- 2、master_process on|off;是否以master、worker模型運行nginx;默認為on
- 3、error_log file [level]
- 事件驅動相關的配置
events {
...
}- 1、worker_connections number;
每個worker進程所能打開的最大并發連接數量
nginx最大并發=worker_processes*worker_connections - 2、use method;指明并發連接請求的處理方法;
例如 use epoll; - 3、accept_mutex on|off
處理新的連接請求的方法,on意味著有各worker輪流處理新請求,off意味著每個新請求都會通知所有的worker進程
- 1、worker_connections number;
- 配置示例
user nginx ; #進程運行使用的用戶和組 pid logs/nginx.pid; #指定存儲nginx主進程號的文件路徑 include vhost/*.conf; #指明包含進來的其他配置文件 #include mime.type #指明包含進來的其他文件類型 #load module file; #指明要裝載的動態模塊 worker_processes 4 | auto; #worker進程的數量,應小于等于cpu核心數,auto為當前主 #機cpu核心數 worker_cpu_affinity 0001 0010 0100 1000; #將worker進程與通過cpumask與指定cpu綁定 worker_priority -10; #指定worker進程的nice值,范圍[-20,20] worker_rlimite_nofile 2000; #指定worker進程能夠打開的最大文件數 #daemon on; #是否已守護進程方式運行Nginx #master_process on; #是否已master-worker模型運行Nginx,默認on error_log /var/log/nginx-error.log info; #錯誤日志 events { #事件驅動相關配置 use epoll; #指明并發連接請求的處理方式 worker_connections 2048; #每個worker進程能夠打開的最大并發連接數 #accpet mutex on | off; #處理新連接的方式,on意味著由每個worker輪流處理新請 #求,off意味著每個新請求到達都會通知所有worker進程 }
- 正常運行必備的配置:
- 標準模塊-HTTP modules
-
虛擬主機server{...}
- listen字段
listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
listen address[:port][default_server][ssl][http2|spdy] [backlog=number] [rcvbuf=size] [sndbuf_size]
default_server
設定為默認虛擬主機
ssl
限制僅能通過ssl連接提供服務
backlog=number
后援隊列長度
rcvbuf=size
接收緩沖區大小
sndbuf=size
發送緩沖區大小 - server_name字段
server_name name ... ;
server_name www.peaoguo.com
指明虛擬主機的主機名稱,后可跟多個由空白字符分隔的字符串
支持*
通配任意長度的任意字符,server_name *.peguo.com www.peguo.*
支持~
起始的字符做正則表達式模式匹配,server_name ~^www\d+\.peguo\.com
匹配順序:
1、首先是字符串精確匹配
2、左側*
通配符
3、右側*
通配符
4、正則表達式 -
tcp_ondelay on|off;
在keepalived模式下的連接是否啟用TCP_NODELAY選項
tcp_nopush on|off;
在sendfile模式下,是否啟用TCP_CORK選項; -
sendfile on|off;
是否啟用sendfile功能
- listen字段
-
定義路徑相關配置
-
root path;
設置web資源路徑映射,用于指明用戶請求的url所對應的本地文件系統上的文檔所在路徑,可用的位置:http、server、location,if in location -
location [=|~|~*|^~] url {...}
在一個server中location配置段可存在多個,用于實際從url到文件系統的路徑映射,
nginx會根據用戶請求的url來檢查定義的所有location,并找出一個最佳匹配,而后應
用其配置
=
:對url做精確匹配
~
:對url做正則表達式模式匹配,區分字符大小寫
~*
:對url做正則表達式模式匹配,不區分字符大小寫
^~
:對url左半部分做匹配檢查,不區分字符大小寫
匹配優先級:=,^~,~,~/~*,不帶符號
;
root /vhosts/www/htdocs/
http://www.peaoguo.com/index.html--->/vhosts/www/htdocs/index.html -
alias path;
定義路徑別名,文檔映射的另一種機制,僅能用于location
注意:location中使用root指令和alias指令的意義不同,
root,給定的路徑對應于location中/url/左側的/
alias,給定的路徑對應于location中的/url/右側的/ -
index file ...;
默認資源,http,server,location error_page code ... [=[response]] url;
try_file file ...url;
-
-
定義客戶端請求的相關配置
-
keepalive_timeout timeout [header_timeout];
設定保持連接的超時時長,0表示禁止長連接,默認為75S -
keepalive_requests number;
在一次長連接上所允許請求的資源的最大數量,默認為100 -
keepalive_disable none | browser ......;
對哪種瀏覽器禁用長連接 -
send_timeout time;
向客戶端發送響應報文的超時時長,此處,是指兩次寫操作之間的間隔時長 -
client_body_buffer_size size;
用于接收客戶端請求報文的body部分的緩沖區大小,默認為16K,超出此大小時,其將被暫存到磁盤上的由client_body_path指定所定義的位置; -
client_body_temp_path path [level1 [level2 [level3]]];
設定用于存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數據
16進制的數字
client_body_path /var/tmp/client_body 1 2 2
1
、表示用一位16進制數字表示一級子目錄;0-f 16個
2
、表示用兩位16進制數字表示二級子目錄;00-ff 256個
2
、表示用兩位16進制數字表示三級子目錄;00-ff 256個
-
-
對客戶端進行限制的相關配置
-
limit_rate rate;
限制響應給客戶端的傳輸速率,單位是bytes/second,0表示無限制 -
limit_excetp method ...{...}
限制對指定請求方法之外的其它方法的使用客戶端
limit_rate GET{
allow 10.192.0.0/16 ;
deny all;
}
-
-
文件操作優化的配置
-
aio on|off |threads[=pool];
是否啟用aio功能 -
directio size|off;
在LInux主機啟用O_DIRECT標記,此處意味文件大小等于給定的大小時使用,例如directio 4m; -
open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以緩存以下三種信息:
1、文件的描述符、文件大小和最近一次的修改時間
2、打開的目錄結構
3、沒有找到的或者沒有權限訪問的文件的相關信息
max=N
可緩存的緩存項上限,達到上限后會使用LRU算法實現緩存管理
lnactive=time
;緩存項的非活動時間,在此處指定的時長內未被命中的或命中次數少于open_file_chache_min_uses指令所指定的非活動項 -
open_file_cache_valid time;
緩存項有效性的檢查頻率,默認為60S -
open_file_cache_min_uses number;
在open_file_cache 指令的inactive參數指定的時長內,至少應該被命中多少次方可被歸類為活動項 -
open_file_cache_errors on |off
是否緩存查找時發送錯誤的文件一類信息;
-
-
ngx_http_access_module模塊:
實現基于IP的訪問控制功能allow address |CIDR|unix; all;
-
deny address |CIDR|unxi; all;
使用范文http,server,location,limit_except
-
ngx_http_auth_basic_module模塊
實現基于用戶的的訪問控制,使用basic機制進行用戶認證auth_basic_string | off;
-
auth_basic_user_file file;
location /admin/ {
alias /web/app/;
auth_basic "ADMIN AREA";
auth_basic_user_file /etc/nginx/.ngxpasswd;
}
注意:htpasswd命令由httpd-tools所提供
-
ngx_http_stub_status_module模塊
用于輸出nginx的基本狀態信息-
stub_status;
配置示例:
location /nginx_admin_status {
stub_status;
}
各狀態參數含義:
Active Connections:活動狀態的連接數
accepts:已經接受的客戶端請求的總數
handled:已經處理完成的客戶端請求的總數
requests:客戶端發來的總的請求數
Reading:處于讀取客戶端請求報文首部的連接的連接數
Writing:處于向客戶端發送響應報文過程中的連接數
Waiting:處于等待客戶端發出請求的空間連接數
-
-
ngx_http_log_module模塊
-
log_format name string ...;
string可以使用nginx核心模塊及其它模塊內嵌的變量 -
access_log path [format [buffer=size [gzip[=level]] [flush=time [if=condition]];
access_log off;
訪問日志文件路徑,格式及相關的緩沖配置
buffer=size
flush=time-
open_log_file_cache max=N [inacitve=time] [min_uses=N] [valid=time]
open_log_file_cache off
緩存各日志文件相關的元數據信息
max:緩存的最大文件描述符數量
min_uses:在inactive指定的時長內訪問大于等于此值方可被當做活動項;
inactive:非活動時長
valid:驗證緩存中各緩存項是否為活動項的時間間隔
-
-
-
ngx_http_gzip_module
gzip on|off;
-
gzip_comp_level level;
level級別1-9 gzip_disable regex ...;
-
gzip_min_length length;
啟用壓縮功能的響應報文大小閥值 -
gzip_buffers number size;
支持實現壓縮功能時為其配置的緩沖區數量及每個緩存區大小 -
gzip_proxled off |expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any ...;
nginx做為代理服務器接收從被代理服務器發送的響應報文,在何種情況下壓縮。
off:對代理的請求不啟用
no-cache,no-store,private:表示從被代理服務器收到的響應報文首部的Cache-Control的值為此三者中任何一個,則啟用壓縮功能; -
gzip_types mime-type ...;
壓縮過濾器,僅對此處設定的MIME類型的內容啟用壓縮功能
示例:
gzip on;
gzip_comp_level 6;
gzip_type text/css text/xml text/html application/javascript;
-
ngx_http_ssl_moudle
ssl on|off;
-
ssl_certificate file;
當前虛擬主機使用PEM格式的證書文件; -
ssl_certificate_key file;
當前虛擬主機上與其證書匹配的私鑰文件; -
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持的ssl協議版本,默認為后三個; -
ssl_session_cache off |none |[builtin[:size]] [shared:name:size];
builtin[:size]:使用OpenSSL內建的緩存,此緩存為每個worker進程私有 -
ssl_session_timeout time;
客戶端一側的連接可以復用ssl session cache中緩存的ssl參數的有效時長
配置示例:
server {
listen 443 ssl;
server_name www.peaoguo.com;
root /data/www/ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:sslcache:20m;
}
-
nginx_http_rewite_modules
將用戶請求的URI基于regex所描述的模式進行檢查,而后完成替換-
rewrite regex replacement [flag]
將用戶請求的URI基于regex所描述的模式進行檢查,匹配到時將其替換為replacement指定的新的URI
注意:如果在同一級配置塊中存在多個rewirte規則,那么會自上而下組個檢查,被某條件規則替換完成后,會重啟新一輪的替換檢查,因此,隱含有循環機制;[flag]所表示的標志位用于控制此循環機制;
[flag]
last:重寫完成后停止對當前URI在當前的location中后續的其它重新操作,而后對新的URI啟動新一輪重新檢查,提前重 啟新一輪循環。
break: 重寫完成后停止對當前URI在當前的location中后續的其它重新操作,而后直接跳轉至重寫規則配置塊之后的其它配置,結束循環。
redirect:重寫完成后以臨時重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求,不能以http:// 或https://開頭。
permanent:重新完成后以永久重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求。 -
return
return code [text];
return code URL;
return URL;
-
rewrite_log on|off;
是否開啟重寫日志 -
if (condition) {...}
引入一個新的配置上下文,條件滿足時,執行配置塊中的配置指令;server,location,condition- 比較操作符:
==
!=
~
:模式匹配區分字符大小寫;
~*
:模式匹配,不區分大小寫
!~
:模式不匹配,區分大小寫
!~*
:模式不匹配,不區分大小寫 - 文件及目錄存在性判斷:
-e,!-e
-f,!-f
-d,!-d
-x,!-x
- 比較操作符:
-
set $variable value;
用戶自定義變量;
-
-
ngx_http_referer_module
-
valid_referers none |blocked|server_names|string...;
定義referer首部的合法可用值;
none
:請求報文首部沒有referer首部
blocked
:請求報文的referer首部沒有值
server_names
:參數,其可以有值作為主機名或主機名模式
arbitrary_string
:直接字符串,但可使用*做通配符
regular expression
:被指定的正則表達式模式匹配到的字符串,要使用~
開頭,例如~.*\.peaoguo\.com;
配置示例:
valid_referers none blocked server_names *.peaguo.com peaguo.* *.peaoguo.* *~\.peaoguo\.;
if($invalid_referer) {
return http://www.peaguo.com/invalid.jpg;
}
-
-