标签: sudo

限制使用`sudo -s`

我正在我的一些 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 …

security linux sudo

8
推荐指数
1
解决办法
4715
查看次数

编辑 sudoers 文件以限制用户的命令

是否可以编辑 sudoers 文件,以便用户可以将 sudo 用于除指定命令之外的任何命令?我倒是真的,我相信,可以设置 sudoers 文件,以便用户只能执行给定的命令列表。

编辑:我真正想要取消的命令是暂停和重启......这让我认为有特殊的系统调用暂停和重启。你能从用户那里接听系统调用吗?如果不是,是不是因为unix权限系统对系统调用进行了抽象而忽略了这一点?

linux sudo

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

如何使用sudo在系统配置文件中添加一行?

我需要在配置文件(例如/etc/resolv.conf)中添加一行。如果我使用

sudo echo "nameserver 192.168.1.6" >> /etc/resolv.conf

我收到错误消息访问被拒绝。问题是 bash 从我的帐户写入文件,而不是从 root 帐户写入文件。

有什么办法让它工作吗?

我知道有一个“解决方案”可以将我的命令写入文件并将它们作为批处理运行,但它非常不舒服:-(

command-line-interface sudo

8
推荐指数
2
解决办法
5494
查看次数

如何防止在 linux 上更改 root 密码?

我正在设置一个服务器,其他人可以通过 ssh 对其进行 sudo 访问。他们可以安装东西并进行他们认为合适的更改,但是我仍然需要管理服务器、安装补丁和软件更新等。

我想知道我是否保留了 root 密码,以便我可以随时做我需要做的事情,我是否可以以某种方式禁用使用 sudo 的人能够使用 sudo 更改它。

security linux ssh sudo

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

通过 SSH 运行“sudo”

我正在编写一个脚本,用于登录到一堆远程机器并在它们上运行命令。我已经设置了密钥,因此运行脚本的用户不必输入每台机器的密码,而只需在脚本的开头输入密码。

问题是远程机器上的命令需要sudo运行。同时,脚本的全部意义在于让用户不必多次输入密码。有没有办法避免输入密码sudo?更改远程计算机上命令的权限不是一个选项。

ssh sudo

8
推荐指数
2
解决办法
6978
查看次数

将 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)

谢谢你的帮助。

linux ubuntu sudo

8
推荐指数
1
解决办法
1235
查看次数

如何在不使用 root 的情况下运行 supervisord?

我似乎无法弄清楚为什么 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)

daemon root sudo supervisord

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

一旦看到它,我如何重新启用 sudo 讲座

我已将 sudo 设置为显示用户首次使用时的常规讲座。没想到,我在设置时不小心为新用户触发了它的显示,现在显示了,他们将无法再次看到它。

sudo 如何知道用户之前调用过它一次?我想重置它,以便该用户在第一次使用它时会看到该消息。我不想将它设置为每次调用都会出现讲座 - 一次就足够了 - 我只是想让 sudo 忘记它已经显示过一次。

任何想法我如何做到这一点?

security user-management sudo

8
推荐指数
1
解决办法
2885
查看次数

SSH 上的 Rsync 不存在 tty

我在 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)

请注意,我的 …

linux debian ssh rsync sudo

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

在 sudo su 上为 Amazon EC2 实例设置密码

我们的临时服务器位于 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 …

password sudo amazon-ec2 amazon-web-services

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