【问题标题】:sudo doesn't work, but root user works [closed]sudo 不起作用,但 root 用户可以工作 [关闭]
【发布时间】:2017-06-16 15:53:32
【问题描述】:

我正在配置一个基于 BATMAN 的网格可视化平台,该平台称为 ALFRED(我猜这个双关语是制造商有意的!),在此过程中,需要以 root 用户身份执行几个命令。我可以使用sudo 轻松运行大多数命令,但是当我使用cat 命令时,sudo 似乎没有所需的权限。 例如,为了让 ALFRED 服务器运行,我执行

$ sudo alfred -i br0 -m

它可以正常运行并执行命令。但是当我想使用 ALFRED 写入 UNIX 套接字时,我执行以下命令打算将主机名写入套接字 64

$ sudo cat /etc/hostname | alfred -s 64 

我得到了错误

can't connect to unix socket: Permission denied

但是当我通过su root手动切换到root用户并运行时

cat /etc/hostname | alfred -s 64

命令正确执行,没有给出错误,当我退出 root 用户并以普通用户返回时,我可以通过调用来读取套接字

$ sudo alfred -r 64

这很奇怪。为了让它变得更奇怪,我在一个 shell 脚本中编写了cat /etc/hostname | alfred -s 64 命令并将其命名为alfred_start.sh。现在我可以轻松运行了

$ sudo sh alfred_start.sh

并且没有给出错误。

我找到了解决整个问题的方法,但问题仍然存在,为什么?

是否有与root 相关的不同权限无法通过sudo 访问? 我不相信 BATMAN 或 ALFRED 与整个问题有任何关系,它可能与写入 UNIX 套接字相关的权限有关。我非常感谢您在此问题上的任何帮助。

【问题讨论】:

标签: linux bash shell sockets unix


【解决方案1】:

sudo 是一个正常的命令,它以正常的方式与调用 shell 交互。在这个管道中:

sudo cat /etc/hostname | alfred -s 64

左边的命令是sudo cat /etc/hostname。它以提升的权限运行cat。右边的命令里面没有sudo,所以alfred进程不是sudo-elevated。

sudo 移动到管道的右侧。 (我假设您不需要提升权限即可阅读您的/etc/hostname!)

如果您确实需要sudo 整个管道,则必须告诉 sudo 创建特权 shell,然后执行作为字符串提供的管道,如下所示:

sudo sh -c 'something | something'

其他例子可以在this question找到

【讨论】:

  • 这行得通。现在我运行$ cat /etc/hostname | sudo alfred -s 64,它运行完美。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-10-02
  • 2013-09-21
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 2019-05-30
相关资源
最近更新 更多