如何在没有“sudo”的情况下运行命令?


1

我服务器上的Nagios无法正常工作。没有“sudo”它不能执行命令lftp。有没有办法如何在不使用“sudo”的情况下允许nagios运行命令?

我的/etc/groupnagios:x:107:www-data,nagios

使用lftp的脚本: -rwxr-xr-x 1 root nagios 3667 říj 20 12:20 check_ftp_fully

/usr/bin/lftp-rwxr-xr-x 1 root root 924936 srp 7 2013 lftp

顺便说一下,我试过这个答案没有成功。仍然无法正常工作。

编辑:该脚本由Nagios调用$USER5$/check_ftp_fully.sh <username> <password> <port>。检查脚本在这里。它无法列出目录(FTP check failed when trying to list the contents of a directory.

EDIT2: Nagios问题没有知识IF那么重要,如何在没有“sudo”的情况下运行命令。例如,mkdir/etc


1
缺少两个关键信息:1)如何lftp被调用?最有趣的部分是如果你正在使用二进制文件的完整路径。2)它失败的准确程度如何?
kostix 2014年

当您在问题中描述调用脚本时,您省略了第四个参数 - hostname(在脚本中:) HOSTNAME=${4}。如果没有这个参数lftp肯定会失败,这种失败的结果check_ftp_fully.sh就是写信息CRITICAL: FTP check failed when trying to list the contents of a directory.
pabouk

Answers:


2

该脚本由Nagios调用为./check_ftp_fully.sh

./这里的前导表明您正在从脚本所在的目录运行脚本。我猜测你没有对这个目录的写访问权(事实上你不应该)。更改调用脚本,使其在主目录(或者说/tmp)中运行,并改为使用check_ftp_fully.sh脚本的完整路径。更好的,甚至是另外的,更改测试脚本,以便创建一个临时目录,并在完成后将其删除(即使在例如语法错误的情况下;请参阅trap


为了你的良好观察+1,我创建了$ USER5 $(路径变量)并使用它,遗憾的是它仍然不是我主要问题的答案。
Jakub Turcovsky 2014年

1

可能有几种解决方案

  1. 要么在sudoers文件中启用nagios来运行没有密码确认的sudo,要从check_ftp_fully运行'sudo lftp'

  2. lftp上的setuid

两者都可能是一个安全漏洞,这取决于你想要打开哪些门:)


1
你为什么建议root权限lftp?该程序通常不需要它们。
pabouk 2014年

lftp本身不需要root权限,这只有在需要访问受保护文件或在“普通”用户不应该写入的文件夹中时才需要。
Ovidiu Andoniu

我理解你对@pabouk的关注,正如我所说,这可能是一个巨大的安全漏洞想象一下这个命令在升高的lftp上:lftp -e'set net:timeout 10; 得到passwd -o / etc / passwd; bye'
Ovidiu Andoniu

在类似情况下(例如写入具有有限访问权限的目录),下载到临时位置并提升权限仅用于将文件移动到受限位置当然更好。---但无论如何在这个问题中我认为问题可能是缺少参数。我查了一下脚本。看我的评论
pabouk

你是对的!:)
Ovidiu Andoniu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.