Linux安全和加解密

概述:

    所有業務的正常運轉,離不開一個安全的運行環境,系統安全性直接關系到業務穩定、可靠、以及可用性,本章就介紹一些系統安全相關的話題,具體包括:   

    1、加密基礎概念

    2、CA和證書的基礎概念

    3、ssl協議和openssl命令

    4、利用openssl建立私有CA,完成證書頒發和管理

    5、利用gpg實現加解密

    6、ssh服務

    7、dropbear提供ssh服務

    8、aide監控文件安全性

    9、sudo相關內容

第一章    加密基礎相關概念

   

    1、安全的目標:

        保密性:confidentiality

        完整性:integrity

        可用性:availability

    2、攻擊類型:

        威脅保密性的攻擊:竊聽,通信量分析

        威脅完整性的攻擊:更改,偽裝,重放,否認

        威脅可用性的攻擊:拒絕服務(DoS)

    3、為了完成安全的目標用到的解決方案

        技術:加密和解密               

                加密和解密:

                    傳統加密方法:替代加密方法,置換加密方法

                    現代加密方法:現代塊加密方法

        服務:用于低于攻擊的服務,也就是為了上述安全目標而特地設計的安全服務

                服務:

                    認證機制

                    訪問控制機制

    4、對稱加密

        對稱加密:加密和解密使用同一個秘鑰;但加密算法和解密算法可能不同

        工作過程為:

            發送者將發送的數據利用秘鑰,使用加密的算法加密成明文,發送給對方;接收方收到加密的數據后,利用同一個秘鑰,和解密的算法,將數據由密文解密成明文

        常見的對稱加密算法:

                DES:Data Encryption Standard,56位秘鑰

                3DES:Triple DES

                AES:Advanced Encryption Standard,支持128位、192位、256位、384位秘鑰

                Blowfish

                Twofish

                RC6

                CAST5

        對稱加密特性:

            <1>加密解密使用同一個秘鑰

            <2>將原始數據分隔成為固定大小塊,逐個進行加密

        對稱加密的缺陷:

            <1>秘鑰過多

            <2>秘鑰分發困難

            <3>數據來源無法確認

    5、公鑰加密(非對稱加密):秘鑰分為公鑰和與之配對的私鑰

        公鑰:公鑰從私鑰中提取產生,可以公開給所有人;pubkey

        私鑰:通過工具創建,私鑰只能使用則自己留存,必須保證其私密性,secret key

        特點:用公鑰加密的數據,只能使用與之配對的私鑰解密;反之,用私鑰加密的數據只能用與之配對的公鑰解密

        用途:

            數字簽名:主要在于讓接收方確認發送方的身份。將數據用單項加密(MD5、SHA)算法,得出來的特征碼,用自己的私鑰進行加密,這就是數字簽名

            秘鑰交換:發送方用對方的公鑰加密一個對稱加密的秘鑰,并發送給對方,以實現秘鑰交換

            數據加密:一般很少用公鑰加密發送的數據本身,因為公鑰加密的加密效率很低,因此一般用對稱秘鑰加密要發送的數據本身

        公鑰機密的工作模式:

            模式一:公鑰加密,私鑰解密

                    B將數據發送給A,B就拿A的公鑰對數據進行加密,然后將加密后的數據發送給A,那此時,加密后的數據只能被A的私鑰進行解密,因此,即使有第三方拿到加密的數據,也無法完成解密,只有A自己有自己的私鑰,因此實現了數據的保密性

            模式二:私鑰加密,公鑰解密

                    A用自己的私鑰加密一份數據給B,加密后的數據只能被A的公鑰進行解密,因此,如果有第三方拿到加密后的數據,是能夠解密的,因為A的公鑰是公開的,任何人都可以拿到,因此可以解密

                    但此種方式的作用,并不是真正拿來加密數據,而是用來進行身份驗證(數字簽名),也就是說,A用自己的私鑰加密一段數據(數據不是要發送的數據本身,而是要加密數據利用單向加密算法得出來的特征碼),然后發送給B,B拿A的私鑰進行解密,能夠解密成功,就證明發送方一定是A,因為只有A的公鑰能解開A的私鑰;一旦解開數據后,得到的就是要發送數據的特征碼,等后面真正發送數據后,可以利用該段特征碼,來驗證數據的完整性

        公鑰加密的常用的算法:

            RSA:既能實現數字簽名,也能實現加解密

            DSA:有時也被稱為DSS,數字簽名標準。僅能實現數字簽名,不能實現加解密

    6、單向加密:只能加密,不能解密。僅能提取數據的特征碼

        特性:

            定長輸出:無論原始數據多大,得出的特征碼都是固定長度的

            雪崩效應:原始數據的微小改變,將導致特征碼的巨大變化

        功能:主要用來實現驗證數據的完整性

        常見的單向加密算法:

            MD5:Message Digest 5  消息摘要,5版本。128bit定長輸出

            SHA1:Secure Hash Algorithm 1,160位定長輸出

            SHA224、SHA256、SHA384、SHA512

    7、秘鑰交換:IKE(Internet Key Exchange)

        常見的交換算法:

            公鑰加密:用對方的公鑰加密對稱秘鑰,這樣對方就能以自己的私鑰解開,從而獲得對稱加密的秘鑰

            DH(Deffie-Hellman)算法:

                    <1> A: a,p 協商生成公開的整數a, 大素數p
                        B: a,p
                    <2> A:生成隱私數據 x, (x<p ),計算得出 a^x%p,發送給B
                        B:生成隱私數據 y,計算得出 a^y%p,發送給A
                    <3> A:計算得出 ( a^y%p) ^x = a^xy%p, 生成為密鑰
                        B:計算得出 ( a^x%p) ^y = a^xy%p, 生成為密鑰

    8、加密通信的雙方的通信過程展示

    圖片1.png

            

        A有一段數據要發送給B,A就用單向加密的算法計算出數據的特征碼,而后A用自己的私鑰加密這段特征碼,生成數字簽名,至此能夠保證數據的完整性(通過比對特征碼),和身份驗證(數字簽名),但是不能保證數據的保密性,因為數據本身還沒被加密。

        因此,A會繼續在原有數據和數字簽名的基礎上,生成一個一次性的對稱加密秘鑰,然后利用對稱加密算法結合秘鑰,去加密原有數據和數字簽名。然后,A用B的公鑰,對對稱加密的秘鑰進行加密,并附加到之前利用對稱加密算法生成的數據的后面,然后發送給B

        當B收到數據后,就用B自己的私鑰解密附加在后面的對稱加密的秘鑰,從而得到了對稱加密的秘鑰(這就完成了秘鑰交換,實際是雙方都知道了對稱加密的秘鑰的過程就是秘鑰交換),然后利用對稱加密的秘鑰進一步解開數據和數字簽名,然后利用A的公鑰解開數字簽名,得到數據本身的特征碼,然后利用同樣的單項加密算法,計算出收到的數據的特征碼,然后比對特征碼,從而驗證數據的完整性

 

    9、中間人攻擊:

        以上通信過程中還是有一個嚴重的漏洞,就是當A和B鍵從來沒進行過通信,那么A怎么獲知B的公鑰,或者B怎么獲知A的公鑰。假設當A沒B的公鑰時,向B發送請求,要求獲知B的公鑰,但是此時,如果有第三方C獲取到請求后,冒充自己就是B,然后將C自己的公鑰發送給A,A就認為C就是B。而C又會冒充自己是A,向B進行通信,從而也獲取了真正B的公鑰,而此后A和B通信的過程中,就都會交由C,數據的安全性就無從保障。這種情況就是中間人攻擊

