OPenSSL

OPenSSL

  OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,并提供豐富的應用程序供測試或其它目的使用.

  SSL是Secure Sockets Layer(安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸。Netscape公司在推出第一個Web瀏覽器的同時,提出了SSL協議標準。其目標是保證兩個應用間通信的保密性和可靠性,可在服務器端和用戶端同時實現支持。已經成為Internet上保密通訊的工業標準。

  SSL能使用戶/服務器應用之間的通信不被攻擊者竊聽,并且始終對服務器進行認證,還可選擇對用戶進行認證。SSL協議要求建立在可靠的傳輸層協議(TCP)之上。SSL協議的優勢在于它是與應用層協議獨立無關的,高層的應用層協議(例如:HTTP,FTP,TELNET等)能透明地建立于SSL協議之上。SSL協議在應用層協議通信之前就已經完成加密算法、通信密鑰的協商及服務器認證工作。在此之后應用層協議所傳送的數據都會被加密,從而保證通信的私密性。

  傳輸層協議:TCP,UDP,SCTP.傳輸層協議的每一種都會提供端口,端口是用來標識進程地址的,但是端口卻是由內核上的傳輸層協議所提供,所以每一個進程所啟動時,要想通過某地址與其他主機通信,他要向內核注冊申請使用某端口,而且一旦注冊使用以后他是獨占使用的

  進程間通信有多種方式,在同一主機上的進程間通信可以借助內核間的很多機制實現,如IPC機制,message queue(消息隊列),shm(共享內存),semerphor(旗語)等等…

  不同主機上的進程間通信用的最多的是早些時候tcp/ip協議中所研發的一種機制叫做基于socket的通信機制,socket是成對出現的;即ip+port.ip+port只是用來描述標識單個主機上的進程地址的,如果要真正產生通信他應該是兩個主機上發進程間進行通訊,即客戶端有ip+port服務端有ip+port(cip:port<–>sip:port)

  兩個主機間的進程通訊的時候發起的一方應該知道接收方的地址,而這個地址包含了ip和端口,那如何能得知地址呢.所以為了解決這樣的問題,互聯網名稱地址解析機構就首先做出了假定(套接字通信在基于CS模式時服務器端要處于監聽模式:所謂監聽模式就表示打開ip和端口隨時等待客戶端請求),這就叫做監聽模式;

監聽模式:LISTEN機制

監聽模式指的是無論有沒有人訪問他都要打開自己的進程,可以讓他監聽在某個ip+port上

SSL:secure sockets layer(安全的套接字層)

如果http協議調用了ssl協議,那么他就變成了https(http –>ssl–>https)

網絡通信安全的目標是什么:

保密性:confidentiality
完整性:integrity 通信雙方在實現通信時整個通信報文不能產生信息丟失,一旦信息丟失就基于其他機制讓接收方知道.
可用性:availability 通信雙方所產生的信息應當對授權實體可用,即加了密的數據對方最起碼能夠解密

網絡安全通訊的攻擊類型:

威脅保密性的攻擊:竊聽,通信量分析
威脅完整性的攻擊:更改,偽裝,重放,否認
威脅可用性攻擊:拒絕服務(DoS)

為了實現安全目標并防范攻擊,就需要提供一些機制來完成抵御攻擊保證安全,這需要從很多層面來保證.這些層面主要是從兩個層面來說;技術和服務

解決方案:

技術:加密和解密,服務:(用來抵御攻擊而提供的服務,也即使為了實現上述安全目標而特地設計的安全服務)

加密和解密:(技術)
傳統加密方法:替代加密方法,置換加密方法
現代加密方法:現代塊加密方法
服務:
認證機制
訪問控制機制
在互聯網通訊時通訊方如何與被通訊方安全交換密鑰:密鑰算法和協議就是為了解決密鑰交換的服務

加密和解密以及實現服務功能當中所用到的密鑰算法和協議:常見的有四大類;

對稱加密:
    常見的加密方式有:DES,3DES,AES,Blowfish,Twofish,TDEA,RC6,CAST5
    特性:
        加密和解密使用同一個密鑰
        將原始數據分割成為固定大小的塊,逐個進行加密
    缺陷:
        密鑰過多
        密鑰分發困難
公鑰加密:密鑰成對存在,分為公鑰和與之配對的私鑰.
    公鑰:從私鑰中提取產生;可公開給所有人;pubkey
    私鑰:通過工具創建,使用者自己留存,必須保證其私密性;secret key;
    特點:
        用公鑰加密的數據只能使用與之配對的私鑰解密;反之亦然
    用途:
        數字簽名:主要作用在于讓接收方確認發送方的身份
        密鑰交換:發送方用對方的公鑰加密一個對稱密鑰,并發送給對方;以實現密鑰交換
加密和發送過程:假如說A要和B進行通信,第一步A先生成一段數據,為了保證這段數據安全無誤保密的送達給B,A要先用加密算法    計算出這段數據的特征碼.
第二步A會用自己的私鑰加密這段特征碼并將結果附加在數據后面.
第三步A生成一個臨時的對稱密鑰,并使用這個對稱密鑰加密整段數據(特征碼+數據).
第四步A會獲取到B的公鑰,并用B的公鑰加密剛才的臨時性對稱密鑰,并附加在整段數據的后面,然后整體發送給B.

解密過程:第一步B先用自己的私鑰去解密A發送過來的整段數據后面的對稱密鑰.
第二步用對稱密鑰解密A使用臨時對稱密鑰加密的整段內容(數據+特征碼).
第三步用A的公鑰解密特征嗎,如果能解密的話A的身份得到了驗證.
 第四步B用同樣的對稱加密算法去計算數據的特征碼并與解密出來的特征碼記性比較,
如果兩個特征碼相同,數據完整性得到了驗證.所以這種手段保證了保密性和完整性同時也完成了身份驗證. 

    數據加密
    公鑰加密當中常用的算法:RSA,DSA,ELGamal
        DSS:數字簽名標準
        DSA:僅能實現簽名,而不能實現加解密
        RSA:既能簽名,又能實現加解密
單向加密:提取數據指紋,只能加密,不能解密.
    特性:定長輸出,雪崩效應
    功能:主要實現完整性驗證
    算法:
        md5:消息摘要算法,5是版本號,128位定長輸出
        sha1:安全的哈希算法,1是版本號,160位定長輸出
        sha224,sha256,sha384,sha512
密鑰交換:互聯網密鑰交換;常見的實現方法有兩種;
    公鑰加密
    DH算法
PKI:公鑰基礎設施:由四個組件組成
簽證機構:CA
注冊機構:RA
證書吊銷列表:CRL
證書存取庫:CB
證書

x509v3:定義了證書的結構以及認證協議標準

定義的證書應該有以下內容組成
    證書版本號
    序列號
    簽名算法ID
    發行者的名稱
    有效期限
    主體名稱
    主體公鑰
    發行者的唯一標識
    主體的唯一標識
    擴展
    發行者的簽名

SSL:安全套接字層:由網景公司1994年發布,他的1.0版本從來沒有公開過,2.0版本在1995年發布,因為存在數個安全漏洞被3.0版本取代,而3.0在1991年發布,3.0版本被谷歌發現嚴重漏洞已經被禁用,目前處于臨危狀態,目前建議使用TLS1.2版本. TLS:傳輸層安全:由IETF1999年發布,2006年發布1.1版本

TLS采用了分層設計: 最底層:基礎算法原語的實現 第二層:各種算法的實現 第三層:組合算法實現的半成品 第四層:用各種組件拼裝而成的各種成品密碼學協議軟件

開源協議的實現:OpenSSL

linux系統實現上述的方案有兩種:OpenSSL(ssl協議和加密解密庫的實現),GPG(pgp協議的實現)

OpenSSL由三部分組成:
libencrypto:用于實現加密和解密的庫
libssl:用于實現ssl通信安全機制的庫
openssl多用途命令行工具
SSL會話主要三步:
客戶端向服務器端索要并驗正證書;
雙方協商生成"會話密鑰"
====此前兩步被成為握手階段====
雙方采用"會話密鑰"進行加密通信

在這三步操作當中,以HTTPD為例首先是客戶端通過瀏覽器向服務器發送加密通信請求,這個加密通信請求就成為clienthello 的過程;也就是SSL握手過程的第一階段;

SSL握手過程

第一階段clienthello:在clienthello過程,客戶端主要完成以下幾個操作;

向服務器發送自己支持的協議版本,比如TLS1.2
客戶端生成的一個隨機數,稍后用于生成一個會話密鑰
發送自己支持的各種加密算法,比如AES(對稱加密算法),RSA(公鑰加密算法)...
發送自己支持的壓縮算法

第二階段:serverhello:服務器端在收到客戶端的請求之后要向客戶端發出回應;回應主要有以下內容;

確認使用的加密通信協議版本,比如TLS1.2
服務器端生成一個隨機數,稍后用于生成"會話密鑰"
確認使用的加密方法
服務器證書

第三階段:客戶端收到服務器端的serverhello以后給出的回應;

驗證服務器證書;在確認無誤后取出其公鑰;(發證機構,證書簽名,證書完整性,證書持有者,證書有效期,吊銷列表)
發送以下信息給服務器端
    一個隨機數:用于服務器公鑰加密
    編碼變更通知:表示通信雙方都用商定好的密鑰進行通信;即隨后的信息都將用雙方商定好的加密方法和密鑰發送.
    客戶端握手結束通知:

第四階段:收到客戶端發來的第三個隨機數pre-master-key后,計算生成本次會話所有用到的"會話密鑰";向客戶端發送如下信息;

編碼變更通知:表示通信雙方都用商定好的密鑰進行通信;即隨后的信息都將用雙方商定好的加密方法和密鑰發送.
服務器端握手結束通知

OpenSSL的應用

它的組件:libcrypto,libssl主要由開發者使用,openssl;多用途命令行工具.

openssl:眾多子命令,分為三類:標準命令,消息摘要(dgst子命令),加密命令(enc子命令)

標準命令:

消息摘要(dgst子命令)

加密命令(enc子命令)

對稱加密:

工具:openssl enc 支持的算法:3des,aes,blowfish..

enc命令

加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext

OPenSSL

解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext

OPenSSL

單向加密:

工具:opssl dgst dgst,md5sum,sha1sum,…

dgst命令:計算文件特征碼

~]# openssl dgst -md5 /path/to/somefile

