在 Arch Linux 上的 Gnome 3.X 中创建访客帐户

Edw*_*lds 8 gnome3 guest-account accounts

我想要一个像在 Ubuntu 中一样的来宾帐户,它具有以下功能:

  1. 无需密码即可登录
  2. /tmp每次都创建一个没有数据的新主文件夹(如果可能的话)
  3. 用户退出后立即删除用户数据
  4. 用户不能使用 sudo

我在 Arch Linux 上运行 Gnome 3.20

注:请不要靠近我的问题是重复的创建来宾帐户限制访问的应用程序,因为这个问题没有答案,我的第二和第三点

ter*_*don 10

事实证明,使用 GDM 非常简单。我假设您正在使用 GDM,因为您也在使用 Gnome。首先,guest使用空白密码创建用户帐户:

sudo useradd -d /tmp/guest -p $(openssl passwd "") guest
Run Code Online (Sandbox Code Playgroud)

openssl passwd "" 会返回一个空字符串的哈希值,从而设定密码为空。

现在,您只需要这两个脚本:

  • /etc/gdm/PostLogin/Default

这是在您登录后执行的,并将创建/tmp/$guestuser/tmp/guest默认情况下)目录并将默认文件复制/etc/skel到该目录中。要更改来宾用户的默认用户名,请guestuser在开始时设置为其他内容。

 <!-- language: lang-bash -->

    #!/bin/sh

    guestuser="guest"

    ## Set up guest user session
    if [ "$USER" = "$guestuser" ]; then
        mkdir /tmp/"$guestuser"
        cp /etc/skel/.* /tmp/"$guestuser"
        chown -R "$guestuser":"$guestuser" /tmp/"$guestuser"
    fi
    exit 0
Run Code Online (Sandbox Code Playgroud)
  • /etc/gdm/PostSession/Default

这在您注销后执行,并将删除/etc/$guestuser目录及其所有内容。确保guestuser在两个脚本中设置为相同的值。

 <!-- language: lang-bash -->

    #!/bin/sh

    guestuser="guest"

    ## Clear up the guest user session
    if [ "$USER" = "$guestuser" ]; then
        rm -rf /tmp/"$guestuser"
    fi

    exit 0
Run Code Online (Sandbox Code Playgroud)

最后,使两个脚本可执行:

sudo chmod 755 /etc/gdm/PostLogin/Default  /etc/gdm/PostSession/Default
Run Code Online (Sandbox Code Playgroud)

现在,只需注销,您就会看到您的新guest用户。您可以通过选择它并Enter在提示输入密码时点击来登录。该guest用户将无法使用sudo,因为这是所有用户的默认反正。只有在 中明确提到的用户/etc/sudoers或在 中明确提到的组的成员sudoers(例如wheelsudo,取决于您的发行版)才能使用sudo


如果您使用的是最新版本的 GDM,它可能会在密码框为空时禁用登录按钮。要解决此问题,您可以告诉 GDM 不要提示输入特定组的密码。需要注意的是,这也将绕过该组成员的会话选择菜单。如果你想这样做,你应该加入这一行开头/etc/pam.d/gdm-password

auth sufficient pam_succeed_if.so user ingroup guest
Run Code Online (Sandbox Code Playgroud)


小智 2

您可以使用注销脚本。在那里,您可以删除访客帐户的主文件夹,并在注销时创建一个新文件夹。如有必要,您可以sudo通过访客帐户启用此功能visudo。添加yourguestacc ALL=(root) NOPASSWD: /path/to/script/recreating/the/home/folder。请参阅arch wiki了解更多信息。