麒麟OS可通过UKUI桌面白名单、KYSEC执行控制模块和PAM应用拦截三层机制限制用户仅运行指定程序:UKUI层禁用未授权.desktop文件可见性与执行权;KYSEC对脚本/程序打标授信;PAM在会话级拦截非白名单进程启动。

在麒麟OS中限制用户仅能运行指定应用程序,防止未经授权的程序启动或执行,需通过系统级白名单机制实现应用行为管控。不同层级的白名单策略作用范围和生效时机各不相同,必须根据实际管控强度需求选择对应方法。
启用UKUI桌面环境应用白名单
该方法从图形界面层阻断未授权程序调用,仅保留预设安全应用的.desktop文件入口,适用于教学终端、公共办公机等需严格控制启动器可见性的场景。
1、以root身份切换至目标用户(如childuser)并首次登录一次,确保其dconf用户数据库已生成:sudo -u childuser dbus-run-session gsettings get org.ukui.menus applications;若报错“no such schema”,说明数据库尚未初始化,需手动登录触发创建。
2、执行命令设置允许启动的应用列表:sudo -u childuser dbus-run-session gsettings set org.ukui.menus applications "['org.gnome.Nautilus.desktop', 'org.gnome.TextEditor.desktop']";【注意:此处必须使用单引号包裹每个.desktop文件名,且整个数组用双引号包裹,否则gsettings会解析失败】
3、批量禁用系统级所有.desktop文件的执行权限:sudo find /usr/share/applications/ -name "*.desktop" -exec sudo chmod 600 {} \;;这一步会让所有未显式授权的应用图标在启动器中变灰不可点击。
4、对高风险应用(如Firefox、Chrome)单独移除执行位并重命名其.desktop文件:sudo chmod -x /usr/bin/firefox && sudo mv /usr/share/applications/firefox.desktop /usr/share/applications/firefox.desktop.disabled;仅靠gsettings白名单无法阻止用户直接双击.desktop文件启动,必须同步破坏其可执行性。
使用KYSEC执行控制模块添加脚本与程序白名单
KYSEC是麒麟OS内建的安全子系统,exectl标签用于标记可信可执行文件。一旦授信,系统将不再弹出“是否允许执行”提示,适用于运维脚本、定制工具等自动化场景。
方法一:添加单个脚本白名单
以root或具备kysec_set权限的用户执行:kysec_set -n exectl -v verified /path/to/script.sh;路径必须为绝对路径,相对路径无效。
方法二:为整个目录递归添加白名单kysec_set -r -n exectl -v verified /opt/trusted-tools/;-r参数仅作用于目录本身及其下所有文件,不包含子目录中的新创建文件,需定期重新执行。
方法三:为已安装软件包全部文件统一授信kysec_set -n exectl -v verified --package wps-office;该命令会扫描wps-office包注册的所有文件路径并批量打标,比逐个添加更高效。
验证白名单状态:kysec_get -n exectl /path/to/script.sh;输出中label_value字段必须为verified,否则执行时仍会拦截。
配置PAM应用启动拦截策略
利用Linux PAM的exec模块,在用户会话初始化阶段检查待执行程序路径,若不在白名单内则直接拒绝fork/exec调用。该策略作用于所有shell及GUI子进程,具备最强拦截能力,但配置错误可能导致用户无法登录。
第一步:编辑PAM会话配置文件sudo nano /etc/pam.d/common-session;务必使用nano或vim等终端编辑器,图形化文本编辑器可能因权限问题无法保存。
第二步:在文件末尾添加以下行session required pam_exec.so /usr/local/bin/check_app_whitelist.sh;该脚本必须存在且具备可执行权限(chmod +x),否则PAM加载失败会导致会话中断。
第三步:创建校验脚本sudo nano /usr/local/bin/check_app_whitelist.sh,写入内容:
#!/bin/bash<br>
WHITELIST="/usr/bin/nautilus /usr/bin/text-editor /usr/bin/wps"<br>
if echo "$WHITELIST" | grep -qw "$1"; then<br>
exit 0<br>
else<br>
exit 1<br>
fi;【脚本中$1代表被调用程序的绝对路径,必须与WHITELIST中列出的路径完全一致,包括空格和符号】
第四步:重启用户会话或重新登录使策略生效;此步骤不可跳过,PAM规则仅在新建会话时加载。

















