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