麒麟OS中为关键分区设置noexec需避开/、/usr等系统路径,仅限/tmp等独立挂载点;先用df和findmnt确认独立性,再remount临时验证,最后通过fstab永久配置defaults,noexec,nosuid,nodev。

麒麟OS中给系统关键分区单独设置挂载选项noexec,必须避开/、/usr、/bin等路径,否则sudo、passwd等命令会异常;只对/tmp、/var/tmp、/dev/shm、Web上传目录、外部设备挂载点等“用户能写但不该执行代码”的独立挂载点操作。
确认目标路径是否为独立挂载点
执行df -h /tmp(将/tmp替换为你的目标路径),观察输出中的“Filesystem”列——若显示的是/dev/sda2、tmpfs或UUID而非根分区设备(如/dev/sda1),说明它是独立挂载点,可安全加noexec;若显示与/相同设备,则不能直接操作,否则会破坏系统。
再运行findmnt -n -o SOURCE,TARGET,FSTYPE,OPTIONS /tmp,确认TARGET列确为/tmp且OPTIONS不含ro(含ro则先处理只读问题)。
临时启用noexec验证兼容性
执行sudo mount -o remount,noexec,nosuid,nodev /tmp,立即生效,无需重启。
手动测试防护效果:echo '#!/bin/sh; id' > /tmp/test.sh && chmod +x /tmp/test.sh && /tmp/test.sh→应返回Permission denied。若报错No such file or directory或直接执行成功,说明该路径不是独立挂载点,或内核不支持该组合选项。
【若业务脚本在/tmp中编译或运行失败,必须立刻回退:sudo mount -o remount,exec,suid,dev /tmp】
永久写入/etc/fstab
第一步:用sudo blkid查目标分区UUID(推荐),例如输出/dev/sdb1: UUID="a1b2c3d4-5678-90ef-ghij-klmnopqrst" TYPE="ext4"。
第二步:编辑fstab:sudo vim /etc/fstab,定位到对应挂载行(如UUID=a1b2c3d4... /tmp ext4 defaults 0 2)。
第三步:将第4列options字段的defaults改为defaults,noexec,nosuid,nodev。注意:defaults默认含exec和suid,不显式覆盖就无效。
第四步:保存退出后,执行sudo mount -a验证语法——无任何输出即成功;若报错,检查逗号是否遗漏、空格是否多余、是否误删了必要字段。

















