3つのログファイルから複数のファイルを検索するスクリプトを作成しています。ログファイルの1つがスーパーユーザーとして作成され、実行されるたびにパスワードの入力を求められます。毎回パスワードを入力する必要がないように、これを同じスクリプトに入れることはできますか?
for ...
su superuser -c "grep $file /u/spool/ftp/logs/alog>> /u/home/abc/tempo/files.txt"
if [ $? -eq 0 ];
then
echo $file >> /u/home/abc/tempo/ftpxfer.txt;
fi
done
ベストアンサー1
まず、ファイル(特にユーザー所有スクリプト)にスーパーユーザーパスワードを設定するのはとても悪い考え、そのユーザーへのアクセス権を取得した人は誰でも簡単にroot権限を取得できるからです。
つまり、sudo
パイプからパスワードを読み取るオプションを提供するスクリプトで使用できます。
pass='1234abc'
for ...
echo $pass | sudo -S "grep $file /u/spool/ftp/logs/alog>> /u/home/abc/tempo/files.txt"
if [ $? -eq 0 ]; then
echo $file >> /u/home/abc/tempo/ftpxfer.txt
fi
done
sudo
あるいは、-configure sudo(root / superuser)を使用して、rootにスクリプト全体を実行させることもできます。visudo
これにより、sudo設定ファイルに次のものを追加して、パスワードなしでスクリプトを実行できます。
%wheel ALL=(ALL) NOPASSWD: /path/to/script
これにより、次のようにスクリプトを簡素化できます(通常のテキストパスワードは必要ありません)。
for ...
grep $file /u/spool/ftp/logs/alog>> /u/home/abc/tempo/files.txt
if [ $? -eq 0 ]; then
echo $file >> /u/home/abc/tempo/ftpxfer.txt
fi
done