第二章    CA的和證書的基礎概念

    1、PKI:Public Key Infranstructure公鑰基礎設施

        由四個部分組成:

            簽證機構:CA機構

            注冊機構:RA,相當于CA的派出機構,用于接收注冊申請

            證書吊銷列表:CRL

            證書存取庫:CB

    2、CA的作用

        CA:保證通信雙方,能夠可靠的拿到對方的公鑰(避免中間人攻擊),而設定的雙方都信任的第三方可信機構

            A將自己的公鑰提請給CA,CA經過特殊的防偽處理后,將處理后的A的公鑰發送給A,處理過后的A的公鑰就稱之為CA證書。以后,如果B如果請求要A的公鑰,那么A就將CA證書發送給B,當B拿到證書后,不會立馬就任何該證書,而是要驗證該證書是否是合法的,還要驗證是否是B信任的CA機構頒發的,驗證完了之后,才會認可

        CA證書一般會包含:提請證書的人的名稱,提請人的公鑰,證書有效期,然后CA機構會用自己的私鑰,加密以上的一整段數據的特征碼,然后將加密后的特征碼(也就是數字簽名)附加在數據之后,這個整體就是CA證書

        CA證書后面有CA機構用CA機構自己的私鑰對證書內容部分的特征碼加密的數據,通信方要解開此數字簽名就需要用到CA自身的公鑰,但是如何獲取到CA機構自己的公鑰,如果直接申請,那么此時又會存在中間人攻擊的可能,因此,一般是CA機構會給自己發一個CA證書,然后獲取CA自身的證書,一般不能通過網絡發送,因此一般情況下,是線下交易

    3、CA證書格式:

        X.509,定義證書結構和認證協議的標準,在X.509的標準中,定義了證書需要具備的結構:

            版本號:是X.509的v1還是v2還是v3版本

            序列號:CA機構所發出的證書的序列號

            簽名算法ID:證書所使用的算法

            發行者的名稱:CA機構自己的名稱

            證書有效期限

            主體名稱:提請CA證書的用戶的名稱

            主體公鑰:

            發行者的唯一標識:CA機構的ID

            主體的唯一標識:提請者的ID

            擴展信息

            發行者的簽名:CA機構利用自己的私鑰對以上內容的特征碼加密,生成的數字簽名,將數字簽名附加在證書內容之后,作為證書的一部分