生成用戶密碼的命令:

工具:passwd,openssl passwd

~]# openssl passwd -1 -salt SALT

生成隨機數:

工具:openssl rand

~]# openssl rand -hex NUM
~]# openssl rand -base NUM
公鑰加密:三種功能;
加密解密:
    算法:RSA,ELGamal
    工具:openssl rsautl,gpg
數字簽名:
    算法:RSA,DSA,ELGamal
    工具:openssl tsasutl,gpg
密鑰解密:
    算法:DH

如何生成密鑰:

生成私鑰:~]# (umask 077; openssl genrsa -out /path/to/private_key_file num_bits)
提出公鑰:~]# openssl rsa -in /path/from/frivate_key_file -pubout

linux系統上的隨機數生成器:
/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞
/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數,非阻塞;
    偽隨機數不安全
    熵池中隨機數的來源:
        硬盤io中斷時間間隔;
        鍵盤io中斷時間間隔;

CA:公共信任的CA,私有CA

建立私有CA: openssl,OpenCA

openssl命令:

  配置文件:/etc/pki/tls/openssl.cof   

構建私有CA:

在確定配置為CA的服務上生成一個自簽證書,并為CA提供所需要的目錄及文件即可;
步驟:
    1)生成私鑰:
        ~]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
    2)生成自簽證書:
        ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
            -new:生成新證書簽署請求
            -x509:生成自簽格式證書,專用于創建私有CA時使用
            -key:生成請求時用到的私有文件路徑
            -out:生成的請求文件路徑;如果自簽證操作,將直接生成簽署過的證書
            -days:證書的有效時長,單位是day
    3)為CA提供所需的目錄及文件
        ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
        ~]# touch /etc/pki/CA/{serial,index.()txt}
        ~]# echo 01 > /etc/pki/CA/serial

