我需要运行简单的脚本来检查主机状态(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 sudoers
和https://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 或使用su
或sudo