SSH協議服務器、SUDO用法以及PAM機制

                     SSH協議服務器、SUDO用法以及PAM機制
python

-----------------------------------------------------------------------------------------------------------------------------------------------
linux

ssh:secure shell,protocol,22/tcp,安全的遠程登陸
算法

具體的軟件實現shell

openssh:ssh協議的開源實現數據庫

dropbead:另外一個開源實現apache

SSH協議版本:V一、V2vim

ssh 用戶名@目標主機,不寫用戶名將以root身份登陸windows

    -p port:遠程服務器監聽的端口安全

    -b:指定本機的某ip鏈接目標ipbash

    -v:調試模式,用來檢測鏈接狀況的錯誤

    -x:支持x11轉發

    -t:強制僞tty分配,例如ip1想要鏈接ipn,但內部設置不可直接鏈接,須要從其餘主機鏈接,此時能夠用ssh -t ip1 ssh -t ip2 ssh -t ip3 ... ssh ipn


windows界面運行linux桌面:XManager工具中有一個Xstart,打開後以ssh方式登陸linux便可實現遠程登陸linux桌面


ssh服務基於密鑰key認證登陸

    一、在客戶端生成一對密鑰

        ssh-keygen -t rsa -P PASSWD -f ~/.ssh/FILE 

    二、將客戶端的公鑰拷貝到服務器端

        ssh-copy-id -i FILE.pub USER@ip,在服務器端/root/.ssh/authorized_keys內能夠看到

    三、客戶端向服務器端發一個鏈接請求,信息包括ip、用戶名

    四、服務端獲得客戶端的請求後,會到受權密鑰authorized_keys中查找,若是有響應的ip和用戶名,服務器端會隨機生成一個字符串

    五、服務端將使用客戶端拷貝過來的公鑰進行加密,而後發送給客戶端

    六、獲得服務端發來的信息後,客戶端會使用私鑰進行解密,而後將解密的字符串發送給服務端

    七、服務端接收到客戶端發來的字符串後,跟以前字符串相比,若是一致,就容許免密碼登陸


scp命令

scp IPA:/位置/FILE IPB:/位置/FILE

此命令能夠將本身文件傳遞到其它設備,也可讓兩臺設備間互傳,也能夠從其它設備傳遞到本身主機

選項

    -r:能夠複製目錄

    -p:傳遞時保留權限

    -q:靜默模式

    -P PORT:指定端口

scp命令的複製爲無腦複製粘貼,不檢查文件存在性,所以配合rsync命令更爲得手


rsync命令

基於ssh和rsh服務實現高效率的遠程系統之間複製文件,使用安全的shell鏈接做爲傳輸方式

    rsync -av /etc IP:/位置,複製目錄和目錄下文件

    rsync -av /etc/ IP:/位置,只複製目錄下文件

此命令只複製不一樣文件


sftp命令:交互式文件傳輸工具,用法和傳統的ftp工具類似,利用ssh服務實現安全的文件上傳和下載


pssh工具

pssh是一個python編寫能夠在多臺服務器上執行命令的工具,也能夠實現文件複製

pssh -H 用戶@IP -i 命令

演示舉例

一、經過pssh批量關閉seLinux

    pssh -H root@192.168.1.10 -i "sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config" 批量發送指令

二、pssh -H root@192.168.1.10 -i setenforce 0

三、pssh -H xuewb@192.168.1.10 -i hostname

四、當不支持ssh的key認證時,經過 -A選項,使用密碼認證批量執行指令

五、pssh -H xuewb@192.168.1.10 -A -i hostname

六、將標準錯誤和標準正確重定向都保存至/app目錄下

七、pssh -H 192.168.1.10 -o /app -e /app -i "hostname"


pscp.pssh功能是將本地文件批量複製到遠程主機

選項

    -v顯示覆制過程

    -r遞歸複製目錄

將本地test.sh複製到/app目錄

    pscp.pssh -H 目標IP /本機位置/test.sh /app

    pscp.pssh -h IP列表.txt /本機位置/test.sh /app

將本地多個文件批量複製到/app目錄

    pscp.pssh -H 目標IP /本機位置/test1 /本機位置/test2 /app