要用到證書進行安全通信的服務器,需要向CA請求簽署證書

步驟:(以httpd為例)

1)用到證書的主機生成證書簽署請求
    ~]# mkdir /etc/httpd/ssl
    ~]# cd /etc/httpd/ssl
    ~]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成證書簽署請求
    ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
3)將請求通過可靠方式發送給CA主機
    ~]# scp
4)在CA主機上簽署證書
    ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
    查看證書中的信息:
        ~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

吊銷證書:

步驟:

1)客戶端獲取要吊銷的證書的serial(序列號)(在使用證書的主機上執行)
    ~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
2)CA端主機吊銷證書
    先根據客戶端提交的serial和subject信息,對比其本機數據庫index.txt中存儲的是否一致
    吊銷:
        # openssl ca -revoke /etc/pki/CA    /newcerts/SERIAL.pem
            其中的SERIAL要換成證書真正的序列號;
3)生成吊銷證書的吊銷編號(第一次吊銷證書時執行)
    #echo 01 > /etc/pki/CA/crlnumber
4)更新證書吊銷列表
    # openssl ca -gencrl -out thisca.crl
    查看crl文件:
        # openssl crl -in /path/from/crl_file.crl -noout -text
過程示例:

構建私有CA

    1)主機生成私鑰:

        ~]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
    2)生成自簽證書:
        ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
            -new:生成新證書簽署請求
            -x509:生成自簽格式證書,專用于創建私有CA時使用
            -key:生成請求時用到的私有文件路徑
            -out:生成的請求文件路徑;如果自簽證操作,將直接生成簽署過的證書
            -days:證書的有效時長,單位是day
    3)為CA提供所需的目錄及文件
        ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
        ~]# touch /etc/pki/CA/{serial,index.txt}
        ~]# echo 01 > /etc/pki/CA/serial

