哪个是哪个
用户名称 是一个模棱两可的术语,它可以指代:
一种被某些系统认知的正式用户ID字符串,或者
像 约翰·史密斯 这样的显示名称。
因此,我们有更具体的术语,比如 登录名,它告诉我们这是用于登录的字符串,例如 jsmith,而不是 约翰·史密斯。
用户ID 也有同样的目的,但在面对数值型用户ID时它变得模棱两可。这必须依赖于上下文来明确。例如,在Unix中,用户通常不使用数值型用户ID;如果提示要求输入“用户ID”,人们只知道他们不应该输入 1003 而应该输入 jsmith。
显示名称(也称为真实用户名)告诉我们这是某个软件对象的名称(例如用户帐户),用于在用户界面和程序输出(如诊断或调试消息)中引用它。这意味着显示名称在这些对象中不一定是唯一的,不能用作唯一引用对象的键。它仅用于显示目的。"显示名称"不一定是用户名;这必须由上下文来确定。任何可以有名称的东西都可能有一个显示名称。
在传统的Unix系统中,/etc/passwd文件将您的数字用户ID与登录名(文本用户ID)和显示名称关联起来。
更改和后果
chfn实用程序用于更改显示名称(也称为真实用户名)和相关信息。这样做应该没有任何后果。
更改文本用户ID,也就是登录名需要特权;root可以编辑密码文件来进行修改。效果将会立即生效:新的名称将出现在系统中任何显示数字用户ID的地方。例如,如果有人使用ls -l列出一个目录,并且该目录包含属于该用户的文件,他们将立即看到新的名称,因为ls程序从密码数据库中提取它。
这种更改可能会破坏或潜在地破坏系统中的各种功能,因此不是一个好主意。
首先,如果新名称与其他名称冲突,那显然是非常糟糕的;我提到这一点是为了完整起见。让我们假设这不是问题。
我们还假设没有用户的名称在他们不知情的情况下被更改,导致他们无法登录。
剩下的问题是,在文件系统中可能存在编码有文本用户ID的配置文件:无论是在路径名中还是在内容中。当然,这些仍然指向密码文件中不再存在的旧用户ID。除非找出并修复所有这些问题,否则更名就不算完成。
如果创建了一个与旧名称匹配的新密码文件条目,问题可能会进一步复杂化。这些配置现在指向一个有效的用户,但却是错误的用户。
举个例子。
让我们考虑一下系统中是否存在sudo实用程序,并且通过/etc/sudoers文件进行配置。假设/etc/sudoers文件授予用户bob以超级用户凭据运行某些危险的管理命令的特权。
现在假设我们在密码文件中将bob重命名为robert,并且没有更新此条目。现在robert无法再运行该命令;sudoers文件授予特权给bob而不是robert。
第二天,添加了一个新用户,恰好叫做bob。这个bob现在有权限以root身份运行该管理命令。