將本地目錄批量複製到/app/目錄

    pscp.pssh -H 目標IP -r /本機位置/目錄/ /app/


pslurp功能試講遠程主機的文件批量複製到本地

選項

    -L指定從遠程主機下載到本機的存儲目錄,local是下載到本地後的名稱

    -r遞歸複製目錄

批量下載目標服務器的test文件至/app下,並更名爲file

    pslurp -H 目標IP -L /app /目標位置/testt file


SSH端口轉發

(1)SSH會自動加密和解密全部SSH客戶端和服務端之間的網絡數據,可是SSH還可以將其餘TCP端口的網絡數據經過SSH連接來轉發,而且自動提供了響應的加密及解密服務,這一過程也被叫作「隧道」,這是由於SSH爲其餘TCP鏈接提供了一個安全的通道來進行傳輸而得名,例如Telnet,SMTP,LDAP這些TCP應用均可以從中得益,避免了用戶名、密碼以及隱私信息的銘文傳輸。而與此同時,若是工做環境中的防火牆限制了一些網絡端口的使用,可是容許SSH的鏈接,也可以經過將TCP端口轉發來使用SSH進行通信。

(2)SSH端口轉發可以提供量大功能

(3)加密SSH Client端至SSH Server端之間的通信數據

(4)突破防火牆的限制完成一些沒法創建的TCP鏈接

總而言之就是經過SSH鏈接服務端,會產生一個隧道,這個隧道能夠容許TCP服務經過隧道,忽略防火牆,直接鏈接服務端。像TCP服務沒有隧道是沒法經過防火牆通信鏈接服務端內部的。


本地轉發 

    -L PORT:IP1:IP1PORT -fN IP2:IP2PORT

        PORT:本地的某個未使用的端口

        IP1:若是本地存在多個ip,須要指定哪一個ip去鏈接服務端

        IP1PORT:IP1的端口

        IP2:目標服務端的ip

        IP2PORT:目標服務端的ip端口

選項

    -f 後臺啓用

    -N 不打開遠程shell,處於等待狀態

    -g 啓用網關功能

本地轉發:命令在A設備上輸入,此時B是IP1,C是IP21.png

遠程轉發

    -R PORT:IP1:IP1PORT -fN IP2

        PORT:本地的某個未使用的端口

        IP1:須要讓外部主機到達防火牆內部的ip

        IP1PORT:IP1的端口

        IP2:防火牆外部主機的ip

遠程轉發,命令在B設備輸入,此時C是IP1,A是IP22.png

若是須要實現SSH端口本地轉發或者遠程轉發,先安裝telnet-server,安裝完成後systemctl start telnet.socket,開啓23端口,再telnet下ip,看是否能通,不能通輸入指令放開端口iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 


動態端口轉發

訪問Internet時,能夠將本機的1080端口做爲代理服務器,訪問請求被轉發到sshserver上,由sshserver代替訪問Internet,好比說咱們主機不能直接訪問谷歌,若是買了一臺國外的虛擬機,因爲該虛擬機能夠直接訪問谷歌,所以咱們能夠經過該虛擬機訪問谷歌,該虛擬能夠看做是sshserver,也就是代理

    curl --sock5 IP:PORT WEBSITE,用代理的ip訪問目標網站


X 協議轉發

全部圖形化應用程序都是X客戶程序

可以經過tcp/ip鏈接遠程X服務器

數據沒有加密機,可是它經過ssh鏈接隧道安全進行


ssh服務器

客戶端:ssh,配置文件:/etc/ssh/ssh_config

服務器端:sshd,配置文件:/etc/ssh/sshd_config

