質問

質問

質問

私は動的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!")

関連情報