天天看點

SSH協定伺服器、SUDO用法以及PAM機制

                     SSH協定伺服器、SUDO用法以及PAM機制

-----------------------------------------------------------------------------------------------------------------------------------------------

ssh:secure shell,protocol,22/tcp,安全的遠端登入

具體的軟體實作

openssh:ssh協定的開源實作

dropbead:另一個開源實作

SSH協定版本:V1、V2

ssh 使用者名@目标主機,不寫使用者名将以root身份登入

    -p port:遠端伺服器監聽的端口

    -b:指定本機的某ip連接配接目标ip

    -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認證登入

    1、在用戶端生成一對密鑰

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

    2、将用戶端的公鑰拷貝到伺服器端

        ssh-copy-id -i FILE.pub USER@ip,在伺服器端/root/.ssh/authorized_keys内可以看到

    3、用戶端向伺服器端發一個連接配接請求,資訊包括ip、使用者名

    4、服務端得到用戶端的請求後,會到授權密鑰authorized_keys中查找,如果有響應的ip和使用者名,伺服器端會随機生成一個字元串

    5、服務端将使用用戶端拷貝過來的公鑰進行加密,然後發送給用戶端

    6、得到服務端發來的資訊後,用戶端會使用私鑰進行解密,然後将解密的字元串發送給服務端

    7、服務端接收到用戶端發來的字元串後,跟之前字元串相比,如果一緻,就允許免密碼登入

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 指令

示範舉例

1、通過pssh批量關閉seLinux

    pssh -H [email protected] -i "sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config" 批量發送指令

2、pssh -H [email protected] -i setenforce 0

3、pssh -H [email protected] -i hostname

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

5、pssh -H [email protected] -A -i hostname

6、将标準錯誤和标準正确重定向都儲存至/app目錄下

7、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是下載下傳到本地後的名稱

批量下載下傳目标伺服器的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是IP2

SSH協定伺服器、SUDO用法以及PAM機制

遠端轉發

    -R PORT:IP1:IP1PORT -fN IP2

        IP1:需要讓外部主機到達防火牆内部的ip

        IP2:防火牆外部主機的ip

遠端轉發,指令在B裝置輸入,此時C是IP1,A是IP2

SSH協定伺服器、SUDO用法以及PAM機制

如果需要實作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:定義監控的檔案以及檔案資訊

SSH協定伺服器、SUDO用法以及PAM機制

向下翻

SSH協定伺服器、SUDO用法以及PAM機制
SSH協定伺服器、SUDO用法以及PAM機制

定義完規則,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注釋掉

SSH協定伺服器、SUDO用法以及PAM機制

配置檔案支援通配符寫法,比如說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列出目前資源限制清單

SSH協定伺服器、SUDO用法以及PAM機制

清單中每一項分别對應-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個程序

繼續閱讀