问题描述
尝试将帐户切换到我新创建的帐户时出现黑屏,然后在输入正确密码后将我带回主登录屏幕。
登录到我以前存在的帐户后,我得到:
"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=/
我手动创建了主目录,这个错误消失了,但登录仍然没有运气。用户创建似乎出了点问题?我该如何纠正?
最佳思路
如果您使用 useradd
创建了用户帐户,则必须手动为其设置所有内容。这就是为什么在从 命令行 创建用户帐户时,建议在 Ubuntu(和 Debian,以及其他基于 Debian 的系统)中使用 adduser
。您可能只想使用 userdel
或 deluser
删除用户并使用 adduser
重新创建它。除此以外…
修复主目录位置
如果您想保留用户帐户并解决问题,那么您需要查看:
-
用户帐户实际配置的主目录的名称
-
您实际创建的目录的名称
这些必须完全相同。您使用 su -l penner
收到的错误消息告诉您它们不一样。
要检查用户帐户实际配置的主目录,请运行以下命令(有关详细信息,请参阅 man 5 passwd
和 man 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
-
有关详细信息,请参阅
man usermod
。
确保它是一个目录,并且用户具有访问权限
如果(或一次)名称都是 /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
-
有关详细信息,请参阅
man chown
。
如果不是 drwxr-xr-x
在 d
后面的三个字符中有破折号,那么用户在那里没有完全访问权限。修复如下:
sudo chmod u+rwx /home/penner
-
有关详细信息,请参阅
man chmod
。
(如果 penner
拥有自己的主目录,则能够运行此命令,因此,如果您愿意,可以将其运行为: sudo -u penner u+rwx /home/penner
)
确保其他用户没有一揽子写入权限
如果最后六个字母中有 w
而不是 -
而不是 drwxr-xr-x
,则除 penner
之外的用户可能对 penner
的主目录具有写入权限。这是危险的(除非你真的知道你在做什么并且想要这样并且已经设置好了所以它不会成为问题)。要解决这个问题:
sudo chmod -R go-w /home/penner
其他默认值
您可能还需要进行一些其他更改。在 Ubuntu 中默认情况下(即,如果您使用 adduser
或图形工具创建用户帐户,但您没有这样做):
-
Home directories have read and write permissions for everyone, not just the user who owns them. 用户可以为整个主目录或其中的任何文件和子目录更改此设置。但是,如果您确实想要这个默认值,并且在
drwxr-xr-x
中没有第二个和第三个r
和x
,请运行:sudo chmod 755 /home/penner
(如果
penner
拥有自己的主目录,则能够运行此命令,因此,如果您愿意,可以将其运行为:sudo -u penner chmod 755 /home/penner
) -
每个用户都有他/她自己的组,与用户同名,这是用户的主要组。他们的主目录归该组所有。这就是
drwxr-xr-x 43 penner penner 4096 2012-07-03 06:41 /home/penner
中第二个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
命令创建组。)
-
-
当您运行
groups penner
时,您可能会得到一个比我的penner : penner adm dialout cdrom plugdev lpadmin sambashare
短得多的组列表。对于桌面用户,adm
、dialout
、cdrom
、plugdev
、lpadmin
和sambashare
提供了桌面用户通常应该具备的能力。因此,除非您有理由不这样做,否则penner
应该在这些组中。但是,这些不是主要组,因此它们的设置不同。假设penner
不在这些组中,并且您希望penner
在所有组中,请运行以下命令:sudo usermod -a -G adm,dialout,plugdev,lpadmin,sambashare penner
如果您有兴趣,以下是所有这些组的含义:
-
adm
用户 can view 大多数系统日志文件在/var/log
中。 -
dialout
用户 can use dial-up 调制解调器。 -
plugdev
用户 can mount and use 外部存储设备。 -
lpadmin
用户 can set up and manage 打印机。
(来源: Privileges ,在 Ubuntu 文档 wiki 中。)
-
使用户成为管理员
如果您不希望 penner
成为管理员,您可能不需要执行任何其他操作。您可以使用 groups penner
检查 penner
是否是管理员。如果 admin
和 sudo
均未列出,则 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 版本,例如从 Ubuntu 11.10 或更早版本升级的 12.10),那么为了向后兼容,管理员是两者的成员sudo
和admin
。通常,如果其中一个组不授予管理能力,则它根本不存在,因此运行上述两个命令(单独,而不是sudo usermod -a -G admin,sudo penner
)通常是使penner
成为管理员的安全有效的方法。