쉘 스크립트의 명령에 대한 권한

쉘 스크립트의 명령에 대한 권한

호스트 상태(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

여러 사람들이 g1ping 명령을 실행할 수 있도록 허용합니다.

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`

루트로 또는 사용 su또는sudo

관련 정보