シェルスクリプトのコマンドに対する権限

シェルスクリプトのコマンドに対する権限

ホストの状態を確認するには、単純なスクリプトを実行する必要があります。

次のスクリプトがあります。

#!/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をrootとして編集する必要があります。

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

複数の人がg1pingコマンドを実行できるようにします。

man sudoman sudoersおよびhttps://askubuntu.com/questions/192050/how-to-run-sudo-command-with-no-passwordもっと学ぶ。

おすすめ記事