9

在现代 Unix 或 Linux 系统上,您如何判断/etc/passwd文件存储用户名的代码集?用户名是否允许包含重音字符(例如 ISO 8859-1 或 8859-15 中的 0x80..0xFF 范围)?文件可以/etc/passwd包含 UTF-8 吗?你能说它包含 UTF-8 吗?在加密或散列之前的密码明文呢?

显然,如果用户名和其他数据被限制在 0x00..0x7F 范围内(并且无论如何不包括 0x00),那么 UTF-8、8859-1 或 8859-15 之间没有区别;出现的字符都编码相同。

另外,我使用/etc/passwd的缩写类似于“基于 Unix 的机器上的用户标识和身份验证数据库(有时称为目录服务),通常通过 PAM 访问,有时完全从本地托管在其他机器上一,但有时实际上仍然是本地硬盘上的一个文件,通常称为/etc/passwd,通常由/etc/shadow“. 我还假设有关组数据库(通常是/etc/group文件)的等效问题具有相同的答案。

4

1 回答 1

4

都是ASCII码。但是密码本身永远不会被存储——只有单向哈希的结果。如果您想知道密码本身可以包含哪些字符,这取决于语言环境,这将限制您的终端能够处理的字符。请参阅“人语言环境”

从 BSD 手册页:

“/etc/passwd ASCII 密码文件...”

至于用户名,我可以告诉你 Solaris 只支持 ASCII。我不能代表其他 Unix-en。

“并非 Solaris 2 和 Solaris 7 中的每个对象的名称都可以由任意字符组成。以下对象的名称必须由 ASCII 字符组成:

* User names, group name, and passwords
* System name ...

"

于 2009-09-11T17:18:39.463 回答