无法登录到新创建的用户帐户

pen*_*ner 27 switch-user useradd

尝试将帐户切换到我新创建的帐户时出现黑屏,然后在输入正确的密码后返回主登录屏幕。

登录我以前存在的帐户后,我得到:

"System Program Problem Detected"

Details:

Executable path /usr/bin/Xorg

Package: xserver-xorg-core 2:1.11.4-0ubuntu10.1

Details: Crash
... (tons more, but no way to copy paste or save)
Run Code Online (Sandbox Code Playgroud)

当我尝试 su

su -l penner
Run Code Online (Sandbox Code Playgroud)

我得到:

No directory, logging in with HOME=/
Run Code Online (Sandbox Code Playgroud)

我手动创建了主目录,这个错误消失了,但登录仍然没有运气。似乎用户创建出了问题?我该如何纠正?

Eli*_*gan 37

如果您使用 来创建用户帐户useradd,则必须手动为其设置所有内容。这就是为什么在从命令行创建用户帐户时,建议adduser在 Ubuntu(和 Debian,以及其他基于 Debian 的系统)中使用的原因。您可能只想使用userdel或删除用户deluser并使用 重新创建它adduser。除此以外...

修复主目录位置

如果要保留用户帐户并解决问题,则需要查看:

  • 用户帐户实际配置的主目录的名称
  • 您实际创建的目录的名称

这些必须完全相同。您收到的错误消息su -l penner告诉您它们不一样。

要检查用户帐户实际配置的主目录,请运行以下命令(请参阅man 5 passwdman grep了解更多信息):

grep penner /etc/passwd
Run Code Online (Sandbox Code Playgroud)

你应该看到这样的一行:

penner:x:1000:1000:Eliah Kagan,,,:/home/penner:/bin/bash
Run Code Online (Sandbox Code Playgroud)

也就是说,第六个:分隔的字段(在第五个之后:)包含主目录。如果不是/home/penner,应该是。如果您为用户创建的目录不是/home/penner,也应该是。如果两个目录相同但都不是/home/penner,那么理论上这可能可行,但您应该将它们都设置为/home/penner,因为许多软件假定所有非root用户的主目录都是./home/username

您可以通过运行以下命令penner将 的主目录更改为/home/penner

sudo usermod -d /home/penner penner
Run Code Online (Sandbox Code Playgroud)

确保它是目录,并且用户具有访问权限

如果(或曾经)两个名称都是/home/penner,您还应该确保用户可以访问他们自己的主目录。跑:

ls -ld /home/penner
Run Code Online (Sandbox Code Playgroud)

您应该会看到如下所示的内容(尽管日期和时间会有所不同):

drwxr-xr-x 43 penner penner 4096 2012-07-03 06:41 /home/penner
Run Code Online (Sandbox Code Playgroud)

如果代替drwxr-xr-x,您有一些以-而不是开头的内容d,那么您创建的是文件而不是目录。删除文件并在那里创建一个目录。

如果penner你有别的东西而不是第一个,那么用户不拥有他们的主目录,所以让他们拥有它:

sudo chown penner /home/penner
Run Code Online (Sandbox Code Playgroud)

如果drwxr-xr-x之后的三个字符中没有破折号d,则用户在那里没有完全访问权限。修复如下:

sudo chmod u+rwx /home/penner
Run Code Online (Sandbox Code Playgroud)

penner如果他们拥有自己的主目录,所以如果你喜欢,你可以运行这个作为能够运行此命令的:sudo -u penner u+rwx /home/penner

确保其他用户没有一揽子写入访问权限

如果不是drwxr-xr-x,在最后六个字母中有ws 而不是-s,那么除此之外的用户penner可能对penner的主目录具有写访问权限。这是危险的(除非你真的知道你在做什么并且想要这样并且已经设置好它不会成为问题)。要解决这个问题:

sudo chmod -R go-w /home/penner
Run Code Online (Sandbox Code Playgroud)

其他默认值