OPenSSL

OPenSSL

OPenSSL

要用到證書進行安全通信的服務器,需要向CA請求簽署證書(以httpd為例)

1)用到證書的主機生成證書簽署請求
    ~]# mkdir /etc/httpd/ssl
    ~]# cd /etc/httpd/ssl
    ~]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成證書簽署請求
    ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 3655
3)將請求通過可靠方式發送給CA主機
    ~]# scp
4)在CA主機上簽署證書
    ~]# openssl ca -in httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 3655
    查看證書中的信息:
        ~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

OPenSSL

OPenSSL

在CA主機簽署證書

OPenSSL

將證書發送給申請方,放在其對應的服務目錄中

OPenSSL

SSH

安全的shell協議,代替傳統的不安全的遠程登錄,默認監聽在tcp協議的22號端口,SSH協議的開源實現是基于OpenSSH這個軟件,提供SSH服務的另外一個軟件是dropbear,這是一個第三方提供的軟件,沒有rpm包,需要手動編譯安裝.

openssh

客戶端:ssh,scp,sftp 服務端:sshd

ssh命令

格式: ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
    -p port:遠程服務器監聽的端口
    -b:指定連接的源IP
    -v:調試模式
    -C:壓縮方式
    X: 支持x11轉發
    -Y:支持信任x11轉發
        ForwardX11Trusted yes
    -t: 強制偽tty分配
        ssh -t remoteserver1 ssh remoteserver2
        ]# ssh -t 10.1.249.190 ssh 10.1.249.191
注意:當初次使用ssh命令連接至一個目標主機時,系統會把這個目標主機的信息保存至當前本機的連接用戶的家目錄的known_hosts文件中,
這個文件的作用是,當目標主機的信息發生了變化的時候會拒絕連接,比如偽裝ip   ,登錄的時候會發出警告提示,()此次連接的IP和之前連接的ip不是同一臺主機). 
此種機制的實現是基于密鑰對兒實現的,如果刪除此文件即可連接.
ssh基于key的認證方式
(1) 在客戶端生成密鑰對
ssh-keygen -t rsa [-P ''] [-f “/root/.ssh/id_rsa"]
#ssh-keygen –t rsa –P ‘’ -f “/root/.ssh/id_rsa”
#ssh-keygen
(2) 把公鑰文件傳輸至遠程服務器對應用戶的家目錄
ssh-copy-id [-i [identity_file]] [user@]host
(3) 測試
(4) 轉化為openssh兼容格式(適合SecureCRT, Xshell不需要轉化格式),并復制到需登錄主機上相應文件authorized_keys中,注意權限必須為600
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5)重設私鑰口令: #ssh-keygen –p

OPenSSL

OPenSSL

注意:如果在設定密鑰密碼的時候為密鑰設定了密碼的話,每次登錄遠程主機都要輸入密鑰密碼.可以使用驗證代理的方式解決此問題,如下;

驗證代理( authentication agent)保密解密后的密鑰
這樣口令就只需要輸入一次
在GNOME中,代理被自動提供
否則運行ssh-agent bash
鑰匙通過命令添加給代理
#ssh-add

OPenSSL

SSH端口轉發

