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


25

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

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

"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)

当我尝试

su -l penner

我得到:

No directory, logging in with HOME=/

我手动创建了主目录,该错误消失了,但是登录仍然不走运。用户创建似乎出了什么问题?我该如何纠正?


您是如何创建用户帐户的?您是从gui还是从命令行执行的?如果从命令行执行此操作,则需要注意adduser和useradd的执行方式非常不同。另外,似乎还没有复制/ etc / skel中的文件。您能否在您的主目录和新用户的目录中使用l -al命令,以便我们了解发生了什么?
SuperMatt 2012年

Answers:


31

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

固定主目录位置

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

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

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

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

grep penner /etc/passwd

您应该看到这样的一行:

penner:x:1000:1000:Eliah Kagan,,,:/home/penner:/bin/bash

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

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

sudo usermod -d /home/penner penner

确保它是目录,并且用户可以访问

如果两个名称都是(或一次),则/home/penner还应确保用户有权访问自己的主目录。跑:

ls -ld /home/penner

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

drwxr-xr-x 43 penner penner 4096 2012-07-03 06:41 /home/penner

如果相反的drwxr-xr-x,你必须与开始的东西-,而不是d,那么你创建了一个文件,而不是一个目录。删除文件,然后在其中建立目录。

如果您不是第一个penner用户,而是其他用户,则该用户不拥有其主目录,因此请使其拥有它:

sudo chown penner /home/penner

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

sudo chmod u+rwx /home/penner

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

确保其他用户没有毯子写入权限

如果相反的drwxr-xr-x,也有wS的,而不是-S IN的最后六个字母,那么用户除了penner可以有写权限penner的主目录。这很危险(除非您真的知道自己在做什么,并希望以此方式进行设置,这样就不会有问题了)。要解决这个问题:

sudo chmod -R go-w /home/penner

其他默认值

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

  1. 主目录具有所有人的读写权限,而不仅仅是拥有它们的用户。用户可以更改整个主目录或其中的任何文件和子目录。但是,如果您确实想要此默认值,并且没有in rxin drwxr-xr-x,则请运行:

    sudo chmod 755 /home/penner
    

    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
    

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

    sudo usermod -g penner penner
    

    如果出现错误提示该组penner不存在,则必须使用此命令创建该组(然后再次运行以上命令):

    sudo addgroup penner
    
    • 请参阅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
    

    如果您有兴趣,请参阅以下所有组的含义:

    (来源:Ubuntu文档Wiki中的Privileges。)

使用户成为管理员

如果您不想penner成为管理员,则可能无需执行其他任何操作。您可以使用来检查是否penner是管理员groups penner。如果既未列出也adminsudo列出,则penner不是管理员。

如果要penner成为管理员,请添加penner到这些组中的任何一个。(penner如果它们都存在,也可以同时添加两者。)您可以通过分别运行以下两个命令来完成此操作-如果其中任何一个成功,则您已经成为penner管理员:

sudo usermod -a -G admin penner
sudo usermod -a -G sudo penner
  • 之所以有两个组,是因为在Ubuntu 12.04 LTS之前,管理员属于该admin组。从Ubuntu 12.04 LTS开始,管理员属于该sudo组。但是,如果您的12.04 LTS系统是从以前的版本升级的(并且应该适用于以后的Ubuntu版本,例如12.10发行时,是从Ubuntu 11.10或更早版本升级的),则为了向后兼容,管理员是这两个版本的成员sudoadmin。通常,如果这些组中的一个不授予管理能力,那么它根本就不存在,因此同时运行以上两个命令(单独运行,不是那样运行sudo usermod -a -G admin,sudo penner)通常是使penner管理员安全有效的方法。

谢谢!像adduser这样的东西很好,但我也想知道如何手动操作。一个非常彻底的答案!对此,我真的非常感激。
penner 2012年

sudo chmod u+a /home/penner在Ubuntu 16.04(Xenial)上给出错误。是sudo chmod u+rw /home/penner适当的替代品吗?
Nickolai Leschov '16

@NickolaiLeschov抱歉,谢谢您指出错误!我已经修正了命令。
伊利亚·卡根

这只是愚蠢的,为什么不删除useradd呢?保持随机的破损代码
2016年

1
@dashesy谢谢-我不知道使用useradd在Ubuntu上会导致在其他系统上不会引起的问题。在我的16.04系统上,/etc/default/useraddhas(作为其唯一未注释的行)SHELL=/bin/sh,并且useradd(8)似乎说SHELL如果没有给出-s/ --shell标志,则使用该值,但是在我的16.04系统上却没有发生。我这么仓促地说,Ubuntu useradd并没有坏,这是错误的。现在我不太确定。Fedora和Debian(以及Ubuntu)之间的差异也许有充分的理由……但是我删除了我的评论,以免误导人们。
伊利亚·卡根

0

当您创建用户而不为用户创建主目录时,通常会发生这种情况。这可以通过在创建用户时使用此命令来解决

useradd -m the_username

-m标志为用户创建主目录。创建用户后,通过执行以下操作检查该用户的主目录是否存在

ls /home

如果您看到那里列出的用户名,那么最后要做的就是为该用户分配密码

passwd the_username

您现在可以使用该用户名和密码登录


-1

ctrl + alt + f1并在那里登录并运行

须藤chown -R $ USER:$ USER $ HOME

然后按ctrl + alt + f7并尝试登录

会工作的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.