第三章    ssl協議和openssl命令

    1、SSL協議:SSL和TLS

        SSL:安全套接字層,由Netscape發布于1994年,分為V1.0、V2.0、V3.0但由于其版權屬于Netscape公司,且各版本均被爆出有協議漏洞,因此使用的不多

        TLS:Transport Layer Security,傳輸層安全,是國際互聯網工程師協會發布的類似于SSL的協議,其分為V1.0、V1.1、V1.2、V1.3的版本,使用較多的是V1.2的版本

    2、TLS的分層設計:

        <1>最底層:基礎算法的原語的實現,如AES、RSA、MD5

        <2>向上一層:各種算法的實現,也就是算法的具體實現的方式

        <3>再向上一層:組合算法實現的半成品

        <4>最高層:用各種組件拼裝而成的各種成品密碼學協議軟件;

    3、SSL協議的開源實現:OpenSSL

        OpenSSL由三部分組成:

            libencrypt庫:加密解密庫,專用于實現加密解密功能,主要由開發人員使用

            libssl庫:用于實現ssl安全通信機制的庫,主要由開發人員使用

            openssl多用途命令行工具:openssl

    4、SSL會話的主要的三步:

        客戶端向服務器端所要并驗證證書(證書里面有服務器端的公鑰信息);

        雙方協商生成對稱秘鑰;

        雙方采用對稱秘鑰,進行加密通信的過程

        會話過程后,進行斷開

    5、在SSL會話之前開始之前的雙方Handshake Protocol,SSL握手階段的執行流程

        也就是雙方在正式開始SSL會話之前的通信前商量加密算法和生成會話秘鑰階段的詳細過程介紹,(以HTTPS協議為例)       

        <1>第一階段:client-hello

            客戶端向服務器端發送:

            支持的協議版本,如:tls1.2

            客戶端生成一個隨機數,用于稍后生成對稱秘鑰

            支持的加密算法,比如AES、RSA、SHA

            支持的壓縮算法

        <2>第二階段:server-hello

            服務器端向客戶端發送:

            確認使用的加密通信的協議版本,如tls1.2

            生成一個隨機數,用于稍后生成對稱秘鑰

            確認使用的加密算法

            向客戶端發送服務器證書

            如果有必要,有可能會向客戶端索要客戶端的證書(如:當客戶端請求的是網銀頁面時)

        <3>第三階段:客戶端收到服務器端的server-hello后給出的回應

            驗證服務器證書,如果沒問題,則通過解密證書獲取到服務器的公鑰;

            驗證的內容:

                    發證機構:驗證發證機構是否是可信的,也就是驗證證書簽名(CA的數字簽名)

                    證書的完整性,也是驗證證書的數字簽名里面的解密出來的特征碼

                    證書的持有者:驗證證書里面的持有者是否與要訪問的頁面是一致的

                    證書有效期

                    證書是否被吊銷

            發送以下信息給服務器端:

                    一個隨機數,用于生成對稱秘鑰

                    編碼變更通知:表示隨后的信息都將用雙方商定的加密方法和秘鑰發送

                    客戶端握手結束通知:表示客戶端在正式通信前的握手階段結束

        <4>第四階段:服務器端

            收到客戶端發來的最后一個隨機數后,利用含此隨機數在內的一共三個隨機數生成對稱秘鑰;

            向客戶端發送以下信息:

                    編碼變更通知:表示隨后的信息都將用雙方商定的加密方法和秘鑰發送

                    服務器端握手結束通知:表示服務器端握手階段已經結束

    6、基于SSL的通信的實現過程整理總結:

        A、B雙方要進行通信時:A為客戶端,B為服務器端

        <1>A發送hello信息給B,B接收后,發送hello信息給A,此時為雙方建立通信前的確認,需要協商雙方真正通信時所用到的加密算法,包括單向加密、對稱加密、公鑰加密、秘鑰交換用的方法

        <2>A請求B的證書,B于是將自己的證書(CA處理后的公鑰)發送給A

                一般情況下,客戶端不會有證書提供給服務器端,因為一方面是證書的使用費使得客戶端不會去用,另一方面客戶端訪問服務器端的時候,一般不會驗證客戶端的身份,比如訪問某網站,網站不會要求客戶端有證書才響應內容給客戶端,而客戶端是要驗證服務器端的證書的,因為為了防止訪問的網站的正確性,防止釣魚網站等。

                但有時服務器端也會驗證客戶端的證書,比如當客戶端訪問的是網銀頁面的時候,會驗證證書,當我們去銀行開通網銀的時候,一般會有個加密狗之類的東西,其實里面存儲的就是用戶自己的ca證書,只是一般該ca證書的頒發機構不是市面上公認的CA機構,而是銀行自己建的一個CA簽發機構,僅對自己銀行內部有效

        <3>A收到B的證書后,驗證B的證書,如果驗證沒有問題

        <4>A驗證B的證書沒問題后,生成一個隨機數,作為對稱加密的秘鑰,A利用雙方之前協商的秘鑰交換算法(假設為公鑰加密),則將此秘鑰用B的公鑰加密后發送給B

        <5>B收到A發送過來的密文的秘鑰后,利用自己的私鑰,解密得出對稱加密的秘鑰,然后利用對稱加密的秘鑰和之前協商的對稱加密的算法,給A發送A所請求的數據,進行正常數據的發送

        <6>當正常的數據傳輸完成后,A(客戶端)請求通信斷開,服務器也斷開,然后通信終止

    7、openssl命令

        openssl命令行工具有眾多子命令,主要分為三類:

            標準命令:enc、ca、req、genrsa…

            消息摘要命令(dgst子命令相關)

            加密命令(enc子命令相關)

        <1>使用openssl命令行工具完成對稱加密:

            工具:openssl enc子命令

            支持的算法:aes、des、3des等

            enc命令的用法:

                openssl enc -CIPHERNAME -e|d -in /PATH/TO/FILE -out /PATH/TO/FILE 

                選項解釋:

                    -CIPHERNAME:加密的算法的名稱,可通過openssl –help查看所支持的加密算法的名稱

                    -e|d:-e表示加密,-d表示解密

                    -in /PATH/TO/FILE  要加密的文件

                    -out /PATH/TO/FILE  加密后的文件

                    -pass STRING  表示對稱加密的秘鑰是什么

                    -a|-base64   表示以base64文本格式進行編碼,如果不指定,可能是以二進制格式進行編碼

                如對/testdir/file1進行對稱加密:

                    openssl enc -des3 -e -a -salt -in /testdir/file1 -out /testdir/jmfile1  輸入后回車,會要求輸入對稱加密的秘鑰,輸入完成,即可完成加密

                            -des3表示采用des3的加密算法,-a表示以base64文本格式進行編碼,-salt表示加點雜質

                解密上面加密的文件:

                    openssl enc -des3 -d -a -salt -in /testdir/jmfile1 -out /testdir/file2  輸入后回車,會要求輸入對稱加密的秘鑰,輸入完成,即可完成解密

        1.png

        <2>單向加密

            工具:openssl dgst、md5sum、sha1sum、sha256sum…

            用法:

                md5sum /PATH/TO/FILE

                sha1sum /PATH/TO/FILE

                openssl dgst -md5|-sha1… /PATH/TO/FILE

        blob.png

        <3>生成用戶密碼的命令:

            工具:passwd、openssl passwd

            例如:

            openssl passwd -1 -salt 12345然后回車,會提示要求輸入密碼,輸入完成后,即可生成加密后的密碼

                -1  表示使用md5方式加密

                -salt STRING表示生成密碼時加入的雜質的內容

                -salt后面加的雜質的內容可以用隨機數生成,生成隨機數可以用openssl的子命令生成

                        openssl passwd -1 -salt `openssl rand -hex 4` 

        blob.png        

        <4>openssl生成隨機數:

            工具:openssl rand

            用法:openssl rand [-out FILE] [-base64] [-hex] NUM

                -out FILE  表示將生成的隨機數保存在某個文件中

                -base64  表示使用base64編碼,生成的隨機數后面可能會有=,要去掉=后才是真正的隨機數

                -hex  表示使用十六進制數字編碼

                NUM  表示生成隨機字符串的長度

            如:

                openssl rand -base64 10

                表示生成一個10個字節的隨機數,采用base64編碼格式進行輸出

                openssl rand -hex 10

                輸出10個字節的16進制字節長度的隨機數,相當于輸出20個字符

            Linux上的隨機數生成器:

                /dev/random:僅從熵池中返回隨機數,當隨機數用盡,會阻塞后續請求隨機數的應用

                /dev/urandom:從熵池中返回隨機數,隨機數用盡,會利用軟件生成偽隨機數,不會阻塞。偽隨機數不安全

                熵池中隨機數的來源:

                    硬盤I/O中斷時間間隔

                    鍵盤I/O中斷時間間隔

        blob.png        

        <5>openssl實現公鑰加密:

            加密解密:

                    支持的算法:RSA、ELGamal

                    工具:openssl rsautl

            數字簽名:

                    支持的算法:RSA、DSA、ELGamal

                    工具:openssl rsautl

            秘鑰交換

                    支持的算法:DH、RSA

            生成私鑰:(公鑰一般不需要生成,而是自動的會從私鑰中提取產生)

                openssl genrsa 512|768|1024|2048…表示生成一個長度為512、768…位的私鑰

                openssl genrsa 1024 > /PATH/TO/FILE  表示生成一個1024位的私鑰保存到文件中

                openssl genrsa 1024 -out /PATH/TO/FILE 也表示生成一個1024位的私鑰保存到文件中

            生成的私鑰文件,不能讓其他人訪問,因此一般要將私鑰文件的權限變成600,為了簡化步驟,可以直接在生成私鑰時就定義其權限,如:

                (umask 077;openssl genrsa 1024 -out /PATH/TO/FILE)

                用了小括號,相當于在一個子shell中運行,因此此時的子shell的umask設置僅對子shell生效

            從私鑰中提取公鑰:一般不用手工提取

                openssl rsa -in /PATH/TO/私鑰文件  -pubout

                表示從私鑰文件中提取出公鑰

        11.png

        

