シェルスクリプトでパスワードを使用する方法

シェルスクリプトでパスワードを使用する方法

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

おすすめ記事