首页 > 解决方案 > “systemctl suspend”命令所需的根权限

问题描述

在嵌入式 Linux 设备(带有 iMX7d 处理器的 Colibri 模块)上,我无法以systemctl suspend非 root 用户身份运行命令以切换到挂起模式。当我以 root 用户身份登录时,执行命令并且系统切换到挂起模式。相同的命令以非 root 用户身份在 Ubuntu PC 系统上运行。

我也想在没有 root 权限的嵌入式 Linux 设备上进入挂起模式。任何人都可以帮助我或告诉我如何实现这一目标的方向吗?任何帮助将不胜感激。

这是嵌入式设备的 Linux 内核版本:

$ uname -r
5.4.91-5.2.0-devel+git.c59b3c2da1e9

这是systemctl版本的版本:

$ systemctl --version
systemd 244 (244.5+)
+PAM -AUDIT -SELINUX +IMA -APPARMOR -SMACK +SYSVINIT +UTMP -LIBCRYPTSETUP -GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID -ELFUTILS +KMOD -IDN2 -IDN -PCRE2 default-hierarchy=hybrid

标签: linuxsuspendsystemctl

解决方案


要允许其他(非 root)用户仅运行 root 命令,您可以使用 sudo https://linux.die.net/man/8/sudo

假设您需要能够挂起的非 root 用户被调用:user1

/root/suspend.sh在包含的文件中创建文件systemctl suspend,并确保它的模式0700由 拥有root:root,例如以 root 身份运行:

echo 'systemctl suspend' > /root/suspend.sh
chmod 0700 /root/suspend.sh
chown root:root /root/suspend.sh

然后visudo以root身份运行,然后添加以下行:

user1 ALL=(root) NOPASSWD: /root/suspend.sh

然后保存文件

这意味着可以以用户身份user1运行脚本,而无需询问其(用户 1 的)密码/root/suspend.shroot

当您想以 user1 身份挂起时,请运行:sudo /root/suspend.sh

使用此解决方案,user1 可以sudo /root/suspend.sh以 root 身份运行,但不能以 root 身份运行任意命令(除非您将用户添加到 sudo 组)

重要考虑:

您必须确保/root/suspend.sh只能由 root 写入(并且它包含的目录/root/也只能由 root 写入)

如果任何非 root 用户可以写入/root/suspend.sh,那么当 user1 运行该文件时,它将在那里执行任意命令。

如果任何非 root 用户可以写入目录/root/,任何用户也可以删除/删除/root/suspend.sh,然后使用任意命令创建具有相同名称的新文件。


推荐阅读