您可能还需要进行一些其他更改。默认情况下在 Ubuntu 中(也就是说,如果您使用adduser或使用图形工具创建用户帐户,而您没有创建):

  1. 主目录对每个人都具有读写权限,而不仅仅是拥有它们的用户。用户可以为整个主目录或其中的任何文件和子目录更改此设置。但是,如果你想要这个默认值,你没有第二,第三rxdrwxr-xr-x运行:

    sudo chmod 755 /home/penner
    
    Run Code Online (Sandbox Code Playgroud)

    penner如果他们拥有自己的主目录,所以如果你喜欢,你可以运行这个作为能够运行此命令的:sudo -u penner chmod 755 /home/penner

  2. 每个用户都有他/她自己的组,与用户同名,这是用户的主要组。他们的主目录归这个组所有。这是第二的意思pennerdrwxr-xr-x 43 penner penner 4096 2012-07-03 06:41 /home/penner如果您知道自己在做什么则可以打破此默认设置。但是,如果您不打算以不同的方式做事,您应该确保penner以这种方式设置,因为用户的某些可能的主要组标识或用户主目录中的组所有者可能会导致安全问题。

    运行groups penner。(有关man groups更多信息,请参阅。)您应该看到如下内容:

    penner : penner adm dialout cdrom plugdev lpadmin sambashare
    
    Run Code Online (Sandbox Code Playgroud)

    如果不是那样,请不要担心。我很快就会谈到这一点。相反,请查看 之后的第一个单词:。那是用户的主要组的名称。假设您希望它是penner,请确保它是。如果不是,请更改它:

    sudo usermod -g penner penner
    
    Run Code Online (Sandbox Code Playgroud)

    如果您收到一条错误消息,指出该组penner不存在,那么您必须使用此命令创建它(然后再次运行上述命令):

    sudo addgroup penner
    
    Run Code Online (Sandbox Code Playgroud)
    • 有关man addgroup更多信息,请参阅。(如果您愿意,也可以使用该groupadd命令创建组。)
  3. 当您跑步时groups penner,您可能得到的组列表比我的要短得多penner : penner adm dialout cdrom plugdev lpadmin sambashare。对于台式机用户来说,admdialoutcdromplugdevlpadmin,和sambashare提供能力是台式机用户应该一般。因此,除非你有理由不这样做,否则penner应该在这些组中。然而,这些不是主要组,因此它们的设置不同。假设penner不在这些组中的任何一个中,而您想penner在所有组中,请运行以下命令:

    sudo usermod -a -G adm,dialout,plugdev,lpadmin,sambashare penner
    
    Run Code Online (Sandbox Code Playgroud)

    如果您有兴趣,以下是所有这些组的含义:

    (来源:权限,在 Ubuntu 文档 wiki 中。)

使用户成为管理员

如果您不想penner成为管理员,您可能不需要做任何其他事情。您可以检查是否penner是管理员groups penner。如果两者都admin没有sudo列出,则penner不是管理员。

如果您想penner成为管理员,请添加penner到这些组中的任何一个。(penner如果它们都存在,您也可以同时添加它们。)您可以通过分别运行这两个命令来实现这一点——如果其中一个成功,则您已经创建penner了管理员:

sudo usermod -a -G admin penner
sudo usermod -a -G sudo penner
Run Code Online (Sandbox Code Playgroud)
  • 有两个组的原因是,在 Ubuntu 12.04 LTS 之前,管理员在admin组中。从 Ubuntu 12.04 LTS 开始,管理员在sudo组中。但是,如果您的 12.04 LTS 系统是从以前的版本升级的(这应该适用于以后的 Ubuntu 版本,例如从 Ubuntu 11.10 或更早版本升级而来的 12.10),那么为了向后兼容,管理员是两者的成员sudoadmin。通常,如果这些组中的一个不授予管理能力,则它根本不存在,因此同时运行上述两个命令(单独运行,而不是 as sudo usermod -a -G admin,sudo penner)通常是一种安全有效的方式来创建penner管理员。