第四章    利用openssl建立私有CA,完成證書頒發和管理

    1、openssl配置文件中關于CA的配置段介紹

        openssl的配置文件為/etc/pki/tls/openssl.cnf,其中定義了openssl完成CA工作時的相關屬性定義

    1.png

    2、建立私有CA

        在確定配置為CA的服務器上生成一個自簽證書,為CA提供所需的目錄及文件即可

        步驟:

        <1>生成CA自己的私鑰,而在openssl的配置文件中定義了私鑰存放的位置為/etc/pki/CA/private/cakey.pem

            (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048 )

        blob.png        

        <2>為CA提供工作所需要的目錄及文件:

            mkdir /etc/pki/CA/{certs,crl,newcerts}  注意:如果目錄不存在才創建

            touch /etc/pki/CA/{serial,index.txt}

            echo 01 >>/etc/pki/CA/serial

            創建兩個CA工作需要用到的文件,serial為存放證書編號的文件,并且要給該文件提供一個初始的編號,標號必須是2位數字。

index.txt文件用于存放簽署過的證書的索引

        blob.png

        <3>生成CA自己的自簽證書,而在openssl的配置文件中,也定義了自簽證書的存放位置為/etc/pki/CA/cacert.pem

            發起簽署CA證書的請求

            openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem  -out /etc/pki/CA/cacert.pem -days 3650  

                表示發起CA證書簽署請求,

                    -new表示這是一個新申請的簽署請求

                    -x509 表示這是自簽證書,該選項只有在CA為自己生成自簽證書時使用

                    -key指明私鑰的存放路徑

                    -out 標明所生成的請求的文件存放路徑,如果是自簽證書,將直接生成簽署過的證書,如果不是自簽證書,則將生成的簽署請求文件發送給CA服務器,由CA服務器根據請求文件生成證書文件

                    -days 指明申請的證書的有效期限為多少天

            命令執行后會要求填入一些信息:

                國家代碼:CN

                省份:beijing

                城市:beijing

                公司名:nwc

                部門:ops

                持有者名稱:ca.nwc.com(注意:此處最好與此CA服務器的主機名保持一致)

                管理員的郵件地址:nwc@nwc.com

        111.png

 

    3、另一個主機建立CA申請請求,CA進行簽署頒發證書

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

        步驟:

        <1>在需要使用證書的服務器上建一個目錄,生成私鑰(真實環境中建議將該目錄建在需要用到證書的服務的相關目錄下,便于管理)

        <2>生成簽署請求

            openssl req -new -key /testdir/testssl/mykey.private -out /testdir/testssl/mykey.csr -days 365

            表示生成證書簽署請求,使用的私鑰文件路徑為/testdir/testssl/mykey.private,生成的簽署請求的文件為/testdir/testssl/mykey.csr,申請的證書有效期為365天

            執行命令后會要求填入一些信息:

                國家、身份、城市、單位、部門、持有者、管理員郵箱等

            注意:持有者要寫成主機名, 否則可能造成后期用戶訪問時,提示證書與訪問的主機名不一致,此處應為www.nwc.com

        2.png

        <3>將生成的請求文件拷貝到CA服務器上

        <4>在CA服務器上進行簽署,生成證書,在openssl的配置文件中,定義了簽署完成的證書的存放位置為/etc/pki/CA/certs/目錄下

            openssl ca -in /tmp/mykey.csr -out /etc/pki/CA/certs/mykey.crt -days 365

            表示簽署證書,-in指明請求簽署文件的路徑,-out指明生成的證書的路徑,-days表示簽署多少天

            命令執行后,會讓確認兩次,確認好了之后,即完成了簽署的動作,生成了簽署過后的證書

        <5>將簽署的證書發給請求方

        blob.png 

        3333.png       

        blob.png

    4、證書的吊銷

        <1>在客戶端獲取要吊銷的證書的serial
            openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
        <2>在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致
            吊銷證書:
                openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

        <3>生成吊銷證書的編號(第一次吊銷一個證書時才需要執行)
                echo 01 > /etc/pki/CA/crlnumber
        <4>更新證書吊銷列表
            openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl
            查看crl文件:
            openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text

第五章    利用gpg實現加解密

    

    1、gpg實現對稱加密

        <1>對稱加密file文件
            gpg -c file
            ls file.gpg
        <2>在另一臺主機上解密file
            gpg -o file -d file.gpg

    1.png

    2.png

    2、gpg實現公鑰加密

        在hostB主機上用公鑰加密,在hostA主機上解密
        <1>在hostA主機上生成公鑰/私鑰對
            gpg –gen-key
        <2>在hostA主機上查看公鑰
            gpg –list-keys
        <3>在hostA主機上導出公鑰到nwckey.pub

            gpg -a –export -o nwckey.pub
        <4>從hostA主機上復制公鑰文件到需加密的B主機上
            scp nwckey.pub HOST_B:/PATH/TO/SOMEWHERE

        <5>在需加密數據的hostB主機上生成公鑰/私鑰對
            gpg –list-keys
            gpg –gen-key
        <6>在hostB主機上導入公鑰
            gpg –import nwckey.pub
            gpg –list-keys
        <7>用從hostA主機導入的公鑰,加密hostB主機的文件file,生成file.gpg
            gpg -e -r nwc file
            file file.gpg

        <8>復制加密文件到hostA主機
            scp file.gpg HOST_A:/PATH/TO/SOMEWHERE
        <9>在hostA主機解密文件
            gpg -d file.gpg
            gpg -o file -d file.gpg
        <10>刪除公鑰和私鑰
            gpg –delete-keys nwc
            gpg –delete-secret-keys nwc