什么是SSH端口轉發? SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網絡數據。 但是, SSH 還能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發 ,并且自動提供了相應的加密及解密服務。這一過程也被叫做“隧道” ( tunneling),這是因為 SSH 為其他 TCP 鏈接提供了一個安全的通 道來進行傳輸而得名。例如, Telnet, SMTP, LDAP 這些 TCP 應用均 能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此 同時, 如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許 SSH 的連接,也能夠通過將 TCP 端口轉發來使用 SSH 進行通訊 ? SSH 端口轉發能夠提供兩大功能: ? 加密 SSH Client 端至 SSH Server 端之間的通訊數據 ? 突破防火墻的限制完成一些之前無法建立的 TCP 連接。

本地轉發:
-L localport:host:hostport sshserver
ssh –L 9527:server1:23 -N server2
telnet 127.0.0.1 9527
當訪問本機的9527的端口時,被加密后轉發到server2的ssh服務,再解密被轉發到server1:23
data<-->localhost:9527<-->localhost:XXXXX<-->server2:22<-->server2:YYYYY<-->server1:23
選項:
    -f 后臺啟用
    -N 不開遠程shell
    -g 啟用網關功能
遠程轉發:
-R sshserverport:host:hostport sshserver
ssh –R 9527:server1:23 –N server2
讓server2偵聽9527端口的訪問,如有訪問,就加密后轉發請求到本機ssh服務,再由本機解密后轉發到serve1:23
Data<-->server2:9527<-->server2:22<-->localhost:XXXXX<-->localhost:YYYYY<-->server1:23
動態端口轉發
當用firefox訪問internet時,本機的1080端口做為代理服務器, firefox的訪問請求被轉發到sshserver上,由sshserver替之訪問internet
在本機firefox設置代理proxy:127.0.0.1:1080
#ssh -D 1080 root@sshserver
ssh服務器

服務器端:

sshd, 配置文件: /etc/ssh/sshd_config
常用參數:
    Port
    ListenAddress ip
    PermitRootLogin yes
    ClientAliveInterval 0
    UseDNS yes
限制可登錄用戶的辦法:
    AllowUsers user1 user2 user3
    DenyUsers
    AllowGroups
    DenyGroup
ssh服務的最佳實踐
    1、不要使用默認端口
    2、禁止使用protocol version 1
    3、限制可登錄用戶
    4、設定空閑會話超時時長
    5、利用防火墻設置ssh訪問策略
    6、僅監聽特定的IP地址
    7、基于口令認證時,使用強密碼策略
        tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
    8、使用基于密鑰的認證
    9、禁止使用空密碼
    10、禁止root用戶直接登錄
    11、限制ssh的訪問頻度和并發在線數
    12、做好日志,經常分析

示例:設置可登錄用戶白名單;編輯配置文件]# vim /etc/ssh/sshd_config.添加白名單信息;

OPenSSL

用戶登錄信息獲取:

/var/log/wtmp:用戶成功登錄的日志信息
    ]# last
/var/log/btmp:用戶登錄嘗試失敗的日志信息
    ]# lastb

lastlog:每個用戶最近一次成功登錄的信息

scp命令

scp [options] SRC... DEST/
兩種方式:
    scp [options] [user@]host:/sourcefile /destpath
    scp [options] /sourcefile [user@]host:/destpath
常用選項:
-C: 壓縮數據流
-r: 遞歸復制
-p: 保持原文件的屬性信息
-q: 靜默模式
-P PORT: 指明remote host的監聽的端口

rsync命令

基于ssh和rsh服務實現高效率的遠程系統之間復制文件
使用安全的shell連接做為傳輸方式
rsync –av /etc server1:/tmp 復制目錄和目錄下文件
rsync –av /etc/ server1:/tmp 只復制目錄下文件
比scp更快,只復制不同的文件
選項:
    -n 模擬復制過程
    -v 顯示詳細過程
    -r 遞歸復制目錄樹
    -p 保留權限
    -t 保留時間戳
    -g 保留組信息
    -o 保留所有者信息
    -l 把符號鏈接文件做為符號文件進行復制
    -L 將軟鏈接文件指向文件復制
    -a 存檔模式,相當于 –rlptgoD,但不保留ACL( -A)和SELinux屬性(-X)

sftp命令:基于ssh的ftp協議

