前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux 中的用户名如何定义

linux 中的用户名如何定义

原创
作者头像
zero000
发布2022-02-08 19:58:52
5.5K0
发布2022-02-08 19:58:52
举报
文章被收录于专栏:程序员菜谱程序员菜谱

结论

linux 用户名建议符合[a-z_][a-z0-9_-]*[$]正则表达式,并且长度不超过 32 位

原因

简单来说,下面的字符组成 linux 用户名,是合法的。

代码语言:txt
复制
The set of characters from which portable filenames are constructed.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

我们可以创建一个

但是,一般不建议在用户名中使用.号。

  1. 理解上容易造成误差。例如一个人叫 steve,steve.txt 是一个个人文件,但如果一个人叫 steve.jobssteve.jobs.txt就会产生歧义
  2. 编写代码容易出错。例如一些代码使用时间+用户名+hash作为版本号,这时候 20211201.steve.c31bcf20211201.steve.jobs.c31bcf 会容易在切分代码时出现错误,hash = version.split(",")[2] 获取到jobs非预期结果。

相反,大部分人都习惯把-_连接再一起的 string 看作是一个整体,例如 steve_jobssteve-jobs 相比 steve.jobs 更“像”一个用户名

所以:即使.是用户名的合法字符,但不推荐实际创建用户时使用。

What's more

In Debian, shadow-utils 4.1, there is a is_valid_name function in chkname.c:

代码语言:txt
复制
static bool is_valid_name (const char *name)
{
    /*
     * User/group names must match [a-z_][a-z0-9_-]*[$]
     */
    if (('\0' == *name) ||
        !((('a' <= *name) && ('z' >= *name)) || ('_' == *name))) {
        return false;
    }

    while ('\0' != *++name) {
        if (!(( ('a' <= *name) && ('z' >= *name) ) ||
              ( ('0' <= *name) && ('9' >= *name) ) ||
              ('_' == *name) ||
              ('-' == *name) ||
              ( ('$' == *name) && ('\0' == *(name + 1)) )
             )) {
            return false;
        }
    }

    return true;
}

adduser command

adduser: Please enter a username matching the regular expression configured via the NAME_REGEX configuration variable. Use the `--force-badname' option to relax this check or reconfigure NAME_REGEX.

This is the default NAME_REGEX.

代码语言:txt
复制
NAME_REGEX="^[a-z][-a-z0-9]*\$"

参考

  1. https://serverfault.com/questions/73084/what-characters-should-i-use-or-not-use-in-usernames-on-linux
  2. https://unix.stackexchange.com/questions/157426/what-is-the-regex-to-validate-linux-users
  3. https://stackoverflow.com/questions/6949667/what-are-the-real-rules-for-linux-usernames-on-centos-6-and-rhel-6

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结论
  • 原因
    • What's more
    • 参考
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com