第六章    ssh服務

    1、SSH協議的基本概念

        SSH:Secure Shell

        監聽在TCP協議的22號端口

        SSH協議版本:

            sshv1:基于CRC-32做MAC,因此不安全,建議勿用

            sshv2:基于雙方主機協商選擇最安全的MAC實現機制,建議使用。

                    sshv2基于DH實現秘鑰交換,基于RSA或DSA實現身份認證

                    客戶端通過檢查服務器端的主機秘鑰來判定是否與其進一步通信

        服務端程序為:openssh-server,配置文件為/etc/ssh/sshd_config

        客戶端程序為:openssh-client,配置文件為/etc/ssh/ssh_config

    2、SSH服務器端的相關配置:

        配置文件:/etc/ssh/sshd_config

        服務腳本:/etc/rc.d/init.d/sshd

        服務腳本配置文件:/etc/sysconfig/sshd

        獲取關于服務配置文件的幫助:man sshd_config

        /etc/ssh/sshd_config配置文件中相關指令說明:(#開始的相關選項表示使用的是默認值)

                Port 22  指明ssh服務監聽的端口

                ListenAddress IP_ADDR  表示監聽的地址,可出現多次

                        0.0.0.0表示當前主機的所有地址

                Protocol 2  表示支持的ssh協議版本,建議是2

                SyslogFacility AUTHPRIV  表示日志記錄的設施,要想知道該設置的具體日志放在哪里,則查看rsyslog的配置文件/etc/rsyslog.conf文件中的相關定義,此處相當于日志存在/var/log/secure日志中

                LogLevel INFO  表示定義記錄的日志級別

                PermitRootLogin yes|no  是否允許管理員以ssh登錄

                MaxAuthTries 6  表示認證時的重試次數,為此數字的一半,超過次數后會被鎖定一定時間

                MaxSessions 10 表示支持的最大的ssh會話的個數

                AcceptEnv  接受的環境變量參數

                AllowUsers  接受那些用戶使用ssh,做用戶白名單,只要不在此名單內的用戶,都不允許登錄

                        如:AllowUsers nwc1 nwc2 nwc3 root

                AllowGroups  接受那些用戶組使用ssh,組的白名單

                DenyUsers  不允許那些用戶使用ssh,用戶黑名單

                DenyGroups  不允許那些用戶組使用ssh,組黑名單

                        白名單和黑名單不要同時使用

                X11Forwarding yes|no  是否轉發圖形窗口

                #KeyRegenerationInterval 1h  密鑰的使用時間

                #ServerKeyBits 1024 密鑰長度

                #LoginGraceTime 2m 登陸寬限期

                #PermitRootLogin yes root是否可以登錄

                #StrictModes yes 嚴格模式,家目錄 屬主 屬組

                PasswordAuthentication yes 是否使用用戶名和密碼的方式

                Kerberos集中認證管理

        使用SSH服務的最佳配置方案:

            1)僅適用sshv2版本

            2)限定僅允許哪些用戶訪問ssh服務

                Allowusers root vivek jerry

                白名單

                DenyUser saroj anjali foo

                黑名單

            3)配置空閑會話超時長

                ClientAliveCountMax  0 

                ClientAliveInterval  300

            4)使用iptables設置ssh服務安全訪問策略

            5)改變默認的端口和監聽的IP

                port 300

                ListenAddress 192.168.1.5

                ListenAddress 202.54.1.5

                勿使用默認22端口

            6)使用強密碼

                生成隨機密碼的函數示例:

                genpasswd(){

                    local 1=$1

                    [ "$1" == "" ]&& 1=20

                    tr -dc A-Za-z0-9_</dev/urandom | head -c ${1} | xargs

                }

            7)使用公鑰認證

            8)禁止空密碼登錄

            9)使用前利用漏掃工具先評估下破解的可能性

                google:ssh best practice

            10)限制ssh訪問頻度

            11)記錄好日志,經常做日志分析。

    3、用戶登錄信息的獲?。?/h3>

        /var/log/wtmp  用戶成功登錄的日志信息,也可直接用last命令顯示

        /var/log/btmp  用戶失敗登錄的日志信息,也可用lastb命令顯示

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

    4、基于SSH的客戶端相關工具:

        客戶端的命令:ssh

        ssh [OPTIONS] USERNAME@HOST [COMMAND]

        常見選項:(如果不提供USERNAME,則會以當前系統上的用戶,作為登錄遠程主機的用戶,如果遠程主機上的用戶不存在,則無法連接)

            -p PORT  指定登錄的端口(如果遠程主機的ssh服務修改了默認監聽的端口,則需要用-p指定端口),在生產環境中建議將SSH監聽的端口改掉

            COMMAND  表示不登錄對方主機,在遠程主機執行命令,然后結果返回本機后退出

            -b:指定連接的源IP
            -v:調試模式
            -C:壓縮方式
            -X: 支持x11轉發
            -Y:支持信任x11轉發
                ForwardX11Trusted yes
            -t: 強制偽tty分配
                ssh -t remoteserver1 ssh remoteserver2

    5、配置基于秘鑰方式進行SSH登錄

        SSH的認證機制:

            基于口令

            基于秘鑰:

                客戶端在本地生成一對秘鑰,客戶端將公鑰復制到服務器端,要登錄的用戶的家目錄下的隱藏目錄.ssh目錄下一個名為authorized_keys或authorized_keys2文件中,這樣即可實現無需密碼登錄ssh服務端

        配置過程:

            <1>生成秘鑰對

                ssh-keygen -t rsa -P ''

                生成的秘鑰默認保存至當前用戶家目錄下的.ssh目錄的id_rsa文件中,公鑰在id_rsa.pub文件中

                -P 表示不指定使用秘鑰文件時的密碼,否則以后每次使用秘鑰登錄時,都要輸入秘鑰文件的密碼

            <2>復制秘鑰至遠程主機

                ssh-copy-id -i /PATH/TO/公鑰文件 USERNAME@HOST

                表示將本機的公鑰文件復制到哪個遠程主機的哪個用戶

    6、基于ssh的復制文件命令:scp

        scp SRC1 SRC2 … DEST

        常用選項有:

            -r 當源是目錄時,實現遞歸復制

            -p 復制時,保留源文件的復制和修改時間戳以及權限

            -q 復制時靜默模式

            -C: 壓縮數據流

            -P PORT  指定服務器端的端口(如果遠程主機的ssh服務修改了默認監聽的端口,則需要用-P指定端口)

        分兩種情況:

            <1>源文件在本機,目標為遠程:

                scp /PATH/TO/FILE1… USERNAME@HOST:/PATH/TO/SOMEWHERE

                注意:源文件為目錄時,要使用-r 選項,實現遞歸復制;多個源時,目標要是目錄

            <2>源文件在遠程,目標為本機:

                scp USERNAME@HOST:/PATH/TO/FILE… /PATH/TO/SOMEWHERE

                注意:源文件為目錄時,要使用-r 選項,實現遞歸復制,多個源時,目標要是目錄

    7、基于ssh的ftp協議的命令:sftp

        查看openssh是不是支持sftp,查看openssh的配置文件/etc/ssh/sshd_config里面,是否有

            Subsystem sftp /usr/libexec/openssh/sftp-server

        這一行的定義,如果有,則證明支持sftp

        用法:sftp USERNAME@HOST  指明以哪個用戶登錄哪個主機的ftp服務器,登錄后可利用help獲取ftp命令的使用格式

    8、rsync命令(比scp更快,只復制不同的文件,對于相同的文件不復制)

        基于ssh和rsh服務實現高效率的遠程系統之間復制文件

        使用安全的shell連接做為傳輸方式

            rsync –av /etc server1:/tmp 復制目錄和目錄下文件(源路徑后面沒有/)

            rsync –av /etc/ server1:/tmp 只復制目錄下文件(原路徑后面有/)

        常見選項:

            -n 模擬復制過程

            -v 顯示詳細過程

            -r 遞歸復制目錄樹

            -p 保留權限

            -t 保留時間戳

            -g 保留組信息

            -o 保留所有者信息

            -l 把符號鏈接文件做為符號文件進行復制(默認)

            -L 將軟鏈接文件指向文件復制

            -a 存檔模式,相當于 –rlptgoD,但不保留ACL( -A)和SELinux屬性(-X)

    9、SSH的端口轉發

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

        <2>SSH 端口轉發能夠提供兩大功能:
            加密 SSH Client 端至 SSH Server 端之間的通訊數據
            突破防火墻的限制完成一些之前無法建立的 TCP 連接

        <3>本地轉發
            ssh -L localport:host:hostport sshserver
            ssh –L 9527:telnetsrv:23 -N sshsrv
            telnet 127.0.0.1 9527
                當訪問本機的9527的端口時,被加密后轉發到sshsrv的ssh服務,再解密被轉發到telnetsrv:23
                data–>localhost:9527–>localhost:XXXXX–>sshsrv:22–>sshsrv:YYYYY–>telnetsrv:23
            選項:
                -f 后臺啟用
                -N 不開遠程shell
                -g 啟用網關功能

        <4>遠程轉發:
            -R sshserverport:host:hostport sshserver
            ssh –R 9527:telnetsrv:23 –N sshsrv
                讓sshsrv偵聽9527端口的訪問,如有訪問,就加密后通過ssh服務轉發請求到本機ssh客戶端, 再由本機解密后轉發到telnetsrv:23
                Data–>sshsrv:9527–>sshsrv:22–>localhost:XXXXX–>localhost:YYYYY–>telnetsrv:23

        <5>動態端口轉發:
            當用firefox訪問internet時,本機的1080端口做為代理服務器, firefox的訪問請求被轉發到sshserver上,由sshserver替之訪問internet
            在本機firefox設置代理socket proxy:127.0.0.1:1080
            #ssh -D 1080 root@sshserver

