30.6. 为其它应用程序启用控制台访问

如果你想使其它应用程序能被控制台用户访问,你要采取的步骤就会多一些。

首先,只有驻留在 /sbin/usr/sbin 中的应用程序才能在控制台上被使用,因此你想运行的程序也必须被保存在那两个目录中。满足了上面的条件后,执行下面的步骤:

  1. 创建一个从你的应用程序(如以下例子中的 foo)到 /usr/bin/consolehelper 的链接:

    cd /usr/bin
    ln -s consolehelper foo
  2. 创建文件 /etc/security/console.apps/foo

    touch /etc/security/console.apps/foo
  3. /etc/pam.d/ 目录中为 foo 服务创建一个 PAM 配置文件。做到它的简单方法是使用 halt 服务的 PAM 配置文件的副本,如果你想改变行为的话,修改该文件:

    cp /etc/pam.d/halt /etc/pam.d/foo

现在,当你运行 /usr/bin/foo 时,它就会调用 consolehelper,该命令会借助 /usr/sbin/userhelper 来验证用户。要验证用户,consolehelper 会询问用户的口令(若 /etc/pam.d/foo/etc/pam.d/halt 文件的副本的话,否则,它会仅执行在 /etc/pam.d/foo 中的命令),然后使用根权限来运行 /usr/sbin/foo

在 PAM 配置文件中,应用程序可以被配置使用 pam_timestamp 模块来记住(缓存)一次成功的尝试。当应用程序被启动并提供了正确的验证后(根口令),一个时间戳文件就会被创建。按照默认设置,成功验证会被缓存五分钟。在这段时期内,在同一会话中运行的其它配置使用 pam_timestamp 的应用程序会自动为该用户验证 — 用户不必再输入根口令。

该模块被包括在 pam 软件包中。要启用这项功能,etc/pam.d/ 中的 PAM 配置文件必须包括以下几行:

auth sufficient /lib/security/pam_timestamp.so
session optional /lib/security/pam_timestamp.so

第一个以 auth 开头的行应该在任何 auth sufficient 行之后,以 session 开头的行应该在所有 session optional 行之后。

如果配置使用 pam_timestamp 的、从面板上的「主菜单」按钮启动的应用程序被成功地验证, 图标就会显示在面板的通知区域(若你运行的是 GNOME 或 KDE 桌面环境的话)。验证过期后(默认为五分钟),该图标就会消失。

用户可以通过点击图标并选择忘记验证选项来忘记缓存验证。