标签: sudo

为什么 sudo -E 实际上不保护我的环境?

我正在尝试 sudo 一些位于自定义路径中的二进制文件。sudo虽然我运行时会删除该自定义路径,但sudo -E应该保留我的路径。为什么不起作用?

$ 环境 | egrep ^路径
PATH=/home/codemonkey/.nvm/v0.6.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/gam
es:/usr/游戏

$ sudo 环境 | egrep ^路径
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

$ sudo -E 环境 | egrep ^路径
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

我知道如何解决它,我只想知道为什么sudo -E不起作用

linux debian sudo environment-variables env

5
推荐指数
1
解决办法
4117
查看次数

在 bash 脚本中使用 sudo -i

我想编写一个 bash 脚本来在以普通用户身份登录时在 root 下执行一些任务。有可能有这样的东西吗?

#!/usr/bash

sudo -i

<multiple line perform all my sudo command>
...
...
...
exit

<back to my user command, continue some other task>
Run Code Online (Sandbox Code Playgroud)

当然,我可以在每一行都加上 sudo,但我想知道是否可以执行上述操作?谢谢。

bash sudo

5
推荐指数
1
解决办法
6536
查看次数

`sudo` 的非确定性行为

我对 sudo 有一个相当奇怪的问题。基本上,它进行身份验证,但有时只是不启动提供的命令。例如:

liori@marvin:~$ sudo whoami
root
liori@marvin:~$ sudo whoami
root
liori@marvin:~$ sudo whoami
liori@marvin:~$ sudo whoami
liori@marvin:~$ sudo whoami
liori@marvin:~$ 
Run Code Online (Sandbox Code Playgroud)

我写了一个测试用例来演示这个问题:

liori@marvin:~$ sudo whoami; for i in `seq 100`; do echo -n ':' ; sudo whoami ; done ; echo
root
::::::::::::root
:::::root
:::::root
:::::::::::root
::::::::::root
::::::::::::::::::::::::::::::::root
:::root
::::root
::::root
:::root
:::root
::root
:root
:::::
liori@marvin:~$ 
Run Code Online (Sandbox Code Playgroud)

当然,预期的输出是一系列行,每行都以一个冒号字符开头。我不知道从哪里开始调试这个问题。

对于每次尝试(无论命令是否实际运行),我都会在 syslog 中得到一个条目:

Apr 11 19:47:40 marvin systemd-logind[806]: New session c1079 of user root.
Apr 11 19:47:40 marvin systemd-logind[806]: Removed session c1079. …
Run Code Online (Sandbox Code Playgroud)

debian sudo

5
推荐指数
1
解决办法
112
查看次数

有没有办法根据当前工作目录在 sudo 中允许命令?

我希望 sudo 允许我在当前工作目录为 /tmp 时运行命令。示例用法是从/tmp目录中删除文件,所以我在/tmp(shell的$PWD == /tmp),然后我可以运行,rm -v someuseless.bin(someuseless.bin当然不属于我,所以我无法删除它)。如果不可能(我在 sudo 手册中找不到参考资料),那为什么?也许存在我没有在这里发现的安全违规。谢谢。

sudo

5
推荐指数
1
解决办法
1206
查看次数

如何通过 sudo 对不同用户使用 etckeeper 并在提交消息中使用正确的用户?

我正在一个有几个管理员用户的服务器上工作。它们中的每一个都可以sudo用来进行配置更改。我们正在/etc使用etckeeper保持我们的目录版本控制。

但是,当我或其他管理员调用 时sudo etckeeper commit COMMITMESSAGE,git 使用root用户的名称和电子邮件作为提交消息。git config user.name在这种情况下,在 etc 存储库上的设置不起作用,因为每次etckeeper commit调用时,都将使用相同的数据。

我想要的是实际用户名和电子邮件出现在etckeeper git 存储库中,以便从提交日志中我可以追踪谁做了哪些更改。

任何帮助是极大的赞赏!

ubuntu debian sudo git etckeeper

5
推荐指数
1
解决办法
679
查看次数