第七章    利用dropbear提供ssh服務

    

    ssh協議的另一個實現: dropbear

    編譯安裝dropbear準備:
        <1>安裝開發包組:yum groupinstall "Development Tools" -y
        <2>下載源碼包,假設為dropbear-2013.58.tar.bz2

    安裝:
        <3> 解壓:tar xf dropbear-2013.58.tar.bz2
        <4> 查看安裝的幫助手冊:less INSTALL
        <5> 切換到解壓后的目錄,并執行./configure
        <6> make,指定要安裝那些工具:make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
        <7> make install,指定安裝的工具:make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

    啟動ssh服務:
        <8> ls /usr/local/sbin/ /usr/local/bin/
        <9> /usr/local/sbin/dropbear -h
        <10> mkdir /etc/dropbear
        <11> dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
        <12> dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key
        <13> dropbear -p :2222 -F –E #前臺運行(因為本機有SSH,為了避免端口沖突,手動指定其運行在2222端口)
                dropbear -p :2222 #后臺運行
    客戶端訪問:
        <14> ssh -p 2222 root@127.0.0.1
        <15> dbclient -p 2222 root@127.0.0.1

第八章    aide監控文件安全性

    

    1、aide是什么

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

    2、AIDE安裝及其配置文件

        安裝:yum install aide

        其配置文件為/etc/aide.conf (指定對哪些文件進行哪些種類的檢測)

        配置文件相關的定義:      

