호스트 상태(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 ...
/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`
루트로 또는 사용 su
또는sudo