2017-07-01 8 views
1

こんにちは私は実行していますSUDOシェルスクリプトから、ここから指示を受けています。しかし、私はそれが正しいか、より安全な方法で行われているかどうかを知りたい。それはいつか私のアカウントをロックする(私はパスを変更しようとすると)私は理由を知らない。シェルスクリプトからSUDOをより安全に実行する方法

#!/bin/bash 
# set the STRING variable 
path=/u/siebel/abcdef/sie/sieb/ 
echo abcd | sudo -S /usr/bin/su - abcdef << EOF 
crontab -l > cronbackup1.txt 
#ls -lrt 
cd "$path" 
ls -lrt 
EOF 

上記のスクリプトはアカウントをロックしました。しかし、私がcdなしでそれを実行すると、うまくいきました。私は./testing.shを実行すると、それは私自身の3回間違ったパスワードを私に促し、ロックされているいくつかの1つは私はなぜ3回そこにスクリプトのループはありませんを実行する理由を説明することができますか?

これはcd "$ path"を設定した後に得られるものです。

Password: Sorry, try again. 
Password: Sorry, try again. 
Password: Sorry, try again. 
sudo: 3 incorrect password attempts 

同じパスワードのcrontabが正常に機能しました。あなたが行うと

+0

どのようなメッセージが表示されますか?私は「あなたのアカウントはロックされているため...」とは言わないと確信しています。誤ったパスワードを入力した場合にのみ、パスワード3を尋ねます。これはsudoの動作だからです。 'sudo echo test'を実行してみてください。 – NieDzejkob

+0

@NieDzejkob更新の回答 –

+0

'3不正なパスワードの試行'は '不正なパスワードの試行'を意味し、 '侵入者の警告 'ではありません。書かれていないものを読まないでください。 – NieDzejkob

答えて

1

は:cmd

somecmd | cmd << EOF 
... 
EOF 

stdinは と何がパイプラインから来ているが読まれることはありません、ここでは、文書の内容になります。 stdoutsomecmdは、何も読み取らずに終了します。

あなたの例では、sudoは、echoの代わりにhere-documentからパスワードを読み取ろうとしています。

つまり、sudoにパスワードを入力すると同時に、here-documentをそのシェルに渡すことはできません。

これらの2つのアクションは、 を別々に実行することで、タイムアウトオプションsudoを利用することができます。 つまり、sudoを正常に使用すると、 以降の認証された状態をしばらく覚えてから、sudoを呼び出しても、再度パスワードを尋ねることはありません。

echo abcd | sudo -S true 
sudo /usr/bin/su - abcdef << EOF 
crontab -l > cronbackup1.txt 
#ls -lrt 
cd "$path" 
ls -lrt 
EOF 

しかし、私はこれを行うには、あなたがないよう強くお勧めします。 パスワードをシェル内のクリアテキスト( )に渡すと、特にスクリプトではセキュリティが非常に悪いです。 他のユーザーアカウントで必要なアクションを実行し、sudoersを適切に設定するための専用スクリプトを作成する方がよいでしょう。

+0

良い説明のためのjanosに感謝上記のBASHを使用するための要件はありますか? –

+0

@TusharSharma私はあなたのコメントを理解していません。どのような場合でも、あなたの質問とこの答えの文脈で話すBashの要件はありません。 – janos

+0

あなたの答えは、私の問題の解決に役立ったJanosです。 –

関連する問題