linux - “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
解决方案
要允许其他(非 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.sh
root
当您想以 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
,然后使用任意命令创建具有相同名称的新文件。
推荐阅读
- c# - _AppDomainPtr Load_3 方法示例?
- voip - Freeswitch 1.8 和tone_stream 的播放
- python - 如何计算 DecisionTreeClassifier 的 0-1 确定性分数?
- javascript - 如何防止javascript array.push中的重复项
- java - JsonSerialize / JsonDeserialize 在 Apache Tomcat (TomEE) 中不起作用
- java - Android中图像缩放动画后如何保持质量?
- c# - 如何自动为生成的实体添加数据注释?
- angular - 如何使用 Effects 在 POST 之前或 GET 请求之后构造/操作数据
- php - CakePHP 3.6:设置数据库会话以在 8 小时不活动后注销用户
- c# - 如何使用 Xamarin.Android 在另一个应用程序中启动特定页面/功能?