質問
私は動的MOTD(今日のメッセージ、/ etc / motd)を持つことを試みており、ファイルを編集するにはsudoを実行する必要があります。また、/etc/profileに/etc/motdに書き込むPythonスクリプトを呼び出すようにしました。
/etc/profile で generateMOTD.py を呼び出してsudo python generateMOTD.py
開き、書き込み、閉じます。
新しいタブまたは端末を開くと、変更前のタブ(MOTD)と表示され、パスワードの入力を求められます。ここにはパスワードが必要ないようです。
私はそれを修正しようとしています
この問題を解決するために、次の両方を含めるように/etc/sudoersを編集しました。
<user> ALL=(ALL:ALL) NOPASSWD:/etc/generateMOTD.py
<user> ALL=(ALL:ALL) NOPASSWD:/etc/profile
私のユーザー名はどこにありますか<user>
?
コマンドラインで/etc/profileまたは/etc/generateMOTD.pyを呼び出すと、パスワードを要求しないこの方法を使用できるようになりました。
ただし、期待どおりに実行すると(セッションの開始時に)パスワードの入力を求められます。ほとんどの前/後のステップ(構成ファイルでgenerateMOTD.pyを呼び出す前後、generateMOTD.pyからgenerateMOTD.pyを呼び出す前後)にecho / printステートメントを追加しました。したがって、合計4つのドアがコンソールに記録されますprofileBefore > pythonCodeBefore > pythonCodeAfter > profileAfter
。セッションの開始時に(新しいタブ/ターミナル)を実行すると、最初のメッセージ(profileBefore)以降、残りのメッセージの前にパスワードの入力を求められます。だからこれは私の声明に関連していますが、sudo python generateMOTD.py
私はそれを理解することはできません。
私が作業しているすべてのファイル:
/etc/sudoers:
...
<user> ALL=(ALL:ALL) NOPASSWD:/etc/generateMOTD.py
<user> ALL=(ALL:ALL) NOPASSWD:/etc/profile
/etc/設定ファイル
...
echo "BEFORE PROFILE PYTHON CALL:"
sudo python /etc/generateMOTD.py
echo "AFTER PROFILE PYTHON CALL:"
/etc/generateMOTD.py
print ("IN THE MIDDLE OF THE PYTHON CALL, BEFORE!")
f= open("/etc/motd","w+")
f.write("!MOTD!\n")
f.close()
print ("IN THE MIDDLE OF THE PYTHON CALL, AFTER WRITE!")