我正在尝试 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不起作用
我想编写一个 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,但我想知道是否可以执行上述操作?谢谢。
我对 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) 我希望 sudo 允许我在当前工作目录为 /tmp 时运行命令。示例用法是从/tmp目录中删除文件,所以我在/tmp(shell的$PWD == /tmp),然后我可以运行,rm -v someuseless.bin(someuseless.bin当然不属于我,所以我无法删除它)。如果不可能(我在 sudo 手册中找不到参考资料),那为什么?也许存在我没有在这里发现的安全违规。谢谢。
我正在一个有几个管理员用户的服务器上工作。它们中的每一个都可以sudo用来进行配置更改。我们正在/etc使用etckeeper保持我们的目录版本控制。
但是,当我或其他管理员调用 时sudo etckeeper commit COMMITMESSAGE,git 使用root用户的名称和电子邮件作为提交消息。git config user.name在这种情况下,在 etc 存储库上的设置不起作用,因为每次etckeeper commit调用时,都将使用相同的数据。
我想要的是实际用户名和电子邮件出现在etckeeper git 存储库中,以便从提交日志中我可以追踪谁做了哪些更改。
任何帮助是极大的赞赏!
我有一个 ubuntu 服务器,但忘记了 root 密码。我在任何文档中都找不到通行证(我的错)。现在我有另一个用户在 sudo 列表中,但该用户的密码保存在 kitty 中,我也不记得了,我可以用它登录,但是当我用 sudo 登录并执行一些管理命令时,它需要该用户的密码我看不到它。问题是我怎么能看到保存在隐藏字符中的那个小猫密码??
从 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避免所有命令的密码提示,这似乎有点不安全。我只是好奇我在这里有什么选择,如果有任何我应该考虑的最佳实践。
我在重载服务器上破坏了我的 sudoers 文件,并出现语法错误。不幸的是,我丢失了 root 密码。服务器很重要,我想避免重新启动。所以,没有sudo,没有root,没有重启,没有kdesudo 或gksu。服务器是运行在 kvm 上的虚拟机。
你会如何解决这个问题?
我试图用来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 …
我需要像 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 运行。