Ale*_*der 3 security boot privileges login ubuntu
当没有 sudo 用户登录系统时,如何使用 root 权限(Ubuntu OS)运行特定程序?该程序需要 root 权限才能正常运行。普通用户不应该能够关闭这个进程。例如,我有两个用户,Admin 和 Client;该程序应仅在客户端登录系统时启动。它需要 root 权限并且客户端不应该能够关闭这个进程。
有几种方法可以做到这一点。Ubuntu 的图形登录由 GDM(或 KDM,如果您使用的是 Kubuntu)提供。GDM 由 Upstart 子系统启动。
启动过程遵循以下步骤:
在哪里运行你的脚本
XSession之前的所有内容都以root身份运行。 /etc/gdm/Xsession和之后的所有内容都以用户身份运行。这给你留下了三个实物期权哪里运行脚本。
修改 GDM/KDM 的PostLogin或PreSession脚本以运行您的程序。用户名在USER或USERNAME环境变量中可用。
使用 PAM 执行您的脚本。PAM 将在PAM_USER环境变量中设置授权用户。将此添加到/etc/pam.d/gdm以启动您的脚本:
auth required pam_exec.so /path/to/your/script
Run Code Online (Sandbox Code Playgroud)
编写一个 Upstart 脚本来运行你的程序。您的脚本将在用户登录时启动,因此我们查找GDM 的PreSession脚本发出的桌面会话启动信号。
因此,Upstart 脚本会将该信号检测为运行触发器:
# start when GDM's PreSession script runs
start on desktop-session-start
Run Code Online (Sandbox Code Playgroud)
来自PreSession的信号不会传递用户名,因此您需要调整信号。在/etc/gdm/PreSession/Default 中,找到initctl行并将其更改为此。您也可以使用USERNAME代替USER。
# add USER variable so Upstart script can find it
initctl -q emit desktop-session-start DISPLAY_MANAGER=gdm USER=$USER
Run Code Online (Sandbox Code Playgroud)
如何避免管理员用户
您的脚本将需要检查它从这些方法之一获取的环境变量中的用户/用户名,并使用它来确定是中止还是继续。标准的 shell 脚本方法将起作用。根据您从上述列表中选择的起始位置,用户名可能在USER、USERNAME或PAM_USER环境变量中可用。
| 归档时间: |
|
| 查看次数: |
10177 次 |
| 最近记录: |