如何禁止Linux用戶su切換 /etc/pam.d/su配置限制技巧

禁止linux用戶使用su命令切換用戶的核心方法是修改/etc/pam.d/su的pam配置文件。1. 編輯/etc/pam.d/su文件,添加或修改規則以限制su使用權限;2. 若要禁止所有用戶使用su,可注釋或刪除文件中的auth行;3. 若僅允許特定用戶使用su,可通過pam_listfile.so模塊指定允許列表文件;4. 若要禁止特定用戶使用su,則在配置中使用sense=deny參數指向拒絕列表;5. 修改后測試配置是否生效,可通過受限用戶嘗試su命令、檢查系統日志(如/var/log/auth.log)、使用pamdump命令查看pam配置等方式驗證;6. 若配置錯誤導致無法su到root,可通過sudo、ssh直接登錄root、單用戶模式、live cd/usb、或檢查selinux/apparmor策略進行恢復;7. 恢復默認配置的方法包括查找備份文件、從相同版本系統復制、或根據發行版特性提取默認配置;8. 禁用su后仍可通過sudo、pkexec、ssh、runuser等命令進行權限切換與提升;9. 監控和審計用戶權限變更可通過auditd、syslog、acct工具、文件完整性監控、selinux/apparmor日志、腳本自動化及siem系統實現;10. 做好linux服務器權限管理應遵循最小權限原則、合理使用用戶組、正確設置文件目錄權限、使用acl細化權限控制、限制sudo使用、禁用不必要服務賬戶并定期審查權限。

如何禁止Linux用戶su切換 /etc/pam.d/su配置限制技巧

禁止Linux用戶使用su命令切換用戶,核心在于修改/etc/pam.d/su的PAM(Pluggable Authentication Modules)配置文件。這允許你控制哪些用戶可以執行su,甚至完全禁用su命令。

如何禁止Linux用戶su切換 /etc/pam.d/su配置限制技巧

解決方案:

如何禁止Linux用戶su切換 /etc/pam.d/su配置限制技巧