@@define DBDIR /var/lib/aide    //定義aide的數據庫文件
@@define LOGDIR /var/log/aide   //定義aide的日志文件
database=file:@@{DBDIR}/aide.db.gz   //定義aide比對時使用的數據庫文件
database_out=file:@@{DBDIR}/aide.db.new.gz    //定義aide創建數據庫時的數據文件
//創建好比對數據庫后,數據庫的名稱默認就是new,如果要比對,需要將new去掉,然后利用去掉new后的數據進行驗證
#p:      permissions  //定義文件權限的檢測
#i:      inode:     //定義文件inode號的檢測
#n:      number of links  //定義文件鏈接數的檢測
#u:      user   //定義文件所屬主的檢測
#g:      group  //定義文件所屬組的檢測
#s:      size   //定義文件大小的檢測
#b:      block count   //定義文件占用塊數量的檢測
#m:      mtime   //定義文件內容修改時間的檢測
#a:      atime   //定義文件訪問時間的檢測
#c:      ctime   //定義文件修改時間的檢測
#S:      check for growing size  
#acl:           Access Control Lists   //定義文件acl權限的檢測
#selinux        SELinux security context   //定義selinux的檢測
#xattrs:        Extended file attributes   //定義文件xattrs屬性的檢測
#md5:    md5 checksum  //定義MD5校驗檢測
#sha1:   sha1 checksum  //定義SHA1校驗檢測
#sha256:        sha256 checksum   //定義SHA256校驗檢測
#sha512:        sha512 checksum
#R:             p+i+n+u+g+s+m+c+acl+selinux+xattrs+md5   //定義一個檢測項目的組,組名為R,檢測的內容為后面各個單獨屬性的集合
#L:             p+i+n+u+g+acl+selinux+xattrs             //支持自定義的檢測項目組
#E:             Empty group
#>:             Growing logfile p+u+g+i+n+S+acl+selinux+xattrs
ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger
NORMAL = R+rmd160+sha256
/opt    NORMAL   //定義檢測的文件路徑,及對其采用哪種方式的檢測,后面NORMAL為定義的一個檢測項目的集合
/usr    NORMAL
/root   NORMAL
!/usr/src   //路徑前面帶!表示不檢測
!/usr/tmp

       

    3、使用流程

        初始化默認的AIDE的庫:
            /usr/local/bin/aide –init
        生成檢查數據庫(建議初始數據庫存放到安全的地方)
            cd /var/lib/aide
            mv aide.db.new.gz aide.db.gz
        檢測:
            /usr/local/bin/aide –check
        更新數據庫
            aide –update

        a.png

        b.png

        c.png

        e.png

第九章    sudo相關內容

    1、sudo的基礎概念

        <1> sudo能夠授權指定用戶在指定主機上運行某些命令。 如果未授權用戶嘗試使用 sudo,會提示聯系管理員
        <2>sudo可以提供日志,記錄每個用戶使用sudo操作
        <3>sudo為系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機
        <4>sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期為5分鐘的“入場券”
        <5>通過visudo命令編輯配置文件,具有語法檢查功能,用visudo -c 可檢查配置文件語法

    2、sudo命令本身:

        sudo [-u user] COMMAND
            -V 顯示版本信息等配置信息
            -u user 默認為root
            -l,ll 列出用戶在主機上可用的和被禁止的命令
            -v 再延長密碼有效期限5分鐘,更新時間戳
            -k 清除時間戳,下次需要重新輸密碼(當用戶使用sudo時,會要求輸入用戶密碼,用戶密碼默認5分鐘內有效,如果使用sudo -k則可以讓密碼立即失效,下次使用sudo又要使用密碼)            

            -K 與-k類似,還要刪除時間戳文件
            -b 在后臺執行指令
            -p 改變詢問密碼的提示符號
                如 -p ”password on %h for user %p

            sudo –i –u nwc切換身份

    3、sudo的配置文件(/etc/sudoers)

        配置文件: /etc/sudoers, /etc/sudoers.d/
        時間戳文件: /var/db/sudo
        日志文件: /var/log/secure

        <1>配置文件支持使用通配符glob:
            ? :前面的字符或詞可出現一次或無
            * :前面的字符或詞出現零次或多次
            [nwc]:匹配其中一個字符
            [^nwc]:除了這三個字符的其它字符
            \x : 轉義
            [[alpha]] :字母 示例: /bin/ls [[alpha]]*

        <2>配置文件規則有兩類;
            別名定義:不是必須的
            授權規則:必須的

        <3>一個sudo條目:

                who  which_host=(runas)  command

                在命令前可以使用標簽NOPASSWD:就可以讓用戶在使用該命令時不用輸入密碼

            格式說明:
                user: 運行命令者的身份
                host: 通過哪些主機
                (runas):以哪個用戶的身份
                command: 運行哪些命令

 

        <4>別名機制:類似組的概念,組里面多個角色

                who:User_alias

                which_host:Host_alias

                runas:Runas_alias

                command:Cmnd_alias

                別名必須全部而且只能全部使用大寫英文字母的組合

            用戶別名:User_alias 別名 =

                后面可以是:

                    用戶名

                    用戶UID,用#引用

                    組名,用%引用

                    組的GID,用%#引用

                    還可以包含其他已經定義的用戶別名

            主機別名:Host_Alias 別名 =

                后面可以是:

                        主機名

                        IP

                        網絡地址

                        其他已經定義的主機別名

            以哪個身份運行:Run_Alias 別名 =

                后面可以是:

                        用戶名

                        %組名

                        其他已經定義的runas別名

            命令別名:Cnmd_Alias 別名 =

                后面可以是:

                        命令路徑(一般為絕對路徑)

                        目錄(此目錄內的所有命令)

                        其他已定義的命令別名

 

    4、sudo示例:

        例如:以nwc用戶以root身份運行useradd,usermod命令

               先visudo

               nwc ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod

               當nwc用的時候格式為:sudo /usr/sbin/useradd newbee

        例如:nwc ALL=(root)NOPASSWD:/usr/sbin/useradd,/usr/sbin/usermod

               表示nwc在使用useradd和usermod時都不需要輸入密碼

        例如:nwc ALL=(root) NOPASSWD:/usr/sbin/useradd,PASSWD:/usr/sbin/usermod

               表示nwc在使用useradd時不要密碼,usermod要密碼

        例如:

             定義一個用戶組別名

                 User_Alias USERADMIN = nwc,%newbee,%nwc

                 組內包含nwc用戶,newbee組和nwc組內的所有用戶

             定義一個命令組別名

                 Cmnd_Alias ADMINCOMMAND = /usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

                 表示定義useradd、userdel命令,passwd命令后必須跟字符,且不能對root進行passwd命令。

             添加條目:

                 USERADMIN  ALL=(root)  NOPASSWD:ADMINCOMMAND

                 表示USERADMIN別名內的所有用戶,在所有主機上,以root身份,不需要密碼,執行ADMINCOMMAND內的所有命令

        例如:

            nwc ALL=(ALL) ALL
            %wheel ALL=(ALL) ALL

            表示nwc用戶可以在任意主機上,以任意身份運行任意命令,wheel組類的用戶可以在任意主機上,以任意身份運行任意命令?                 例如:
            nwc ALL=(root) /sbin/pidof,/sbin/ifconfig
            %wheel ALL=(ALL) NOPASSWD: ALL

            表示nwc用戶可以在任意主機上以root身份運行/sbin/pidof,/sbin/ifconfig命令

            wheel組類的用戶可以在任意主機上,以任意身份無需密碼運行任意命令

        例如:
            User_Alias NETADMIN=user1,user2
            Cmnd_Alias NETCMD = /usr/sbin/ip
            NETADMIN ALL=( root) NETCMD

            表示定義一個用戶別名NETADMIN,該別名內包含用戶user1,user2

            定義一個命令別名NETCMD,包含命令/usr/sbin/ip

            NETADMIN內的用戶能夠在任意主機上,以root身份,運行NETCMD定義的命令,也就是user1和user2能在任意主機上以root身份運行ip命令

        例如:
            User_Alias SYSADER=nwc,user1,%admins
            User_Alias DISKADER=tom
            Host_Alias SERS=www.nwc.com,10.1.32.0/24
            Runas_Alias OP=root
            Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
            Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
            SYSADER SERS=(OP) SYDCMD,DSKCMD

            表示定義一個用戶別名SYSADER,包含用戶nwc,user1,和admins組內的所有用戶

            定義一個用戶別名DISKADER,包含用戶tom

            定義主機別名SERS包含主機名為www.nwc.com的這臺主機和10.1.32.0/24這個網絡內的所有主機 

            定義一個運行身份的別名OP,包含身份是root

            定義一個命令別名SYDCMD,包含命令/bin/chown,/bin/chmod

            定義一個命令別名DSKCMD,包含命令/sbin/parted,/sbin/fdisk

            定義SYSADER用戶別名的用戶,在SERS定義的主機上,以root身份,運行SYDAMD和DSKCMD定義的命令,也就是nwc、user1和admins組內的所有用戶,能夠在www.nwc.com這臺主機和10.1.32.0/24這個網絡內的所有主機上,以root身份運行/bin/chown,/bin/chmod,/sbin/parted,/sbin/fdisk命令

            

        例如:
            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/userdel

            表示定義一個ADMINUSER的用戶別名,包括adminuser1和adminuser2

            定義一個ADMINCMD命令別名,包括useradd、usermod命令,passwd命令后面跟字母開頭的字符串,但不能執行passwd root,也就是不能對root改密

            定義允許adminuser1和adminuser2用戶能夠在所有主機上,不用輸入密碼執行useradd、usermod、和passwd定義的相關命令,但是需要密碼執行userdel命令

        例如
            Defaults:nwc runas_default=tom
            nwc ALL=(tom,jerry) ALL

            表示授權nwc用戶在所有主機上以tom或Jerry身份,運行所有命令

            上面的Defaults 表示當nwc用sodu執行命令時,如果不用-u指明以誰的身份,則默認以tom的身份執行命令

        例如
            nwc 10.1.32.68,10.1.32.22 = (root)  /usr/sbin/,!/usr/sbin/useradd

            表示授權nwc用戶在10.1.32.68和10.1.32.22主機上以root身份執行/user/sbin/下的所有命令,但是不包括useradd命令

        例如
            nwc ALL=(ALL) /bin/cat /var/log/message*

            表示授權nwc用戶在所有主機上,以任意身份,運行cat /var/log/message*命令

            注意,此種方式是非常危險的,因為用戶可以利用命令 cat /var/log/message  /etc/shadow ….因為*代表任意字符,故后面可以跟上任何文件

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