經常使用參數,參數更改後輸入指令systemctl restart sshd

    Port:服務器端口,鏈接到互聯網上時,爲了安全將Port 22改成非標準端口

    AddressFamily any:支持ipv4和ipv6地址

    listenaddress IP:將Port的端口號監聽在ip特定的地址上

    Hostkey:公鑰私鑰算法

    LoginGraceTime:登陸後多長時間不輸入密碼將退出

    PermitRootLogin:是否容許root帳戶直接登陸

    StrictModes:嚴格模式,是否檢查必要文件的權限

    MaxAuthTroes:最大嘗試次數,次數是此項值的一半

    MaxSessions:每個會話在網絡鏈接裏打開最大的次數,好比說CRT窗口右鍵單擊克隆窗口,數值是多少就最多克隆幾個會話

    AuthorizedkeyFile:基於key驗證公鑰存放的路徑

    PasswordAuthentication:關閉後遠程沒法經過密碼登陸鏈接,只能基於key驗證登陸

    PubkeyAuthentication:基於key驗證

    其它項Kerberos option、GSSAPI options中也是驗證,用的很少,能夠關閉,加快網絡鏈接

    MaxStarups:默認數值10:30:100,由於ssh服務器做爲遠程管理的,因此該項容許最大鏈接數爲10,10之內時不作任何操做,超過10次將以30%的失敗率干擾鏈接,當鏈接數到達100次時,再次鏈接將所有拒絕

    ClientAliveInterval:客戶端存活間隔,0表示不檢測

    ClientAliveCountmax:客戶端存活檢測次數,配合存活間隔項,當秒數達到次數x存活間隔時間的數值時,將自動斷開鏈接

    PermitEmptyPasswdords:容許無密碼登陸,設置爲no

    Banner:選項後是文本文件,用戶登陸後顯示文本內容

    Allowusers USER1 USER2:添加白名單

    Denyusers  USER1 USER2:添加黑名單

    AllowGroups

    DenyGroups

    注:黑白名單都存在的用戶也沒法登陸

ssh服務優化

    建議使用非默認端口

    禁止使用protocol version 1

    限制可登錄用戶

    設定空閒會話超時時長

    利用防火牆設置ssh訪問測量

    僅監聽特定的ip地址

    基於口令認證時,使用強密碼策略tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 |xargs

    使用基於key的驗證

    禁止使用空密碼登陸

    禁止root用戶直接登陸

    限制ssh的訪問頻度和併發在線數

    常常分析日誌,/var/log/secure,屢次見到Failed password for root from IP port PORT ssh2時,須要引發注意,多是有人在惡意猜root口令,放入防火牆


AIDE

高級***檢測環境,用於檢測所關心文件的特定屬性信息

/etc/aide.conf:定義監控的文件以及文件信息3.png

向下翻4.png5.png

定義完規則,aide --init寫入aide數據庫,若是作比較,cp aide.db.net.gz aide.db.gz,有讀入庫,能夠輸入aide --check作比較


更改身份

    su - USER,隨着用戶切換,shell環境也變

    su USER,用戶切換,但shell環境不變

配置文件/etc/sudoers

時間戳文件/var/db/sudo,sudo後會在該文件夾下生成一個用戶的目錄,這個目錄生成時間的5分鐘之內輸入指令不用從新輸入口令

日誌文件/var/log/secure,記錄了用戶sudo的操做記錄詳細信息

    USER     ALL     =     (ALL)                  CMD

    用戶    哪臺設備    表明誰去執行  /路徑/命令+參數

/etc/sudoers.d/FILE,文件名任意輸入,將受權命令寫入該文件也能夠其做用

visudo -c 檢查/etc/sudoers的錯誤語法

    %GROUP     ALL       =   (ALL)                 CMD

        組          哪臺設備    表明誰去執行  /路徑/命令+參數

%wheel ALL=(ALL) NOPASSWD:ALL,wheel組的用戶執行命令時候能夠不用輸口令,此用法用於編寫腳本受權

注:系統默認若是將普通用戶加入wheel組,該普通用戶將會有和root同樣的權限,所以生產中將配置文件中%wheel ALL=(ALL) ALL註釋掉6.png

