【问题标题】:Root privileges needed for "systemctl suspend" command“systemctl suspend”命令所需的根权限
【发布时间】:2021-11-25 21:07:33
【问题描述】:

在嵌入式 Linux 设备(带有 iMX7d 处理器的 Colibri 模块)上,我无法以非 root 用户身份运行命令 systemctl suspend 以切换到挂起模式。当我以 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

【问题讨论】:

    标签: linux suspend systemctl


    【解决方案1】:

    要允许其他(非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
    

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

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

    然后保存文件

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

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

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

    重要注意事项:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-01
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 2019-06-18
      • 2011-01-28
      • 2018-06-01
      • 2019-11-23
      相关资源
      最近更新 更多