Linux useradd 命令介绍


Linux useradd 命令介绍

文章插图
 
使用 useradd 命令来添加用户(并且根据需要修改账号) 。-- Alan Formy-duval(作者)
 
任何计算机系统中,添加用户都是最重要的事之一;本文着重介绍如何在 linux 系统中添加用户 。
正式开始之前,我先提三个概念 。首先,跟大多数操作系统一样,Linux 用户也需要一个账号才能登录 。本文只介绍本地账号,不涉及网络账号,如 LDAP 。其次,每个账号都有一个名字(username)和一个对应的数字(用户 ID) 。最后,每个用户通常都在一个组内,每个组都有一个名字和一个组 ID 。
你可能已经想到了,Linux 提供了添加用户的命令行工具,就是 useradd 命令 。有些版本也叫 adduser 。为了方便使用,很多发行版上这个命令是一个指向 useradd 命令的符号链接 。
$ file `which adduser`/usr/sbin/adduser: symbolic link to useradd来看一下 useradd 。
注意:本文描述的默认环境是 Red Hat Enterprise Linux 8.0 。你可能会发现本文描述的这些文件和某些默认值与某些 Linux 发行版或其他 Unix 操作系统(FreeBSD 或 Solaris)偶尔会有差异 。
默认处理useradd 的基本用法相当简单:提供一个用户名就可以添加一个用户 。
$ sudo useradd sonny在本例中,useradd 命令创建了一个名为 sonny 的账号 。此命令同时创建了一个同名的组,sonny 被放进了这个组,这个组也是 sonny 账号的主组 。命令执行时,根据配置文件 /etc/default/useradd 和 /etc/login.defs 中的不同设置,也会有其他的参数,如语言和 shell 。对于一个私人系统或微小的单服务商业环境,这些参数已经足够了 。
上面两个文件控制 useradd 的处理,用户的信息保存在 /etc 目录下的一些其他文件中,关于这些信息的讲解会贯穿全文 。
 
Linux useradd 命令介绍

文章插图
 
 
自定义处理当管理员需要更好地控制账号时,可以使用命令行来自定义,如指定一个用户的 ID 。
用户和组 ID默认情况下,useradd 试图使用相同的用户 ID(UID)和主组 ID(GID),但也不完全是 。虽然 UID 与 GID 相同不是必须的,但如果相同,会更方便管理员管理 。
下面的场景就是一个 GID 与 UID 不同的例子 。现在我添加另一账号,名为 Timmy 。通过使用 getent 命令来比较 sonny 和 timmy 两个账号,显示两个用户和对应的主组 。
$ getent passwd sonny timmysonny:x:1001:1002:Sonny:/home/sonny:/bin/bashtimmy:x:1002:1003::/home/timmy:/bin/bash$ getent group sonny timmysonny:x:1002:timmy:x:1003:不幸的是,两者的 UID 和 GID 都不相同 。因为默认的处理是,创建用户时,把下一个可用的 UID 赋给用户,然后把同一个数字作为主组 ID 赋给它 。然而,当要使用的组 ID 已经被使用时,就再把下一个可用的 GID 赋给它 。为了弄清细节,我猜想 1001 这个 GID 已经被使用了,用一个命令确认了一下 。
$ getent group 1001book:x:1001:alanbook 的 ID 是 1001,因此新创建的用户的 GID 都有偏移量 1 。这就是为什么系统管理员在用户创建过程中需要多设置一些值的一个实例 。为了解决这个问题,我必须先确定下一个可用的 UID 和 GID 是否相同 。确定下一个可用值时,可以使用 getent group 和 getent passwd 命令,通过 -u 参数传递要确认的值 。
$ sudo useradd -u 1004 bobby$ getent passwd bobby; getent group bobbybobby:x:1004:1004::/home/bobby:/bin/bashbobby:x:1004:另一个需要指定 ID 的场景是,通过 NFS 访问远程系统上的文件时 。对于一个给定的用户,当 NFS 所有客户端和服务系统的 ID 都一样时,管理员更容易控制 。在我的文章 使用 autofs 挂载 NFS 中有详细介绍 。
更多自定义一些其他的指定用户信息的参数也用得比较频繁 。这里是一些你会经常用到的参数的概括例子 。
注释注释选项是通过 -c 参数指定的一个解释文本字段,可以提供一段简短的描述或其他信息 。
$ sudo useradd -c "Bailey is cool" bailey$ getent passwd baileybailey:x:1011:1011:Bailey is cool:/home/bailey:/bin/bash组一个用户可以被指定一个主组和多个次组 。-g 参数指定主组名称或 GID 。如果不指定,useradd 会以用户名创建一个主组(前面演示过) 。-G(大写)参数用一个逗号分隔的组列表来指定此用户所属的组,这些组就是次组 。
$ sudo useradd -G tgroup,fgroup,libvirt milly$ id millyuid=1012(milly) gid=1012(milly) groups=1012(milly),981(libvirt),4000(fgroup),3000(tgroup)


推荐阅读