shell脚本中命令的权限

shell脚本中命令的权限

我需要运行简单的脚本来检查主机状态(ping),

我有以下脚本:

#!/bin/bash
echo "Host checker:"
if [ "`ping -c 1 172.17.10.1`" ]
then
  echo "HOST UP"
else
  echo "HOST DOWN"
fi

以下权限:

-rwxrwxrwx  1 sysadmin users   142 Jul 13 16:14 lgchk.sh

从 bash 发出 ping 时一切正常:

sysadmin@host:~$ ping 172.17.10.1
PING 172.17.10.1 (172.17.10.1) 56(84) bytes of data.
64 bytes from 172.17.10.1: icmp_seq=1 ttl=64 time=0.159 ms
64 bytes from 172.17.10.1: icmp_seq=2 ttl=64 time=0.186 ms
64 bytes from 172.17.10.1: icmp_seq=3 ttl=64 time=0.203 ms

但是运行脚本时出现错误:

sysadmin@host:~$ ./lgchk.sh
Host checker:
ping: icmp open socket: Operation not permitted
HOST DOWN

如果我在脚本中运行 ping,如下所示:

...
if [ "`su -u sysadmin ping -c 1 172.17.10.1`" ]
...

一切都会好的,但它会要求输入密码。

您能建议一下为什么会发生这种情况以及如何解决吗?脚本内命令的权限与命令行中的权限不同吗?

答案1

你试过 sudo 吗?

if sudo -u sysadmin  /bin/ping -c ...

您必须以 root 身份编辑 /etc/sudoers

%g1 ALL=(sysadmin) NOPASSWD:  /bin/ping

允许人员组组g1运行 ping 命令。

参见man sudo,man sudoershttps://askubuntu.com/questions/192050/how-to-run-sudo-command-with-no-password了解详情。

答案2

可能您的ping可执行文件缺少 SUID 位。当你跑步时

ls -l $(which ping)

你应该看到这样的东西:

-rwsr-xr-x 1 root root 38200 Jul 23  2015 /bin/ping

可能您没有s从行首开始的第四个字符的权限。解决方案很简单。运行命令:

chmod u+s `which ping`

作为 root 或使用susudo

相关内容