要禁止特定用戶使用su命令,或者限制只有特定用戶才能使用,你需要編輯/etc/pam.d/su文件。

  1. 編輯/etc/pam.d/su文件

    如何禁止Linux用戶su切換 /etc/pam.d/su配置限制技巧

    使用你喜歡的文本編輯器,以root權限打開/etc/pam.d/su。例如:

    sudo vi /etc/pam.d/su
  2. 添加或修改規則

    在文件中找到類似于auth required pam_wheel.so use_uid這樣的行。如果不存在,可以添加一行。這行通常用于控制只有wheel組的用戶才能使用su。

    • 禁止所有用戶使用su

      最簡單的方法是注釋掉(在行首添加#)或者刪除/etc/pam.d/su中的所有auth行。這樣,即使輸入正確的root密碼,su命令也會失敗。但需要注意,這樣做會影響所有用戶,包括管理員,除非他們通過其他方式獲取root權限(例如,使用sudo)。

    • 僅允許特定用戶使用su

      這需要更精細的配置。你可以使用pam_listfile.so模塊來指定允許或禁止的用戶列表。

      首先,創建一個包含允許用戶的列表文件,例如/etc/security/su.allow,每行一個用戶名:

      root user1 user2

      然后在/etc/pam.d/su中添加或修改以下行:

      auth required pam_listfile.so item=user file=/etc/security/su.allow onerr=succeed auth sufficient pam_unix.so auth required pam_deny.so

      這里的邏輯是:如果用戶在/etc/security/su.allow文件中,pam_listfile.so會成功,跳過后續驗證;否則,pam_deny.so會拒絕認證。onerr=succeed確保即使列表文件不存在或讀取失敗,認證也不會立即失敗,而是繼續嘗試后續的認證方法。

      或者,禁止特定用戶使用su,可以這樣配置:

      auth required pam_listfile.so item=user file=/etc/security/su.deny sense=deny onerr=succeed auth sufficient pam_unix.so auth required pam_deny.so

      這里,sense=deny意味著如果用戶在/etc/security/su.deny文件中,認證將被拒絕。

  3. 保存并關閉文件

    保存對/etc/pam.d/su的更改,并關閉編輯器。

  4. 測試配置

    嘗試使用受影響的用戶賬戶通過su命令切換到root或其他用戶。確保配置按照預期工作。

如何確認/etc/pam.d/su的修改生效?

修改/etc/pam.d/su后,最直接的驗證方法就是嘗試使用su命令切換用戶。

  1. 使用受限用戶嘗試su

    如果你配置了只允許特定用戶使用su,嘗試使用一個不在允許列表中的用戶執行su命令。如果配置正確,你應該會看到類似“su: Authentication failure”或者其他錯誤信息,表明認證失敗。

  2. 檢查系統日志

    PAM相關的認證信息通常會記錄在系統日志中。你可以查看/var/log/auth.log(debian/ubuntu)或/var/log/secure(centos/RHEL)等日志文件,查找與su命令相關的認證嘗試記錄。例如:

    grep "su" /var/log/auth.log

    或者

    grep "su" /var/log/secure

    這些日志可以幫助你確認PAM模塊是否按照預期工作,以及哪些用戶嘗試了su命令,以及認證是否成功。

  3. 使用pamdump命令

    pamdump命令可以顯示指定服務(例如su)的PAM配置。雖然它不能直接告訴你配置是否生效,但可以幫助你確認/etc/pam.d/su文件中的配置是否正確。

    pamdump su

    查看輸出,確認你所做的修改已經正確地反映在PAM配置中。

  4. 重啟sshd服務(如果通過SSH測試)

    如果你的測試涉及到通過SSH連接的用戶,并且你修改了與SSH會話相關的PAM配置,可能需要重啟sshd服務才能使更改生效。

    sudo systemctl restart sshd

    但請注意,這可能會中斷現有的SSH連接,因此請謹慎操作。

  5. 使用su -命令

    su -命令會模擬完全的登錄環境,包括加載用戶的環境變量和啟動文件。與簡單的su命令相比,它可能觸發不同的PAM配置路徑。因此,在測試時,也應該嘗試使用su -命令。

/etc/pam.d/su配置錯誤導致無法su到root怎么辦?

不小心錯誤配置了/etc/pam.d/su,導致無法使用su命令切換到root用戶,這確實是個麻煩的問題。但通常有幾種方法可以解決,具體取決于你的系統配置和錯誤類型。

  1. 使用sudo命令

    如果你的用戶賬戶在sudoers文件中具有root權限,你可以使用sudo命令來執行需要root權限的操作,而無需使用su。例如:

    sudo bash

    或者

    sudo vi /etc/pam.d/su

    這允許你繞過su的PAM配置,直接以root權限執行命令。

  2. 通過SSH以root用戶登錄

    如果允許root用戶通過SSH登錄(通常不建議這樣做,但如果你的系統是這樣配置的),你可以嘗試通過SSH直接以root用戶登錄,然后修復/etc/pam.d/su文件。

    ssh root@your_server_ip

    登錄后,使用文本編輯器修復/etc/pam.d/su文件。

  3. 使用單用戶模式(Single User Mode)

    單用戶模式提供了一個無需認證的root shell。你可以通過以下步驟進入單用戶模式:

    • 重啟系統。
    • 在GRUB啟動菜單中,選擇你的Linux發行版,然后按e鍵編輯啟動選項。
    • 找到以linux開頭的行,在行尾添加single或1,然后按Ctrl+X或F10啟動。
    • 系統將啟動到單用戶模式,你將獲得一個root shell。

    在單用戶模式下,你可以掛載根文件系統為可寫模式(如果默認是只讀的):

    mount -o remount,rw /

    然后,使用文本編輯器修復/etc/pam.d/su文件。

    修復完成后,重啟系統:

    reboot
  4. 使用Live CD/USB

    如果以上方法都不可行,你可以使用Linux Live CD/USB啟動系統。

    • 使用Live CD/USB啟動系統。

    • 掛載包含/etc/pam.d/su文件的文件系統。首先確定你的根分區,例如/dev/sda1。

      sudo fdisk -l

      然后掛載根分區:

      sudo mount /dev/sda1 /mnt
    • 使用文本編輯器修復/mnt/etc/pam.d/su文件。

    • 卸載文件系統:

      sudo umount /mnt
    • 重啟系統。

  5. 檢查SELinux或AppArmor

    在某些系統中,SELinux或AppArmor等安全模塊可能會阻止su命令的正常工作。檢查這些模塊的日志,看看是否有相關的拒絕信息。如果是這種情況,你可能需要調整SELinux或AppArmor的策略。

如何恢復/etc/pam.d/su的默認配置?

恢復/etc/pam.d/su的默認配置取決于你的Linux發行版。不同的發行版可能有不同的默認配置。以下是一些常見發行版的默認配置示例,以及如何找到它們的方法。

通用方法:

  1. 查找備份文件

    在修改/etc/pam.d/su之前,你應該已經創建了備份。檢查是否有類似/etc/pam.d/su.bak或/etc/pam.d/su.old這樣的備份文件。如果有,直接復制回去即可:

    sudo cp /etc/pam.d/su.bak /etc/pam.d/su
  2. 從其他相同版本的系統復制

    如果你有另一臺運行相同Linux發行版和版本的機器,你可以從該機器上復制/etc/pam.d/su文件。

特定發行版方法:

  1. Debian/Ubuntu

    Debian和Ubuntu通常使用pam-auth-update工具來管理PAM配置。你可以嘗試重新運行此工具來恢復默認配置:

    sudo pam-auth-update --force

    這將重新配置所有PAM模塊,包括su。

    或者,你可以查看/usr/share/pam-configs/目錄,找到與su相關的配置文件(如果有的話),并手動恢復/etc/pam.d/su。

  2. CentOS/RHEL/Fedora

    這些發行版通常沒有提供直接恢復單個PAM配置文件的工具。你可以嘗試從安裝介質或軟件包中提取默認的/etc/pam.d/su文件。

    • 從RPM包中提取

      首先,確定哪個RPM包包含/etc/pam.d/su文件。你可以使用rpm -qf命令:

      rpm -qf /etc/pam.d/su

      然后,從RPM包中提取文件:

      rpm2cpio <package_name>.rpm | cpio -idmv ./etc/pam.d/su

      .rpm替換為實際的RPM包文件名。這將在當前目錄下創建一個etc/pam.d/su文件,你可以將其復制到/etc/pam.d/su。

  3. Arch Linux

    Arch Linux通常不提供默認的/etc/pam.d/su文件。用戶需要根據自己的需求手動創建。你可以參考Arch Wiki上的PAM頁面,了解如何配置su。

默認配置示例:

以下是一些常見發行版的/etc/pam.d/su默認配置示例。請注意,這些示例可能因發行版版本而異。

  • Debian/Ubuntu (可能)

    #%PAM-1.0 auth            sufficient      pam_rootok.so # Uncomment the following line to implicitly trust users in the "wheel" group. #auth           sufficient      pam_wheel.so group=wheel auth            include         system-auth account         required        pam_permit.so session         required        pam_unix.so
  • CentOS/RHEL/Fedora (可能)

    #%PAM-1.0 auth            sufficient      pam_rootok.so # Uncomment the following line to implicitly trust members of the wheel group. #auth           sufficient      pam_wheel.so use_uid auth            include         system-auth account         required        pam_unix.so session         required        pam_unix.so session         optional        pam_keyinit.so force revoke

警告:

  • 在恢復默認配置之前,請務必備份當前的/etc/pam.d/su文件,以便在出現問題時可以恢復。
  • 恢復默認配置可能會影響系統的安全性。請仔細評估你的需求,并根據需要進行調整。

禁用su命令后,如何進行用戶切換和權限提升?

即使禁用了su命令,仍然有其他方法可以進行用戶切換和權限提升,這對于系統管理和日常使用至關重要。

  1. 使用sudo命令

    sudo是替代su最常用的方法。它允許授權用戶以其他用戶(通常是root)的身份執行命令。

    • 以root用戶身份執行單個命令

      sudo <command>

      例如,要以root用戶身份編輯/etc/fstab文件,可以執行:

      sudo vi /etc/fstab
    • 以root用戶身份打開一個shell

      sudo bash

      或者

      sudo su -

      這將打開一個具有root權限的shell。

    • 以其他用戶身份執行命令

      sudo -u <username> <command>

      例如,要以www-data用戶身份執行命令,可以執行:

      sudo -u www-data whoami

    要使用sudo,用戶必須在/etc/sudoers文件中具有相應的權限。可以使用visudo命令安全地編輯此文件。

  2. 使用pkexec命令

    pkexec是PolicyKit提供的命令,允許授權用戶以其他用戶身份(通常是root)執行命令,而無需輸入root密碼。它通常用于圖形應用程序,但也可以在命令行中使用。

    pkexec <command>

    例如,要以root用戶身份運行gedit文本編輯器,可以執行:

    pkexec gedit

    pkexec的權限由PolicyKit策略控制。這些策略通常位于/usr/share/polkit-1/actions/和/etc/polkit-1/rules.d/目錄中。

  3. 使用ssh命令

    如果允許root用戶通過SSH登錄,你可以使用ssh命令以root用戶身份登錄到本地或遠程系統。

    ssh root@localhost

    或者,以其他用戶身份登錄:

    ssh <username>@localhost

    然后,可以使用sudo命令提升權限。

  4. 使用runuser命令

    runuser命令用于以其他用戶身份運行命令。它通常與sudo結合使用。

    sudo runuser -l <username> -c <command>

    例如,要以www-data用戶身份運行whoami命令,可以執行:

    sudo runuser -l www-data -c whoami

    -l選項模擬完全的登錄環境,包括加載用戶的環境變量和啟動文件。

  5. 使用machinectl shell命令 (systemd)

    在systemd系統中,可以使用machinectl shell命令進入容器或虛擬機的shell。

    machinectl shell <container_name>

    這將在容器或虛擬機中打開一個shell,你可以使用sudo命令提升權限。

  6. 使用setuid程序

    setuid程序是一種以程序所有者的權限運行的程序,無論執行程序的用戶是誰。這允許普通用戶執行需要root權限的操作。

    • 創建setuid程序

      #include <stdio.h> #include <stdlib.h> #include <unistd.h>  int main() {     setuid(0); // 設置用戶ID為root     system("/usr/bin/some_command"); // 執行需要root權限的命令     return 0; }
    • 編譯setuid程序

      gcc setuid_program.c -o setuid_program
    • 設置setuid權限

      sudo chown root:root setuid_program sudo chmod 4755 setuid_program

    警告:

    setuid程序可能存在安全風險,因為它們允許普通用戶以root權限執行代碼。請謹慎使用,并確保程序經過充分的安全審查。

  7. 使用Capabilities

    Capabilities允許將root權限細分為更小的權限單元,并授予特定程序或用戶這些權限單元。

    • 授予Capabilities

      sudo setcap cap_net_bind_service=+ep /usr/bin/some_program

      這將授予/usr/bin/some_program程序綁定到特權端口(小于1024)的權限。

    • 查看Capabilities

      getcap /usr/bin/some_program

    警告:

    Capabilities也可能存在安全風險。請仔細評估你的需求,并僅授予必要的權限。

如何監控和審計用戶權限變更?

監控和審計用戶權限變更對于維護系統安全至關重要。以下是一些常用的方法和工具。

  1. 使用auditd

    auditd是Linux審計系統的用戶空間組件。它可以記錄系統上發生的各種事件,包括用戶權限變更。

    • 安裝auditd

      sudo apt-get install auditd  # Debian/Ubuntu sudo yum install auditd      # CentOS/RHEL/Fedora
    • 配置auditd

      編輯/etc/audit/audit.rules文件,添加規則來記錄用戶權限變更事件。例如,要記錄對/etc/sudoers文件的所有訪問,可以添加以下規則:

      -w /etc/sudoers -p wa -k sudoers_changes

      -w選項指定要監視的文件或目錄。-p選項指定要監視的權限(w表示寫,a表示屬性)。-k選項指定一個關鍵字,用于在日志中標記事件。

    • 啟動auditd

      sudo systemctl start auditd
    • 查看審計日志

      使用ausearch命令查看審計日志。例如,要查找與sudoers_changes關鍵字相關的事件,可以執行:

      sudo ausearch -k sudoers_changes
    • 使用auditctl命令

      auditctl命令用于動態管理審計規則。例如,要添加一個臨時的審計規則,可以執行:

      sudo auditctl -w /etc/passwd -p wa -k passwd_changes
  2. 使用syslog

    syslog是Linux系統日志的標準。許多應用程序和系統服務都會將日志消息發送到syslog。你可以配置syslog來記錄用戶權限變更事件。

    • 配置syslog

      編輯/etc/syslog.conf或/etc/rsyslog.conf文件,添加規則來將與用戶權限變更相關的日志消息發送到特定的文件。

    • 查看日志文件

      查看配置的日志文件,查找與用戶權限變更相關的消息。

  3. 使用acct工具

    acct工具用于記錄用戶活動,包括登錄、注銷和執行的命令。

    • 安裝acct

      sudo apt-get install acct  # Debian/Ubuntu sudo yum install psacct     # CentOS/RHEL/Fedora
    • 啟動acct

      sudo systemctl start acct
    • 查看用戶活動

      使用lastcomm命令查看用戶執行的命令。

      lastcomm

      使用sa命令查看用戶活動統計信息。

      sa
  4. 監控/etc/passwd、/etc/group、/etc/shadow文件

    這些文件包含用戶賬戶和組的信息。你可以使用文件完整性監控工具(例如AIDE或Tripwire)來監視這些文件的更改。

    • 安裝AIDE

      sudo apt-get install aide  # Debian/Ubuntu sudo yum install aide      # CentOS/RHEL/Fedora
    • 配置AIDE

      編輯/etc/aide.conf文件,指定要監視的文件和目錄。

    • 初始化AIDE數據庫

      sudo aide --init
    • 檢查文件完整性

      sudo aide --check
  5. 使用SELinux或AppArmor

    SELinux和AppArmor是Linux安全模塊,可以用于限制進程的權限。它們也可以記錄安全事件,包括用戶權限變更。

    • 查看SELinux日志

      sudo ausearch -m avc
    • 查看AppArmor日志

      sudo aa-logprof
  6. 使用腳本和自動化工具

    你可以編寫腳本來定期檢查用戶權限,并將結果發送到日志文件或警報系統。例如,你可以編寫一個腳本來檢查/etc/sudoers文件的更改,并將更改發送到電子郵件。

  7. 使用SIEM系統

    安全信息和事件管理(SIEM)系統可以收集和分析來自多個來源的日志數據,包括用戶權限變更事件。SIEM系統可以幫助你識別潛在的安全威脅,并采取相應的措施。

如何做好Linux服務器的權限管理?

做好Linux服務器的權限管理是確保系統安全的關鍵。一個良好的權限管理策略可以防止未經授權的訪問、數據泄露和惡意攻擊。

  1. 最小權限原則

    這是權限管理的核心原則。只授予用戶執行其工作所需的最小權限。避免授予用戶不必要的root權限。

  2. 使用用戶組

    將用戶組織成組,并為組分配權限。這比為單個用戶分配權限更有效率,也更容易管理。

    • 創建用戶組

      sudo groupadd <group_name>
    • 將用戶添加到用戶組

      sudo usermod -a -G <group_name> <username>
    • 更改文件或目錄的組所有權

      sudo chgrp <group_name> <file_or_directory>
  3. 正確設置文件和目錄權限

    使用chmod命令設置文件和目錄的權限。

    • 文件權限

      • r (read): 允許讀取文件內容。
      • w (write): 允許修改文件內容。
      • x (execute): 允許執行文件。
    • 目錄權限

      • r (read): 允許列出目錄內容。
      • w (write): 允許在目錄中創建或刪除文件。
      • x (execute): 允許進入目錄。
    • 使用數字模式設置權限

      sudo chmod 755 <file_or_directory>  # 所有者讀寫執行,組和其他用戶只讀執行 sudo chmod 644 <file>             # 所有者讀寫,組和其他用戶只讀
    • 使用符號模式設置權限

      sudo chmod u+x <file>              # 授予所有者執行權限 sudo chmod g-w <file>              # 移除組的寫權限
  4. 使用ACL(Access Control Lists)

    ACL提供了比基本文件權限更細粒度的控制。它們允許你為特定用戶或組分配特定的權限,即使這些用戶或組不是文件或目錄的所有者。

    • 安裝ACL工具

      sudo apt-get install acl  # Debian/Ubuntu sudo yum install acl      # CentOS/RHEL/Fedora
    • 設置ACL權限

      sudo setfacl -m u:<username>:rwx <file_or_directory>  # 授予特定用戶讀寫執行權限 sudo setfacl -m g:<group_name>:rx <file_or_directory>   # 授予特定組讀執行權限
    • 查看ACL權限

      getfacl <file_or_directory>
  5. 限制sudo的使用

    只允許信任的用戶使用sudo。使用visudo命令編輯/etc/sudoers文件,并仔細配置用戶的sudo權限。

    • 允許特定用戶執行所有命令

      <username> ALL=(ALL:ALL) ALL
    • 允許特定用戶執行特定命令

      <username> ALL=(ALL:ALL) /usr/bin/apt-get update, /usr/bin/apt-get upgrade
    • 要求用戶輸入密碼

      Defaults        passwd_timeout=5
  6. 禁用不必要的服務和賬戶

    禁用所有不需要的服務和賬戶。刪除所有不使用的用戶賬戶。

  7. 定期審查權限

    定期審查用戶權限,確保它們仍然符合最小權限原則。

  8. **使用雙因素認證(2

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享