(2)
M20-1倪文超M20-1倪文超
上一篇 2016-09-23
下一篇 2016-09-23

相關推薦

  • shell腳本2

    使用read命令來接受輸入 使用read來把輸入值分配給一個或多個shell變量 read后面跟變量,回車輸入內容,就可以把輸入的內容賦給變量 -p指定要顯示的提示 -s 靜默輸入,一般用于密碼 輸入的內容不顯示 -n N 指定輸入的字符長度N 當輸入的內容達到了5個字符會直接結束輸入 -d‘字符’ 輸入結束符 把!作為了結束符,在輸入內容時,當輸入!會直接…

    2017-08-11
  • Bob大叔和Jim Coplien對TDD的論戰

    今年春節時,我寫了一篇《TDD并不是看上去的那么美》,在這篇文章中我列舉了一些關于使用TDD的一些難點和對TDD的質疑,后來出現了一些爭論(可參見那篇文章的評論),以及Todd同學的《TDD到底美不美》,還有infoQ中文上的那個幾乎沒有營養離線討論。今天,有網友給我推來一個英文版infoQ的視頻——“Coplien and Martin Debate TD…

    Linux干貨 2016-08-15
  • N26-第二周

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及相關示例演示;   1)alias:命令別名;     # alias ;獲取所有可用別名的定義;     # alias NAME=‘COMMAND’:定義別名;    &nbs…

    Linux干貨 2017-02-11
  • Linux中find常見用法示例

    ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的參數; pathname: find命…

    Linux干貨 2017-04-18
  • 馬哥教育網絡班20期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who root     pts/0        2016-06-23&nb…

    Linux干貨 2016-06-29
  • HA Cluste 的配置:keepalived:vrrp協議 雙主模型

    keepalived:vrrp協議 雙主模型 第一步配置出始環境: 準備兩節點: 主節點:172.18.57.7 long1 備節點:172.18.57.8 long2 (1) 各節點時間必須同步; 同步時間: ~]# yum -y install chrony ~]# vim /etc/chrony.conf ~]# systemctl start chr…

    Linux干貨 2017-05-15

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-26 11:17

    x寫的很好,特別是加密揭解密部分,,對各種加密算法的應用場景解析的特別透徹,通讀全文能,讓人看到很多專業性所在。

欧美性久久久久