Ste*_*ett 20 security sudo path
在经历了令人沮丧的头砖墙接触之后,我发现了这一点:
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/steve/bin
$ sudo bash
# echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)
但
$ sudo bash -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin
$ sudo bash -Ec 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
我从另一篇文章中收集到sudo路径是从中读取的/etc/sudoers- 但为什么呢?设置是否$PATH在/root/.profile任何意义,或者是只是上面的混乱配方(即产卵实际外壳导致不同$PATH的是,在不经意中使用sudo的命令......)?
我在 RHEL 6.4 上使用 bash。
slm*_*slm 16
sudo当您运行其中几个命令时,您会注意到内置保护。这些保护措施正在做很多事情,例如强制执行安全的$PATH.
从/etc/sudoers文件:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
这是运行sudo -c ....命令时显示的内容。您可以通过-E切换到来禁用此行为sudo。
注意:对于某些设置,-E开关将不起作用。要“解决方法”,您可以使用sudo env "PATH=$PATH" bash. 这也将把你的电流$PATH传送到你的sudo环境中。
当您运行此命令时:
$ sudo bash
Run Code Online (Sandbox Code Playgroud)
您运行的是交互式bashshell 与登录bashshell。这与bash它的配置文件的来源有关。
bash或bash -i,来源$HOME/.bashrcbash -l,来源$HOME/.bash_profile-E呢?TylerRick 对这个 SO 问题的回答(sudo 更改 PATH - 为什么?)涵盖了很多原因。主要是它在sudo编译时通常是硬编码的,就像 Ubuntu 一样,导致这些开关无用。Launchpad 中长期以来一直存在与这些相关的未决问题,但它们从未得到修复,这让我们意识到 Canonical 认为最好将此行为保留为默认设置。
当规则sudoers授权用户运行特定命令时wibble,通常需要设置PATH为安全值:仅包含用户无法植入自己的程序的目录的值。如果wibble调用的外部命令foo,而PATH不是重置,则用户可以把~/bin在他的前面PATH,链接/bin/sh到~/bin/foo,然后运行sudo wibble调用~/bin/foo它可以让他类型的任意shell命令。
因此,重置 PATH 是一个安全的默认设置。虽然并非在所有情况下都需要,但将其设为默认设置更容易、更安全。
当规则sudoers授权用户运行任意命令时,重置 PATH 没有直接的安全优势。有一个间接的好处,即用户可能不小心设置了包含潜在有害程序的 PATH,而重置 PATH 可以避免这些程序被意外调用的风险。还有一个功能上的优势:通常需要拥有/usr/local/sbin,/usr/sbin并且/sbin在以 root 身份运行命令时,而不是以普通用户身份运行命令时。
如果您不希望在运行时重置路径,请将您sudo自己添加到豁免组中sudoers:
Defaults exempt_group+=stevebennet
Run Code Online (Sandbox Code Playgroud)
如果您运行登录 shell(sudo -I或sudo bash -l其他方法),该 shell 通常会读取.profile目标用户的主目录,并且该文件可能会更改 PATH。
| 归档时间: |
|
| 查看次数: |
19910 次 |
| 最近记录: |