代码之家  ›  专栏  ›  技术社区  ›  Jonathan Leffler

/etc/passwd存储在哪个代码集中?可以是UTF-8吗?对用户名有什么限制?

  •  8
  • Jonathan Leffler  · 技术社区  · 15 年前

    在现代的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之间没有区别;出现的字符编码都相同。

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

    1 回复  |  直到 15 年前
        1
  •  4
  •   alanc    12 年前

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

    From the BSD man page:

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

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

    “并非Solaris 2和Solaris 7中的每个对象的名称都可以由任意字符组成。 The names of the following objects must be composed of ASCII characters:

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

    "