Ubuntu 用户登录后以 root 身份登录时执行 python 脚本

Ubuntu 用户登录后以 root 身份登录时执行 python 脚本

我在电脑上安装了 MythBuntu。MythTV 不支持华硕AI遥控器红外接收器,所以我寻找可能的解决方案。其中一个是Python 脚本它充当终端窗口和焦点应用程序之间的桥梁。

它需要由普通用户执行比约恩在用户登录和 MythTV 加载之间使用 root 权限 (sudo),无需输入密码。到目前为止,我尝试过python Linux_Asus_AI_remote.pysudo Linux_Asus_AI_remote.pysudo python Linux_Asus_AI_remote.py在 /etc/rc.local

问题:

它应该在用户登录后执行,MythTV 会自动启动并获得焦点,从而接收来自Linux_Asus_AI_remote.py

  • rc.local 是在用户登录系统之前还是之后执行的?

  • 我应该如何安全地以 root 权限执行脚本而不要求用户输入密码?(请记住,应用程序必须在后台继续运行,并且当用户需要额外权限时,仍然需要要求用户输入密码。)

脚本测试:

用户登录后,我启动了一个终端窗口并输入sudo python Linux_Asus_AI_remote.py。一旦我输入正确的密码并将焦点放在 MythTV 上,一切都会正常运行。

它不应该在 15 分钟后终止脚本,并且用户仍然需要输入密码才能获得额外的权限。


提前致谢。

答案1

rc.local 在系统启动时运行,因此在用户登录之前就运行了。

您有两种运行脚本的选项。一种是使用 visudo(8) 设置允许运行的命令,NOPASSWD:在命令条目中使用标签,然后只需使用 sudo 启动命令,可能来自 /etc/profile 以及人们可能使用的任何 shell 所需的任何其他文件。如果存在 /etc/profile.d/,它可能就像在其中放入某些内容一样简单。例如,如果登录的每个人都在组中,video那么当您运行时,visudo您需要一条规则,例如:

%video  ALL=NOPASSWD: /path/to/Linux_Asus_AI_remote.py

然后你可以调用:

sudo /path/to/Linux_Asus_AI_remote.py

另一种选择是pam_exec在登录后仍以 root 身份运行命令;这种方法更干净,但更危险,因为如果您犯了错误,您的系统可能会崩溃,无法登录。如果您想检查这一点,请阅读 PAM 模块以及身份验证和授权的工作原理,并查看 /etc/pam.d/;此外,请仔细考虑如何限制这种情况只发生在适当的用户身上。

无论你选择哪种方法,你都可能需要确保这样做不是以 root 身份登录时会发生这种情况,以减少让管理员用户进入系统所涉及的麻烦。

答案2

您可能需要通过将权限更改为 755 来允许执行该脚本。

我快速谷歌了一下并发现了这一点: http://embraceubuntu.com/2005/09/07/adding-a-startup-script-to-be-run-at-bootup/

我确信 Python 脚本的原理是一样的。

相关内容