交互式文件傳輸工具
用法能和傳統的ftp工具相似
利用ssh服務實現安全的文件上傳和下載
使用ls cd mkdir rmdir pwd get put等指令,可用?獲取幫助信息。
sftp [user@]host
sftp> help

AIDE

當一個入侵者進入了你的系統并且種植了木馬,通常會想 辦法來隱蔽這個木馬(除了木馬自身的一些隱蔽特性外, 他會盡量給你檢查系統的過程設置障礙),通常入侵者會 修改一些文件,比如管理員通常用ps -aux來查看系統進 程,那么入侵者很可能用自己經過修改的ps程序來替換掉 你系統上的ps程序,以使用ps命令查不到正在運行的木馬 程序。如果入侵者發現管理員正在運行crontab作業,也 有可能替換掉crontab程序等等。所以由此可以看出對于 系統文件或是關鍵文件的檢查是很必要的。目前就系統完 整性檢查的工具用的比較多的有兩款: Tripwire和AIDE ,前者是一款商業軟件,后者是一款免費的但功能也很強 大的工具。

? AIDE(Adevanced Intrusion Detection Environment) ? 高級入侵檢測環境)是一個入侵檢測工具,主要用途是檢查文件的 完整性,審計計算機上的那些文件被更改過了。 ? AIDE能夠構造一個指定文件的數據庫,它使用aide.conf作為其配 置文件。 AIDE數據庫能夠保存文件的各種屬性,包括:權限 (permission)、索引節點序號(inode number)、所屬用戶(user)、 所屬用戶組(group)、文件大小、最后修改時間(mtime)、創建時間 (ctime)、最后訪問時間(atime)、增加的大小以及連接數。 AIDE 還能夠使用下列算法: sha1、 md5、 rmd160、 tiger,以密文形式 建立每個文件的校驗碼或散列號. ? 這個數據庫不應該保存那些經常變動的文件信息,例如:日志文件 、郵件、 /proc文件系統、用戶起始目錄以及臨時目錄.

如何使用AIDE:
安裝AIDE
yum install aide
修改AIDE配置文件
vim /etc/aide.conf (指定對哪些文件進行檢測)
/test/chameleon R
/bin/ps R+a
/usr/bin/crontab R+a
/etc PERMS
!/etc/mtab #“ !”表示忽略這個文件的檢查
R=p+i+n+u+g+s+m+c+md5 權限+索引節點+鏈接數+用
戶+組+大小+最后一次修改時間+創建時間+md5校驗值
NORMAL = R+rmd60+sha256
初始化默認的AIDE的庫:
/usr/local/bin/aide --init
生成檢查數據庫(建議初始數據庫存放到安全的地方)
cd /var/lib/aide
mv aide.db.new.gz aide.db.gz
檢測:
/usr/local/bin/aide --check
更新數據庫
aide --up

切換身份

su 切換身份:su –l username –c ‘command'
sudo 命令
    1. sudo能夠授權指定用戶在指定主機上運行某些命令。 如果未授權用戶嘗試使用 sudo,會提示聯系管理員
    2. sudo可以提供日志,記錄每個用戶使用sudo操作
    3. sudo為系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機
    4.sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期為5分鐘的“入場券”
    5、通過visudo命令編輯配置文件,具有語法檢查功能
配置文件: /etc/sudoers, /etc/sudoers.d/
時間戳文件: /var/db/sudo
日志文件: /var/log/secure
配置文件支持使用通配符glob:
    ? :前面的字符或詞可出現一次或無
    * :前面的字符或詞出現零次或多次
    [wxc]:匹配其中一個字符
    [^wxc]:除了這三個字符的其它字符
    \x : 轉義
    [[alpha]] :字母 示例: /bin/ls [[alpha]]*
配置文件規則有兩類;
    1、別名定義:不是必須的
    2、授權規則:必須的
授權規則格式:
    用戶 登入主機=(代表用戶) 命令
    示例:
        root ALL=(ALL) ALL
格式說明:
    user: 運行命令者的身份
    host: 通過哪些主機
    (runas):以哪個用戶的身份
    command: 運行哪些命
別名:
    Users和runas:
        username
        #uid
        %group_name
        %#gid
        user_alias|runas_alias
    host:
        ip或hostname
        network(/netmask)
        host_alias
    command:
        command name
        directory
        sudoedit
        Cmnd_Alias
