银河麒麟v10需通过安全中心应用保护、ld_preload劫持或禁用d-bus剪贴板服务三种方式精准阻断第三方应用剪贴板访问,前提为selinux强制启用且系统支持对应功能。

在银河麒麟V10系统中,第三方应用可能在后台静默读取剪贴板内容,导致身份证号、银行卡号、验证码等敏感信息泄露,必须通过安全中心精准阻断特定应用的剪贴板访问权限,而非依赖系统默认设置或手动关闭全局功能。
确认系统版本与功能就绪
鸿蒙NEXT的剪贴板三级权限机制(允许/使用时允许/禁止)未被移植至麒麟V10,该系统采用的是基于Linux内核层的访问审计+策略拦截模型,需先验证底层能力是否启用。打开终端执行getenforce,若返回Disabled或Permissive,说明SELinux未强制启用,后续策略将无法生效;此时必须先执行sudo setenforce 1并修改/etc/selinux/config中SELINUX=enforcing,否则所有剪贴板拦截规则均无效。
进入“开始菜单→控制面板→安全中心”,检查左侧导航栏是否存在“应用保护”选项卡——若无此选项,说明当前为精简版或工业版系统,不支持图形化剪贴板权限管理,需跳转至终端命令方式操作。
方法一:通过安全中心应用保护模块拦截
该方式适用于已安装GUI应用且其进程名可被安全中心识别的场景,拦截动作作用于用户空间调用层,对未签名或混淆进程可能失效。
第一步:在安全中心左侧点击「应用保护」→「应用程序行为监控」。
第二步:点击右上角「添加规则」,选择「剪贴板访问」类型。
第三步:在规则配置窗口中,点击「浏览应用」,定位到目标程序的可执行文件路径(如/usr/bin/wechat或/opt/tencent/qq/QQ),注意必须选中二进制主程序,而非桌面快捷方式或Shell脚本封装器。
第四步:在「行为响应」下拉菜单中选择「拒绝访问并记录日志」,勾选「启用实时拦截」,点击「确定」保存规则。
【关键前提】目标应用必须以当前登录用户身份运行,若其通过systemd --user服务或独立守护进程启动(如dbus-daemon托管的剪贴板监听器),该规则将无法匹配进程上下文,拦截失败。
方法二:终端注入LD_PRELOAD劫持剪贴板系统调用
当安全中心无法识别目标进程,或需对非GUI命令行工具(如xclip、wl-copy)实施拦截时,此方法直接拦截glibc层的open()、read()等系统调用,绕过所有上层权限框架。
创建拦截共享库:nano ~/block_clipboard.c,写入以下代码:
#define _GNU_SOURCE
#include
#include
#include
static int (*real_open)(const char*, int, ...) = NULL;
int open(const char *pathname, int flags, ...) {
if (real_open == NULL) real_open = dlsym(RTLD_NEXT, "open");
if (strstr(pathname, "/org/freedesktop/portal/clipboard") ||
strstr(pathname, "/com/ubuntu/clipboard")) {
errno = EACCES; return -1;
}
return real_open(pathname, flags);
}
编译为共享对象:gcc -shared -fPIC -o ~/libblock.so ~/block_clipboard.c -ldl。
对目标应用启动时注入:LD_PRELOAD=/home/用户名/libblock.so /usr/bin/xxx,其中xxx为实际程序名。
这一步操作起来很简单,直接把文件拖进去就行。但注意:该方式仅对当前shell会话有效,重启终端后需重新设置环境变量;若要永久生效,需修改该应用的.desktop启动文件,在Exec=行前添加env LD_PRELOAD=/home/用户名/libblock.so。
方法三:禁用D-Bus剪贴板服务绑定
绝大多数麒麟V10上的GUI应用通过D-Bus接口org.freedesktop.portal.Clipboard访问剪贴板,切断该服务的会话总线注册,可实现全系统级阻断,不影响其他D-Bus功能。
执行sudo systemctl --user mask xdg-desktop-portal-gtk.service,该命令将创建符号链接指向/dev/null,彻底禁用GTK应用的剪贴板门户服务。
若目标应用使用Qt框架,则同步执行sudo systemctl --user mask xdg-desktop-portal-kde.service。
重启用户D-Bus会话:systemctl --user restart dbus,再启动目标应用验证——此时复制操作仍可执行,但粘贴将始终返回空内容,且应用日志中会出现Failed to get clipboard portal: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown错误。
该方法不可逆操作,恢复需执行sudo systemctl --user unmask xdg-desktop-portal-gtk.service并重启dbus,【请务必记录原始服务名】,误删其他portal服务将导致截图、录屏、通知等功能异常。











