问题

问题

问题

我正在尝试拥有动态 MOTD(当天消息,/etc/motd),并且为了编辑文件,我需要运行 sudo。此外,我让 /etc/profile 调用一个写入 /etc/motd 的 python 脚本。

在 /etc/profile 中,我调用sudo python generateMOTD.py 在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 ,则可以使用此方法;它不要求输入密码。

然而,当我按预期运行它时(在会话开始时),它会要求输入密码。我在之前/之后的大部分步骤中添加了 echo/print 语句(即在配置文件中调用generateMOTD.py 之前和之后,以及在generateMOTD.py 中调用generateMOTD.py 之前和之后)。因此,总共有 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!")

相关内容