相关疑难解决方法(0)

如何在没有密码提示的情况下以 root 身份运行特定程序?

我需要在没有密码的情况下以 sudo 的形式运行一些东西,所以我使用visudo并将其添加到我的sudoers文件中:

MYUSERNAME ALL = NOPASSWD: /path/to/my/program
Run Code Online (Sandbox Code Playgroud)

然后我试了一下:

$ sudo /path/to/my/program
[sudo] password for MYUSERNAME: 
Run Code Online (Sandbox Code Playgroud)

为什么它要求输入密码?如何在不要求密码的情况下以非 root 用户身份以 root 身份运行/使用命令?

sudo

205
推荐指数
6
解决办法
45万
查看次数

su 选项 - 以另一个用户身份运行命令

我想知道如何从脚本中以另一个用户身份运行命令。

我将脚本的所有者设置为 root。我还在脚本中运行以下命令以作为 hudson 用户运行命令:

su -c command hudson
Run Code Online (Sandbox Code Playgroud)

这是正确的语法吗?

scripting bash su sudo

99
推荐指数
2
解决办法
32万
查看次数

脚本可以执行但不可读吗?

如果没有读取权限,是否可以执行脚本?在 root 模式下,我制作了一个脚本,我希望其他用户执行此脚本但不读取它。我确实chmod禁止读写但允许执行,但是在用户模式下,我看到消息说:权限被拒绝。

permissions executable shell-script

73
推荐指数
4
解决办法
7万
查看次数

正确使用 setuid 位

我有一个由普通用户运行时需要 root 权限的进程。显然我可以使用“setuid 位”来完成此操作。在 POSIX 系统上执行此操作的正确方法是什么?

另外,如何使用使用解释器(bash、perl、python、php 等)的脚本执行此操作?

scripting setuid

47
推荐指数
2
解决办法
6万
查看次数

以编程方式写入具有 root 权限的文件的最安全方法是什么?

一个巨大的应用程序需要在某个特定时间对需要 root 权限的文件执行少量写入。它不是真正的文件,而是作为文件暴露给 Linux 的硬件接口。

为了避免为整个应用程序授予 root 权限,我编写了一个 bash 脚本来执行关键任务。例如,以下脚本将启用硬件接口的端口 17 作为输出:

echo "17" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio17/direction
Run Code Online (Sandbox Code Playgroud)

但是,由于suid我系统上的 bash 脚本被禁用,我想知道实现这一目标的最佳方法是什么。

  1. 使用此处介绍的一些解决方法

  2. sudo从主应用程序调用脚本,并相应地编辑 sudoers 列表,以避免在调用脚本时需要密码。授予 sudo 权限让我有点不舒服echo

  3. 只需编写一个 C 程序,使用fprintf,并将其设置为 suid root。对字符串和文件名进行硬编码,并确保只有 root 可以编辑它。或者从文本文件中读取字符串,同样确保没有人可以编辑该文件。

  4. 我没有想到的其他一些解决方案比上面介绍的更安全或更简单?

setuid privileges

35
推荐指数
4
解决办法
4006
查看次数

shebang 和路径

为什么shebang需要路径?

错误的

#!ruby
Run Code Online (Sandbox Code Playgroud)

正确的

#!/usr/local/bin/ruby

#!/usr/bin/env ruby
Run Code Online (Sandbox Code Playgroud)

操作系统应该有关于注册命令的路径的信息,为什么它仍然期望它被给出?

scripting path

24
推荐指数
2
解决办法
4326
查看次数

为什么 setuid 不起作用?

我想确保我的程序只能由xyz使用 root 权限的用户运行。为此,我设置了 setuid 位:

chmod u+s program1.sh
ls -l program1.sh
rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh
Run Code Online (Sandbox Code Playgroud)

此外,我将用户添加xyzhouse组中,以便只有xyzroot 用户可以运行 program1.sh。

在 program1.sh 中有

id -u
Run Code Online (Sandbox Code Playgroud)

以便它可以向我显示有效 ID。

program1.sh以 root 身份运行,它显示root. 但是使用该xyz帐户运行时,它显示xyz. 似乎它没有以 root 权限运行。我不知道这里出了什么问题。

linux root setuid chmod privileges

20
推荐指数
1
解决办法
3万
查看次数

setuid 位好像对 bash 没有影响

我进行了一些试验并注意到一些奇怪的事情:在位于 bash 的副本上设置 setuid 位/usr/bin/bash-test似乎没有效果。当我运行一个实例时bash-test,我的主目录没有设置为/root,当我whoami从运行命令时bash-test,我的用户名没有被报告为是root,这表明它bash-test没有以 root 身份运行。但是,如果我将 setuid 位设置为 on whoami,则正如预期的那样,我被报告为任何 shell 中的 root 用户。

我也尝试设置 setuid 位/usr/bin/bash并观察到相同的行为。

当我在其上设置 setuid 位时,为什么 bash 没有以 root 身份运行?selinux 可能与此有关吗?

linux bash setuid

15
推荐指数
1
解决办法
2万
查看次数

文件权限只执行

如何将文件设置为仅对其他用户可执行但不可读写,原因是我正在使用我的用户名执行某些操作,但我不想给出密码。我试过 :

chmod 777 testfile
chmod a=x
chmod ugo+x
Run Code Online (Sandbox Code Playgroud)

以其他用户身份执行时,我仍然获得权限被拒绝。

linux security permissions executable

14
推荐指数
3
解决办法
4万
查看次数

/usr/bin/env 作为shebang - 及其安全含义

我在几个地方看到了使用以下shebang行的建议

#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)

代替

#!/usr/bin/bash
Run Code Online (Sandbox Code Playgroud)

我的下意识反应是,“如果有人用这个可执行文件代替他们自己的 ~/.local/bin怎么办?” 该目录通常设置在系统范围路径之前的用户路径中。我认为这是作为一个安全问题提出的,通常是作为旁注而不是任何值得认真对待的事情,但我想测试这个理论。

为了尝试这个,我做了这样的事情:

echo -e "#!/usr/bin/python\nprint 'Hacked!'" > $HOME/.local/bin/bash
chmod 755 $HOME/.local/bin/bash
PATH=$HOME/.local/bin env bash
Run Code Online (Sandbox Code Playgroud)

这产生

/usr/bin/env: ‘bash’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

为了检查它是否捡到任何东西,我也做了

echo -e "#!/usr/bin/python\nprint 'Hacked!'" > $HOME/.local/bin/perl
chmod 755 $HOME/.local/bin/perl
PATH=$HOME/.local/bin env perl
Run Code Online (Sandbox Code Playgroud)

打印出来,正如我所料,

Hacked!
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么bash找不到替代品,但找到了替代品perl吗?这是某种“安全”措施(从我的角度来看)没有抓住要点吗?

编辑:因为我被提示:我不是问/usr/bin/env bash与使用/bin/bash. 我在问上面提到的问题。

EDIT2:一定是我做错了什么。今天再次尝试(使用显式路径env而不是隐式路径),没有这种“未找到”行为。

security bash environment-variables

14
推荐指数
1
解决办法
3778
查看次数