通过后台 shell 脚本升级权限

通过后台 shell 脚本升级权限

我想写入位于 的(打印机的)设备文件/dev/usb/lp0。该文件由lp用户和组拥有。每当我将打印机设备连接到系统时都会创建此文件。

我尝试将自己添加到该lp组中。但是,当连接打印机时,该lp0文件不会出现。将我自己从群组中删除可以解决此问题。


获得写入权限的一种解决方案是 -

  1. 每当设备连接时进行检测
  2. 触发运行的 shell 脚本sudo chmod 0666 /dev/usb/lp0

这让我得到了答案https://unix.stackexchange.com/a/28711


shell 脚本已成功触发,但未运行sudo command*,因为 shell 脚本不是从终端执行的。我尝试过使用sudogksudo,两者都未能提示我输入密码,即,我无法通过后台shell脚本升级权限

我已经尝试过什么?

  1. setuidUnix 和 Linux @ StackExchange,但这似乎是一个非常糟糕的主意。
  2. echo 'my_insecure_password' | sudo -S command,它不起作用*。

Polkit由于其复杂程度,我没有尝试,这是其他答案中建议的。但我愿意在正确的指导下去做。

答案1

将自己添加到该lp组可能是最好的解决方案。那会不是导致lp0文件不出现。 (理论上,您的系统可能已被配置为lp0在您在组中时不会出现lp,但是 1. 这必须是本地配置,而不是发行版的默认设置;2. 我不这样做看看为什么有人会这样设置。)


以下内容仅供学术兴趣。在您的场景中,您不需要这个。

如果您需要更改设备文件的权限,那么如何在USB设备插件上运行自定义脚本?并不完全是您所需要的——这适用于需要脚本的更复杂的情况。要更改设备文件的 Unix 权限或所有权,请直接在 udev 规则中使用和分配OWNER。也就是说,在 下创建一个文件,但该文件中的行应该包含类似的内容而不是.GROUPMODE/etc/udev/rules.dGROUP="mygroup"RUN="/path/to/script"

如果您想要执行更复杂的操作,例如设置访问控制列表,则需要运行脚本。您不需要升级该脚本中的权限:它已经以 root 身份运行!只需调用您需要以 root 身份运行的程序即可,例如setfacl

答案2

对于这个问题,我不推荐这个解决方案。

您可以编辑/etc/sudoers以配置 sudo 以允许在没有密码的情况下执行脚本。

相关内容