配置文件支持通配符寫法,好比說chen ALL=(ALL) /bin/* ,表明容許用戶chen執行全部/bin下面的程序

配置文件規則

    用戶和被表明的用戶能夠是用戶名、#uid、%羣組名、%#羣組id、用戶別名/被表明的用戶別名

    哪臺設備能夠用ip、hostname、network、host_alias

    命令用命令名、路徑、sudoedit、命令別名


sudo別名

別名有四種類型

    User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias

別名格式

    [A-Z]([A-Z][0-9]_)* ,必須是A-Z開頭,後面能夠跟[A-Z]和[0-9]_ 數字 

好比說

    User_Alias NETADMIN= chen1,chen2

    Cmnd_Alias NETCMD = /usr/sbin/ip,/usr/sbin/usermod

    NETADMIN ALL=(root) NETCMD

將內容寫入/etc/sudoers.d/FILE,以後用chen1就可sudo chen1 ip...,chen2能夠sudo usermod...

sudo選項

    -V:顯示版本信息等配置信息

    -u:user

    -l,ll:列出用戶在主機上容許和禁止的指令

    -v:延長密碼有效期限,延長5分鐘

    -k:清除時間戳,下次登陸須要從新輸入口令

    -K:與-k相似,不過還要刪除時間戳文件

    -b:在後臺執行指令

    -p:改變詢問密碼的提示符號


TCP_Wrappers

工做在第四層(傳輸層)的TCP協議

用於對有狀態鏈接的特定服務進行安全檢測並實現訪問控制

以庫文件形式實現

某建材是否接受libwrap的控制取決於發起此進程的程序在編譯時是否針對libwrap進行編譯的

判斷服務程序是否可以由tcp_wrapper進行訪問控制的方法

ldd /位置/程序 | grep libwrap.so

strings 位置/程序 | grep libwrap.so

配置文件:/etc/host.allow、/etc/host.deny

基本語法

    守護進程路徑@主機名:客戶端ip地址列表,好比說拒絕192.168.1.10訪問本機的ssh服務,首先which sshd查看命令路徑,/usr/sbin/sshd,以後再/etc/host.deny裏寫sshd:192.168.1.10,該文件寫入後當即生效

except

    在/etc/host.allow中寫入in.telnetd:172.20. EXCEPT 172.20.112. EXCEPT 172.20.112.224,代表172.20網段可用telnet本主機,除了172.20.112網段的設備,但在這個網段中又除了172.20.112.224的設備,它能夠telnet本主機,最後except看做雙重否認,即確定

配置文件選項

    /etc/host.allow中寫入in.telnetd:172.20. :deny,意思匹配到172.20網段將被拒絕

    /etc/host.deny中寫入in.telnetd:172.20. :allow,意思匹配到172.20網段將被容許

    spawn:當訪問某個服務時候,激活另外一個命令的執行,好比說in.telnet: ALL :spawn echo "hello"

    twist:拒絕訪問,使用指定的操做替換當前服務,標準輸入輸出和錯誤信息發送到客戶端/dev/null,好比說in.telnet: ALL :twist echo "hello",結果是拒絕訪問,並顯示hello


PAM部分重要模塊說明

pam_shell.so:檢查用戶是否是有效的shell登陸

    auth required pam_shell.so 拒毫不是有效shell登陸的用戶

pam_securetty.so:只容許root用戶直接登陸的終端

pam_nologin.so:組織非用戶登陸系統,其做用就是若是建文件/etc/nologin普通用戶將沒法登陸

pam_limits.so:限制用戶使用的資源,是特殊的PAM模塊,配置文件在/etc/security/limits.conf,命令是

ulimit:內部命令,不支持csh,只支持/bin/bash,ulimit -a列出當前資源限制列表1.png

列表中每一項分別對應-c,-d,-e,-f等等,好比說ulimit -c能夠更改core file size這一項,不過這些命令是臨時更改,永久更改在/etc/security/limits.conf或者/etc/security/FILE(任意字符),格式:<domain> <type> <item> <value>

格式說明:

    <domain> 應用於哪些對象

        Username 單個用戶

        @group 組內全部用戶

        * 全部用戶

    <type> 限制的類型

        Soft 軟限制,普通用戶本身能夠修改

        Hard 硬限制,由root用戶設定,且經過kernel強制生效

        - 兩者同時限定

    <item> 限制的資源

        nofile 所可以同時打開的最大文件數量,默認爲1024

        nproc 所可以同時運行的進程的最大數量,默認爲1024

    <value> 指定具體值

舉例:限制用戶最多打開的文件數和運行進程數

    (1)在/etc/pam.d/system-auth中寫入

            session required pam_limits.so

    (2)vim /etc/security/limits.conf

    apache – nofile 10240 用戶apache可打開10240個文件

            student hard nproc 20 用戶student不能運行超過20個進程

相關文章
相關標籤/搜索