sudo別名和示例
別名有四種類型: User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias
別名格式: [A-Z]([A-Z][0-9]_)*
別名定義:
    Alias_Type NAME = item1, item2, item3 : NAME =item4, item5
示例1:
    Student ALL=(ALL) ALL
    %wheel ALL=(ALL) ALL
示例2:
    student ALL=(root) /sbin/pidof,/sbin/ifconfig
    %wheel ALL=(ALL) NOPASSWD: ALL
示例3
    User_Alias NETADMIN= netuser1,netuser2
    Cmnd_Alias NETCMD = /usr/sbin/ip
    NETADMIN ALL=( root) NETCMD
示例4
    User_Alias SYSADER=wang,mage,%admins
    User_Alias DISKADER=tom
    Host_Alias SERS=www.magedu.com,172.16.0.0/24
    Runas_Alias OP=root
    Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
    Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
    SYSADER SERS= SYDCMD,DSKCMD
    DISKADER ALL=(OP) DSKCMD
    User_Alias ADMINUSER = adminuser1,adminuser2
    Cmnd_Alias ADMINCMD = /usr/sbin/useradd,
    /usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*,
    !/usr/bin/passwd root
    ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,
    PASSWD:/usr/sbin/userd
示例5
    Defaults:wang runas_default=tom
    wang ALL=(tom,jerry) ALL
示例6
    wang 192.168.175.136,192.168.175.138=(root)
    /usr/sbin/,!/usr/sbin/useradd
示例7
    wang ALL=(ALL) /bin/cat /var/log/message*
命令語法選項:
#ls -l /usr/bin/sudo
sudo –i –u wang 切換身份
sudo [-u user] COMMAND
    -V 顯示版本信息等配置信息
    -u user 默認為root
    -l,ll 列出用戶在主機上可用的和被禁止的命令
    -v 再延長密碼有效期限5分鐘,更新時間戳
    -k 清除時間戳,下次需要重新輸密碼
    -K 與-k類似,還要刪除時間戳文件
    -b 在后臺執行指令
    -p 改變詢問密碼的提示符號
        如 -p ”password on %h for user %p"

原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/58166

(0)
M20-1馬星M20-1馬星
上一篇 2016-11-07 10:40
下一篇 2016-11-07 10:51

相關推薦

  • ?學會用各種姿勢備份MySQL數據庫

                學會用各種姿勢備份MySQL數據庫 前言 為什么需要備份數據? 數據的備份類型 MySQL備份數據的方式 備份需要考慮的問題 設計合適的備份策略 實戰演練 使用cp進行備份 使用mysqldump+復制BINARY …

    Linux干貨 2016-04-27
  • linux用戶和組

    *** Linux用戶和組: 1.用戶:Username/UID     管理員:root, 0     系統用戶:1-499(CENTOS6), 1-999(CENTOS7)     對守護進程獲取資源進行權限分配  &nbsp…

    Linux干貨 2016-08-04
  • Week2 bash特性及文件相關

    1. 文件類命令及其常用的使用方法 文本查看類命令cat head tail more less 分屏查看命令 more lessmore FILE 翻至最后一頁自動退出less FILE -f 翻至最后一頁不退出 若有追加內容則立即顯示 首尾查看命令head tail head命令: 查看文件前n行 head FILEhead [option] FILEh…

    Linux干貨 2016-12-11
  • jackcui0804作業

    (1)顯示/proc/meminfo 文件中以大小s 開頭的行;( 要求:使用兩種方式) [root@centos7 ~]# cat /proc/meminfo | grep -e "^s.*" -e "^S.*" SwapCac…

    Linux干貨 2016-08-08
  • linux之/home目錄轉移分區。

    linux之/home目錄轉移分區。     I,基本思路,將/home目錄的數據轉移到新的分區,再將/home目錄掛載到新的分區。     II,添加硬盤,進行分區,添加新硬盤不重啟機器識別命令echo “- – -”  /sys/class/scsi_host/host#/scan,然后進行 …

    Linux干貨 2017-06-19
  • 第6天預習xargs命令的用法

    Xargs用法詳解 1. 簡介   之所以能用到這個命令,關鍵是由于很多命令不支持|管道來傳遞參數,而日常工作中有有這個必要,所以就有了xargs命令,例如: find /sbin -perm +700 |ls -l     &n…

    Linux干貨 2016-08-05
欧美性久久久久