Linux麒麟系统(V10)rc.local开机不启动
此现象原因很多,我碰到的是其中一种,分享出来参考一下
ღ( ´・ᴗ・` )
问题:
系统启动后,rc.local文件不自启,导致里面的脚本不执行。
结论:
rc.local 文件不启动的根本原因就是“麒麟安全授权认证”机制开启,而rc.local文件的安全标记为 /etc/rc.local:none:none:unknown,导致无法开机自启。此认证机制默认都是关闭状态。
解决方案:使用“sudo kysec_set -n exectl -v original /etc/rc.local“ //将执行安全标记修改为 original 即可。
分析过程:
使用“systemctl status rc-local.service”可以看到此服务的状态是:
...
Active: failed
...
... rc-local.service: Failed to execute command: Permission denied
... rc-local.service: Failed at step EXEC spawning /ect/rc.local: Permission denied
... rc-local.service: Control process exited, code=exited, status=203/EXEC
... rc-local.service: Failed with result 'exit-code'
... Failed to start /etc/tc.local Compatibility
...
可以看出脚本启动了,但是启动失败了。
使用 "systemctl restart rc-local.service" 重启服务会报错,报错内容:
Warning: The unit file , source configurate file or drop-ins of rc-local.service changed on disk . Run 'systemcrl daemon-reload' ro reload units. Job rc-local.service failed because the control process exited with error code.
See "systemctl status rc-local.service" and "journalctl -xe" for details.
直接使用"/etc/rc.local"执行rc.local文件,偶然发现弹出一个弹窗(正常情况下不会有这个弹窗),弹窗内容为:
...
麒麟安全授权认证(调用者:bash) (作为超级用户)
检测到未认证程序试图执行,是否允许?
程序:rc.local
路径:/etc/rc.local
三个按钮: "禁止" "允许" "本次允许"
...
点击允许后,rc.local里面配置正常执行。再次使用 "systemctl restart rc-local.service" 重启服务无报错。重启机器后,rc.local正常执行。结合服务报错信息"Permission denied"来看大概是因为这个认证程序开启了,导致rc.local没有权限而导致启动失败;
经过查询这个认证机制后发现:.
此时我旁边有几台正常电脑,使用 "kysec_get /etc/rc.local" 可以看到系统上面此认证程序是没有开启的,B上面开启了.
故障机器B上:/etc/rc.local:none:none:verified
正常机器A上:Kysec is Disabled
正常机器C上:/etc/rc.local:none:none:original
KySec有三种安全模式:① 强制模式(Normal):出现违规操作时,不止会审计记录该操作,还会阻止该操作的运行;② 警告模式(Warning):出现违规操作时,会弹出麒麟安全授权认证框进行授权(在上面2023.3.18问题中提到的弹窗);③ 软模式(Softmode):出现违规操作时,只会审计该操作,而不会阻止该操作的运行。
安全标记说明:
(1)文件身份标记(userid),用于对执行文件的用户进行限制;三个标记符号:① secadm 文件属于安全管理员,只能由安全管理执行 ② audadm 文件属于审计管理员,只能由审计管理员执行 ③ 无身份标记,所有用户都能执行
(2)文件保护标记(protect),用于对文件进行保护和检测;三个标记符号:① verify 执行前检查文件是否发生变化,如果发生变化,禁止执行 ② readonly 文件只读 ③ 无文件保护标记。
(3)执行控制标记(exectl),用于对文件的是否可执行进行控制;五个标记符号:① unknown 未知文件标记,该标记不可执行 ② original 系统原始文件标记,该标记可以执行 ③ verified 第三方可执行标记,该标记可执行 ④ kysoft 可信安全脚本标记,该标记可执行 ⑤ trusted 可信文件标记,拥有该标记的程序对文件进行修改时,文件标记不变,该标记可执行。
使用 “kysec_get /etc/rc.local”可以查看安全标记,例如:
/etc/rc.local:none:none:unknown
使用 “getstatus” 查看kysec相关安全状态, 例如:
"""
KySec status: enabled // 表示当前为强制模式
exec control : warning // 表示当前执行控制功能为警告
net control : off // 表示当前网络控制功能关闭
file protect : on // 表示当前文件保护功能为开启 (只有当相应功能的状态为(on)的时候,其所控制的功能配置才能生效)
kmod protect : on // 表示当前内核模块保护功能为开启
three admin : off // 表示当前三权分立状态为关
process protect : off // 表示当前进程保护功能为开启
"""
修改当前Kysec的相关安全状态:
sudo setstatus softmode/normal // 设置kysec安全状态为软/强制模式
sudo setstatus -f exectl off/on // 开启/关闭 执行控制功能
sudo setstatus -f kmod off/on // 开启/关闭 内核模块保护功能
sudo setstatus -f fpro off/on // 开启/关闭 文件保护功能