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