当前位置:首页>Linux>麒麟 Linux 文件只读,chmod 777 也没用?谈谈麒麟 KYSEC安全机制

麒麟 Linux 文件只读,chmod 777 也没用?谈谈麒麟 KYSEC安全机制

  • 2026-09-08 18:42:45
麒麟 Linux 文件只读,chmod 777 也没用?谈谈麒麟 KYSEC安全机制

最近要把一堆windows上的文件(包括word,ppt等其他的)迁移到麒麟上,诡异的是文件迁移过去后,所有文件都变成只读的了,WPS 顶部弹出一行灰字:「文件已以只读方式打开」。文件另存一份才能变成可读写。

看了看文件属性,权限是 644,属主是自己,还不放心,敲了一行 chmod 777,刷新,打开

——还是只读。重启也没用。百度了半天,要么说是文件被锁,要么让你重装 WPS。

问了联想服务器客服妹妹,给的方法也不得要领。后来和大模型聊了好多轮,才找到问题所在。原来是麒麟权限系统——KYSEC 安全模块在捣鬼。

本文把这件事说清楚:是什么、为什么、怎么查、怎么改。


chmod只是文件安全的第一道门

首先搞清楚 Linux 里权限的层次。

平时用的 chmod、chown,是 Linux 的自主访问控制(DAC),逻辑很简单:谁是文件的主人,主人说了算。你是文件属主,你有写权限,你就能写。

但麒麟 V10 在这之上叠加了第二套机制:KYSEC(Kylin Security Enhanced),底层基于 Linux 内核的 SMACK 框架(Simplified Mandatory Access Control Kernel)。

这套机制不看你是不是文件主人,它只看标签。

每个文件都有一个安全标签(Security Label),每个进程也有一个安全标签。当一个进程要写入一个文件时,内核会拦下来,检查:「这个进程的标签,有没有权限写这个文件的标签?」

如果没有——不管你 chmod 得多宽松,一律拒绝写入。应用程序感知到写不进去,就把文件标记为只读。

用一个生活比喻来说:

chmod 是「门锁」,钥匙在你手里,你能开门。KYSEC 是「门禁系统」,就算你有钥匙,没有刷对卡,门禁不放行,你还是进不去。


哪些情况会触发这个问题

主要有以下几种情况:

场景 1:从 U 盘或 Windows 共享盘拷过来的文件

这是最常见的情况。Windows 的文件系统不认识 SMACK 标签,文件拷过来要么没有标签,要么标签类型不对,KYSEC 不知道该用什么策略处理,就走保守路线——限制写入。

场景 2:用 root 身份创建的文件

有时候为了省事,用 sudo 建了一个文件,或者脚本里用 root 创建了文件。Root 进程的安全标签和普通用户进程的不同,文件继承了 root 的标签,普通用户的 WPS 或编辑器就写不进去。

场景 3:从网上下载的文件

浏览器下载的文件,安全上下文可能和你的工作目录不一致,打开时触发限制。

场景 4:从其他 Linux 发行版复制过来的文件

Ubuntu、CentOS 这些发行版要么不用 SMACK,要么标签体系不同。文件移过来,标签自然对不上。

场景 5:WPS 保存时生成了标签混乱的临时文件

WPS 某些版本在 KYSEC 严格模式下保存文件时,会先写临时文件再替换,这个过程中标签可能出问题,下次打开就变成只读了。


怎么查:3 个命令确认问题根源

遇到只读问题,先跑这三个命令,确认是不是 KYSEC 在搞鬼。

第一步:查文件的安全标签

getfattr -n security.SMACK64 你的文件名

如果输出为空,或者显示的标签你看不懂,大概率就是这个原因。

注意:getfattr 来自 attr 软件包,如果提示命令不存在,先安装:

sudo apt install attr

第二步:查当前进程的安全标签

cat /proc/self/attr/current

把这个输出和文件的标签对比。两者差异很大,说明不在同一个访问域。

第三步:看内核有没有 SMACK 拦截记录

dmesg | grep -i smack

如果看到带 smack denied 字样的日志,恭喜,确诊了——就是 KYSEC 在拦。


怎么修:从临时解决到一劳永逸

根据你的场景,选对应的方案。

方案 A:快速修复单个文件

把文件的 SMACK 标签改成 _(下划线)。这个特殊标签在 SMACK 里叫「地板标签」(Floor Label),意思是:所有进程都可以访问带这个标签的文件。

# 方法一:用 setfattrsetfattr -n security.SMACK64 -v "_" 你的文件名# 方法二:如果系统有 chsmack 工具chsmack -a "_" 你的文件名

改完之后不需要重启,重新用 WPS 打开文件,就能正常编辑了。

方案 B:批量修复一个目录下的所有文件

find /你的目录路径 -type f -exec setfattr -n security.SMACK64 -v "_" {}  \;

比如你的工作文档都放在 ~/Documents,就把路径换成 ~/Documents,一次全部修复。

实际排查时,不要一上来就怀疑 KYSEC。建议按照以下顺序检查:

  • • ls -l 查看文件属主和权限;
  • • mount 查看文件系统是否只读挂载;
  • • lsattr 查看是否存在不可变(immutable)属性;
  • • 确认磁盘空间是否已满;
  • • 最后再检查 KYSEC/SMACK 标签。

预防:3 个习惯让你以后不再踩这个坑

知道原理之后,预防就很简单了:

习惯 1:外部文件拷进来先检查标签

拿到 U 盘文件或者下载的文档,先跑一下 getfattr,确认有没有正常的 SMACK 标签,有问题及时处理,不要等打开的时候才发现。

习惯 2:重要工作目录统一设好标签

比如 ~/Documents 这种常用目录,直接批量跑一次方案 B,把所有文件设成 _ 标签,以后拷进来的文件在这个目录下也会继承正确的属性(具体依赖目录的 SMACK 配置)。

习惯 3:不要用 root 在用户目录里建文件

这个是最容易忽略的。用 sudo vim、sudo cp 在自己的 home 目录创建文件,文件的安全上下文会继承 root 的标签,普通用户进程写不进去。改用普通用户身份操作,或者创建后立刻修标签。


小结

麒麟 KYSEC 不是 bug,它是为了满足政务和信创安全合规要求专门设计的,尤其在涉密或敏感级别的系统部署中,SMACK 强制访问控制是重要的防线。

理解它,你就不会在 chmod 777 上花冤枉时间了。

觉得有用的话,点个在看,让更多用遇到问题的人可以看到。

最新文章

随机文章