全部產品
Search
文件中心

Alibaba Cloud Linux:Alibaba Cloud Linux 的 user namespace 安全強化

更新時間:Oct 11, 2024

Linux支援使用者命名空間(user namespace)特性,以實現進程在不同使用者命名空間中擁有不同的使用者ID(user id)與組ID(group id),進而實現許可權隔離。然而,開啟使用者命名空間會增加系統面臨許可權提升攻擊的風險(攻擊者可能通過系統漏洞實現許可權提升,從而獲得特權許可權,逃脫系統的許可權控制)。本文將介紹Alibaba Cloud Linux 2/3系統中使用者命名空間安全強化的相關係統配置。您可以根據實際需求調整這些參數,以滿足特定業務情境的要求。

配置user namespace安全強化

您可以根據實際需求選擇以下方法調整參數值,從而降低風險。

  • 使用user.max_user_namespaces設定在每個層級命名空間下可建立的子命名空間的最大數量。

  • 使用kernel.userns_max_level設定命名空間的最大嵌套深度。

  • 使用kernel.unprivileged_userns_clone設定非特權使用者(沒有CAP_SYS_ADMIN許可權)建立新的命名空間許可權。

user.max_user_namespaces安全強化

說明

該參數配置為0將禁用命名空間特性,從而禁止建立新的命名空間。

  • 查詢每一層級命名空間下可以建立的子命名空間的最大數量。

    • 通過/proc介面查詢。

      cat /proc/sys/user/max_user_namespaces
    • 通過sysctl查詢。

      sysctl -n user.max_user_namespaces
  • 配置控制每一層級命名空間下可以建立的子命名空間的最大數量。

    <namespaces>需替換為所需建立的子命名空間的最大數量,例如關閉命名空間,<namespaces>應為0

    • 通過/proc介面配置。

      sudo sh -c 'echo <namespaces> > /proc/sys/user/max_user_namespaces'
    • 通過sysctl配置。

      sudo sysctl -w user.max_user_namespaces=<namespaces>

kernel.userns_max_level安全強化

限制說明

  • Alibaba Cloud Linux 2(核心4.19.91-27及更高版本)。

  • Alibaba Cloud Linux 3(核心5.10.134-12及更高版本)。

說明

該配置參數的合法值為0-33,參數為0表示關閉命名空間特性。參數預設值為33,與原生核心行為保持一致。

  • 查詢命名空間的最大嵌套深度。

    • 通過/proc介面查詢。

      cat /proc/sys/kernel/userns_max_level
    • 通過sysctl查詢。

      sysctl -n kernel.userns_max_level
  • 配置命名空間的最大嵌套深度。

    <levels>需替換為所需建立的子命名空間的最大數量,例如關閉命名空間,<levels>應為0

    • 通過/proc介面配置。

      sudo sh -c 'echo <levels> > /proc/sys/kernel/userns_max_level'
    • 通過sysctl配置。

      sudo sysctl -w kernel.userns_max_level=<levels>

kernel.unprivileged_userns_clone安全強化

限制說明

  • Alibaba Cloud Linux 2(核心4.19.91-27及更高版本)。

  • Alibaba Cloud Linux 3(核心5.10.134-12及更高版本)。

說明

允許非特權使用者建立新的命名空間往往會增大系統面臨許可權提升攻擊的風險。

  • 參數為1:表示非特權使用者(沒有CAP_SYS_ADMIN許可權)能夠建立新的命名空間,與原生核心行為保持一致。

  • 參數為0:表示非特權使用者(沒有CAP_SYS_ADMIN許可權)無法建立新的命名空間,此時只有特權使用者(擁有CAP_SYS_ADMIN許可權)才能建立新的命名空間。

  • 查詢非特權使用者(沒有CAP_SYS_ADMIN許可權)是否能建立新的命名空間。

    • 通過/proc介面查詢。

      cat /proc/sys/kernel/unprivileged_userns_clone
    • 通過sysctl查詢。

      sysctl -n kernel.unprivileged_userns_clone
  • 控制非特權使用者(沒有CAP_SYS_ADMIN許可權)是否能建立新的命名空間。

    • 通過/proc介面配置。

      echo 0 > /proc/sys/kernel/unprivileged_userns_clone
    • 通過sysctl配置。

      sysctl -w kernel.unprivileged_userns_clone=0