我正在我的一些 Linux 服务器上设置 Nagios,但遇到了一些问题。该check_ide_smart插件需要对系统的 root 访问权限才能运行。要运行它,我使用该check_by_ssh插件通过 ssh 进入远程主机上的 nagios 帐户,然后check_ide_smart使用 sudo运行。
我最初添加了以下几行/etc/sudoers以允许程序工作:
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart
Run Code Online (Sandbox Code Playgroud)
虽然这在本地运行时效果很好,但当它从 Nagios 运行时我遇到了一个问题:没有生成 TTY,这阻止了插件工作。
我在 sudo 的手册页中找到了 -s 选项,它生成一个 shell 并在那里执行程序。当我尝试使用 时sudo -s,我遇到了权限问题,因为 -s 显然将命令更改为/bin/bash -c /usr/lib/nagios/plugins/check_ide_smart,这是 sudoers 文件所不允许的。我尝试更改 sudoers 文件以使用该命令,但这不起作用,并且使用引号是语法错误。
我最终通过在以下行中使用它来使其工作/etc/sudoers:
nagios ALL=/bin/bash
Run Code Online (Sandbox Code Playgroud)
这对我来说真的是错误的,因为我允许 nagios 用户生成一个 root shell,他们可以用它做任何事情。
在这一点上,我认为也许,通过将命令放在 nagios 用户具有只读权限的 shell 脚本中会起作用,所以我创建了一个 shell 脚本:
#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@
Run Code Online (Sandbox Code Playgroud)
不幸的是,我永远无法获得传递的参数 ( 编辑:我需要引用$@) 以正确使用插件,所以我不知道这是否可行。$@它才能工作。感谢@derobert 和@pjz。我仍然不知道它是否会起作用,因为我使用@Mike …
是否可以编辑 sudoers 文件,以便用户可以将 sudo 用于除指定命令之外的任何命令?我倒是真的,我相信,可以设置 sudoers 文件,以便用户只能执行给定的命令列表。
编辑:我真正想要取消的命令是暂停和重启......这让我认为有特殊的系统调用暂停和重启。你能从用户那里接听系统调用吗?如果不是,是不是因为unix权限系统对系统调用进行了抽象而忽略了这一点?
我需要在配置文件(例如/etc/resolv.conf)中添加一行。如果我使用
sudo echo "nameserver 192.168.1.6" >> /etc/resolv.conf
我收到错误消息访问被拒绝。问题是 bash 从我的帐户写入文件,而不是从 root 帐户写入文件。
有什么办法让它工作吗?
我知道有一个“解决方案”可以将我的命令写入文件并将它们作为批处理运行,但它非常不舒服:-(
我正在设置一个服务器,其他人可以通过 ssh 对其进行 sudo 访问。他们可以安装东西并进行他们认为合适的更改,但是我仍然需要管理服务器、安装补丁和软件更新等。
我想知道我是否保留了 root 密码,以便我可以随时做我需要做的事情,我是否可以以某种方式禁用使用 sudo 的人能够使用 sudo 更改它。
我正在编写一个脚本,用于登录到一堆远程机器并在它们上运行命令。我已经设置了密钥,因此运行脚本的用户不必输入每台机器的密码,而只需在脚本的开头输入密码。
问题是远程机器上的命令需要sudo运行。同时,脚本的全部意义在于让用户不必多次输入密码。有没有办法避免输入密码sudo?更改远程计算机上命令的权限不是一个选项。
我正在尝试配置 sudo 以允许所有用户无需输入密码即可重新启动 apache。
抛开安全问题不谈,为什么这不起作用?
我将这一行添加到 /etc/sudoers: %admin ALL=NOPASSWD: /usr/sbin/apache2ctl
$sudo -l
User aidan may run the following commands on this host:
(root) NOPASSWD: /usr/sbin/apache2ctl
(ALL) ALL
$sudo /usr/sbin/apache2ctl
[sudo] password for aidan:
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
我似乎无法弄清楚为什么 supervisord 不会以非 root 用户身份运行。如果我在用户设置为 jason (pid 1000) 的情况下启动它,我会在日志文件中得到以下信息:
2010-05-24 08:53:32,143 CRIT Set uid to user 1000
2010-05-24 08:53:32,143 WARN Included extra file "/home/jason/src/tsched/celeryd.conf" during parsing
2010-05-24 08:53:32,189 INFO RPC interface 'supervisor' initialized
2010-05-24 08:53:32,189 WARN cElementTree not installed, using slower XML parser for XML-RPC
2010-05-24 08:53:32,189 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2010-05-24 08:53:32,190 INFO daemonizing the supervisord process
2010-05-24 08:53:32,191 INFO supervisord started with pid 3444
Run Code Online (Sandbox Code Playgroud)
...然后该过程因某种未知原因而终止。如果我在没有 sudo 的情况下启动它(在用户 jason 下),我会得到类似的输出:
2010-05-24 08:51:32,859 INFO supervisord …Run Code Online (Sandbox Code Playgroud) 我已将 sudo 设置为显示用户首次使用时的常规讲座。没想到,我在设置时不小心为新用户触发了它的显示,现在显示了,他们将无法再次看到它。
sudo 如何知道用户之前调用过它一次?我想重置它,以便该用户在第一次使用它时会看到该消息。我不想将它设置为每次调用都会出现讲座 - 一次就足够了 - 我只是想让 sudo 忘记它已经显示过一次。
任何想法我如何做到这一点?
我在 Debian 的 root 的 crontab 中使用以下命令。
rsync -vqrlHEAXogDtzhi --log-file=${LOG} --progress --rsync-path="sudo /usr/bin/rsync" --exclude-from=$CONFIG_DIR/excludes -e "ssh -i /home/backups/.ssh/id_rsa" backups@${HOSTNAME}:/ ${BACKUP_DIR}
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
sudo: no tty present and no askpass program specified
Run Code Online (Sandbox Code Playgroud)
我尝试将 -t 添加到 ssh 命令中,我得到:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Run Code Online (Sandbox Code Playgroud)
我尝试将 -t -t 添加到 ssh 命令中,我得到:
protocol version mismatch -- is your shell clean?
Run Code Online (Sandbox Code Playgroud)
我已经向远程设备上的备份用户添加了一个 .hushlogin 文件,并确认我可以使用远程设备的密钥 ssh 作为备份而没有显示任何内容(登录被隐藏)。我仍然收到这些消息。
请注意,我可以成功地使用密钥 ssh 作为远程设备的备份。
请注意,我的 sudo 没有 -tt 选项。
请注意,以下是在源和目标的 /etc/sudoers 文件中设置的:
backups ALL= NOPASSWD:/usr/bin/rsync
Run Code Online (Sandbox Code Playgroud)
请注意,我的 …
我们的临时服务器位于 Amazon EC2 实例上。当您通过 ssh 进入它时,您可以执行sudo命令或sudo su无需输入密码。
无论如何,我可以在用户尝试使用命令时要求用户输入密码sudo吗?我有一个需要访问权限的 3rd 方开发人员,我想限制他们的 root 权限。
我尝试设置密码,sudo passwd但我仍然不需要密码。
~$ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
~$ sudo su
/home/ubuntu# exit
~$ sudo passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
~$ sudo su
/home/ubuntu#
Run Code Online (Sandbox Code Playgroud)
更新
我尝试通过运行sudo visudo并添加来要求输入密码:
ubuntu ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)
现在我被要求输入密码,但我设置的密码不起作用!幸运的是,我在开始之前创建了一个 AMI。
问题可能是我没有为用户设置密码ubuntu,我应该运行sudo passwd ubuntu而不是sudo …