在现代的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 ,通常由 /支持等/阴影&QUOT ;.我还假设关于组数据库的相同问题(通常是 / etc / group 文件)具有相同的答案。

有帮助吗?

解决方案

全是ASCII。但密码本身永远不会存储 - 只有单向散列的结果。如果您想知道密码本身可以包含哪些字符,则取决于区域设置,这将限制终端能够处理的字符。请参阅“man locale”

来自BSD手册页:

" / etc / passwd ASCII密码文件..."

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

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

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

"

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top