如果您使用
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
开头,而是以
-
开头,那么你创建的是一个文件而不是目录。请删除该文件并创建一个目录。
如果第一个
penner
不是这样的话,那么用户没有拥有自己的主目录,所以请让他们拥有它。
sudo chown penner /home/penner
查看更多信息,请参阅
man chown
。
如果在
d
之后的下一个三个字符中有破折号,那么用户在那里没有完全访问权限。请按以下方式修复:
sudo chmod u+rwx /home/penner
请参考
man chmod
以获取更多信息。
(如果您愿意,
penner
可以运行此命令,前提是他们拥有自己的主目录。您可以这样运行:
sudo -u penner u+rwx /home/penner
)
确保其他用户没有全面写入权限
如果最后六个字母中有
w
而不是
-
,那么除了
penner
之外的用户可能对
penner
的主目录具有写入权限。这是危险的(除非您真的知道自己在做什么,并且希望它保持这种方式,并且已经设置好了以避免问题)。要修复它:
sudo chmod -R go-w /home/penner
其他默认设置
您可能希望进行一些其他更改。在Ubuntu中,默认情况下(即,如果您使用adduser
或图形工具创建用户帐户,而不是其他方式):
家目录对所有人都有读写权限,而不仅仅是拥有者。 用户可以更改这一设置,无论是对整个家目录还是其中的任何文件和子目录。但如果您希望保持默认设置,并且在 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
当您运行 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
如果您感兴趣,以下是所有这些组的含义:
将用户设为管理员
如果你不想让 penner
成为管理员,那么你可能不需要做其他任何事情。你可以通过运行 groups penner
来检查 penner
是否是管理员。如果既没有列出 admin
也没有列出 sudo
,那么 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或更早版本升级而来),那么为了向后兼容,管理员同时是“sudo”和“admin”的成员。通常情况下,如果其中一个组没有管理权限,它就不存在,所以分别运行上述两个命令(不要使用“sudo usermod -a -G admin,sudo penner”)通常是使“penner”成为管理员的一种安全有效的方法。