保存的 Kitty 密码提取

我有一个 ubuntu 服务器,但忘记了 root 密码。我在任何文档中都找不到通行证(我的错)。现在我有另一个用户在 sudo 列表中,但该用户的密码保存在 kitty 中,我也不记得了,我可以用它登录,但是当我用 sudo 登录并执行一些管理命令时,它需要该用户的密码我看不到它。问题是我怎么能看到保存在隐藏字符中的那个小猫密码??

linux ubuntu sudo

5
推荐指数
2
解决办法
5802
查看次数

避免 Jenkins 错误的最佳实践:sudo: no tty present and no askpass program specified

从 Jenkins 运行任何 sudo 命令时,我收到以下错误:

sudo:不存在 tty 且未指定 askpass 程序

我知道我可以通过NOPASSWD在我的/etc/sudoers文件中添加一个条目来解决这个问题,这将允许用户jenkins在不需要密码的情况下运行命令。我可以添加这样的条目:

%jenkins ALL=(ALL)NOPASSWD:/home/vts_share/test/sudotest.sh
Run Code Online (Sandbox Code Playgroud)

...但这会导致以下问题:如何避免在 sudoers 文件中指定完整路径?

我可以添加这样的条目:

%jenkins ALL=NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

...但这允许用户jenkins避免所有命令的密码提示,这似乎有点不安全。我只是好奇我在这里有什么选择,如果有任何我应该考虑的最佳实践。

linux ubuntu sudo jenkins

5
推荐指数
2
解决办法
3万
查看次数

如何在没有root和重启的情况下修复虚拟机上的sudoers文件

我在重载服务器上破坏了我的 sudoers 文件,并出现语法错误。不幸的是,我丢失了 root 密码。服务器很重要,我想避免重新启动。所以,没有sudo,没有root,没有重启,没有kdesudo 或gksu。服务器是运行在 kvm 上的虚拟机。

你会如何解决这个问题?

virtual-machines sudo

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

nagios nrpe 无法读取输出

我试图用来check_nrpe检查远程服务器,但它不起作用,我无法弄清楚我错过了什么......

# /usr/lib/nagios/plugins/check_nrpe -H XXX -c check_load -a 6,5,4 8,7,6
NRPE: Unable to read output
# 
Run Code Online (Sandbox Code Playgroud)

远程的服务器系统日志消息:

nrpe[18058]: Connection from XX.XX.XX.XX port 16267
nrpe[18058]: Host address is in allowed_hosts
nrpe[18058]: Handling the connection...
nrpe[18058]: Host is asking for command 'check_load' to be run...
nrpe[18058]: Running command: /usr/bin/sudo /usr/lib64/nagios/plugins/check_load -w 6,5,4 -c 8,7,6
nrpe[18058]: Command completed with return code 1 and output: 
nrpe[18058]: Return Code: 1, Output: NRPE: Unable to read output
nrpe[18058]: Connection from XX.XX.XX.XX closed.
Run Code Online (Sandbox Code Playgroud)

为了手动验证,我在远程 shell …

nagios sudo

5
推荐指数
1
解决办法
4万
查看次数

我如何“sudo -i”特定命令

我需要像 sudo -i 一样在没有密码的情况下运行 important_script.sh。

如果我有 sudoers:

apache ALL = (root) NOPASSWD:    /blah/important_script.sh
Run Code Online (Sandbox Code Playgroud)

并运行“sudo /blah/important_script.sh”我可以在没有密码的情况下运行它。

但是,如果我运行“sudo -i /blah/important_script.sh”,我需要输入 apache 的密码。

如果我将 sudoers 中的行更改为:

apache ALL = (root) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)

我可以在没有密码的情况下运行命令“sudo -i /blah/important_script.sh”。

但我希望只能运行 /blah/important_script.sh,而不是所有命令。

那么,我如何设置只有 /blah/important_script.sh 可以在没有密码的情况下使用 sudo -i 运行。

root sudo

5
推荐指数
1
解决办法
4552
查看次数