BLOG
Enjoy when you can, and endure when you must.
从15则实例细看useradd

本文转载并翻译自《The Complete Guide to “useradd” Command in Linux – 15 Practical Examples

Linux中的“useradd”或“adduser”命令可谓是家喻户晓。因为总有些时候,系统管理员会要求创建一个新的用户并赋予特定的权限。

“useradd”命令是用于在Linux或UNIX中添加/创建用户。“adduser”和“useradd”实际上是一样的,它不过是指向“useradd”的符号链接。

在一些其他的Linux发行版中,“useradd”可能具有一些差异。因此我建议在使用该命令来创建用户前应仔细阅读文档。

当在终端下执行“useradd”命令时,它会做如下操作:

· 修改/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow等文件以创建新的账户;

· 为该用户创建HOME目录;

· 设置HOME目录的权限和归属。

“useradd”的基本语法格式如下:

useradd [options] username

本文我们将以实例向你展示“useradd”命令的15种用法并将这些用法分为基本和高级两个部分。

第一部分:10种基本使用示例

第二部分:5种高级使用示例

第一部分:10种基本使用示例

1. 如何向Linux添加一个新用户

要做到这一点,只需在“useradd”或“adduser”命令后跟上一个用户名即可。该用户名将作为该用户登录系统时的登录名。

该命令一次只能添加一个用户,并且用户名必须保证唯一。例如,向系统添加一个名为“tecmint”的用户可以用如下命令搞定:

[root@tecmint ~]# useradd tecmint

用“useradd”添加一个用户后,该用户实际还处于锁定状态,要解锁该用户,必须用“passwd”命令为其设置密码。

[root@tecmint ~]# passwd tecmint
Changing password for user tecmint.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

一旦一个新用户被创建,它的信息将会自动添加到“/etc/passwd”文件中,该文件用于存储用户信息和登录入口。

tecmint:x:504:504:tecmint:/home/tecmint:/bin/bash

上面的记录由冒号分割的七个字段组成,每个字段都有其特殊的含义。让我们来以此了解一下:

用户名:该用户用户登录系统的登录名。介于1-32个字符之间;

密码:以加密形式保存的用户密码;

用户ID(UID):每个用户都会拥有一个身份ID。默认情况下,UID 0分配给了root帐号,而1-99则留给了其他一些预定帐号,另外100-999则用于系统账户和组;

组ID(GID):与存储在“/etc/group”文件中的组身份ID对应;

用户信息:该字段是可选的,允许在其中添加一些与该用户相关的附加信息,如用户的全名。该字段由“finger”命令来填充;

HOME目录:用户家目录的绝对路径;

Shell:该用户所使用的shell的绝对路径,如/bin/bash。

2. 创建一个新用户并指定不同的HOME目录

在默认情况下,“useradd”命令会自动在/home目录下为所创建的用户指定一个家目录并以其用户名命名。以先前的例子来说,刚才创建的“tecmint”用户的家目录则是“/home/tecmint”。

不过,该默认行为可以通过“-d”选项并显示指定HOME目录的路径(如/data/projects)来改变。例如,下面的例子将会创建一个新的用户anusha并指定其HOME目录为/data/projects。

[root@tecmint ~]# useradd -d /data/projects anusha

然后你可以观察该用户的家目录以及UID、GID、Shell和注释等其他相关信息。

[root@tecmint ~]# cat /etc/passwd | grep anusha

anusha:x:505:505::/data/projects:/bin/bash

3. 创建新用户并指定用户ID

在Linux中,每个用户都会拥有一个唯一的UID (Unique Identification Number)。系统会默认为新创建的用户依次分配500、501、502...

当然,我们也可以自行指定,即利用“-u”选项。例如,下面的例子会创建一个新用户navin并指定其UID为999。

[root@tecmint ~]# useradd -u 999 navin

现在,让我们来验证一下刚才的操作。

[root@tecmint ~]# cat /etc/passwd | grep tecmint

navin:x:999:999::/home/navin:/bin/bash

4. 创建新用户并指定组ID

同样的,每个用户也会拥有唯一的GID(Group Identification Number)。我们可以通过“-g”选项来指定新用户的组ID。

这里,我们将创建一个名为tarunika的用户并利用“-u”和“-g”选项来同时指定其UID和GID。

[root@tecmint ~]# useradd -u 1000 -g 500 tarunika

现在,让我们在/etc/passwd文件中确认一下。

[root@tecmint ~]# cat /etc/passwd | grep tarunika

tarunika:x:1000:500::/home/tarunika:/bin/bash

5. 将用户添加至多个组

“-G”选项用于将一个用户添加至其他的组里。多个组名之间由逗号相隔并且不要包含空格。

下面的例子中,我们将tecmint用户添加至admins、webadmin以及developer三个组。

[root@tecmint ~]# useradd -G admins,webadmin,developers tecmint

然后,让我们使用“id”命令来验证刚才的操作。

[root@tecmint ~]# id tecmint

uid=1001(tecmint) gid=1001(tecmint)
groups=1001(tecmint),500(admins),501(webadmin),502(developers)
context=root:system_r:unconfined_t:SystemLow-SystemHigh

6. 添加一个没有HOME目录的新用户

在某些情况下,我们会考虑一些安全因素而不给用户分配HOME目录。在该情况下,当用户登录到刚重启完成的系统时,它的HOME目录将会是root。当该用户使用su命令时,其登录目录则会是前一用户的HOME目录。

要在创建新用户时不分配HOME目录,“-M”选项就会派上用场了。下面的例子创建了一个shilpi用户且不分配HOME目录。

[root@tecmint ~]# useradd -M shilpi

现在,让我们用“ls”命令来验证一下。

[root@tecmint ~]# ls -l /home/shilpi

ls: cannot access /home/shilpi: No such file or directory

7. 创建新用户并指定账户有效期

默认情况下,创建的新用户将会是长期有效的,其过期时间会设置成0。

不过,我们也可以用“-e”选项来指定一个账户的有效期,其接收的格式为YYYY-MM-DD。这将有助于创建一个在指定时间范围内有效的临时账户。

下面的例子创建了一个名为aparna的账户并指定它在2014年3月27日后就失效。

[root@tecmint ~]# useradd -e 2014-03-27 aparna

然后,我们用“chage”命令来验证该操作。

[root@tecmint ~]# chage -l aparna

Last password change						: Mar 28, 2014
Password expires						: never
Password inactive						: never
Account expires							: Mar 27, 2014
Minimum number of days between password change		        : 0
Maximum number of days between password change		        : 99999
Number of days of warning before password expires		: 7

8. 创建新用户并指定密码有效期

“-f”选项用于指定用户的密码过期时间。0代表该账户未激活或密码已过期。默认情况下该值为-1,意思是从不过期。

下面的例子,我们设定用户tecmint的密码有效期45天以及账户有效期至2014-04-27。

[root@tecmint ~]# useradd -e 2014-04-27 -f 45 tecmint

9. 创建新用户并附加注释

“-c”选项允许你为当前用户增加额外的附加信息,例如写下用户的全名、电话号码什么的,在本文开始也介绍了它会直接保存到/etc/passwd里。该注释会以单行形式保存并不含空格。

下面的例子添加了用户mansi并在注释一栏中注明该用户的名字是Manis Khurana。

[root@tecmint ~]# useradd -c "Manis Khurana" mansi

让我们来看看/etc/passwd的情况。

[root@tecmint ~]# tail -1 /etc/passwd

mansi:x:1006:1008:Manis Khurana:/home/mansi:/bin/sh

10. 更改用户的登录Shell

有时,我们在添加用户的时候并不关心其登录Shell;但某些情况下则需要修改默认的行为并指定一个不同的shell。利用“-s”选项即可达到该目的。

这里,我们在添加tecmint用户的同时指定该用户不具有登录Shell,即/sbin/nologin。

[root@tecmint ~]# useradd -s /sbin/nologin tecmint

第二部分:5种高级使用示例

11. 添加新用户并指定HOME目录、Shell和自定义注释

下面的命令将会创建一个新用户ravi,指定其HOME目录为/var/www/tecmint,Shell为/bin/bash并对其添加一条额外的信息。

[root@tecmint ~]# useradd -m -d /var/www/ravi -s /bin/bash -c "TecMint Owner" -U ravi

在以上命令中,“-m -d”指定该用户的HOME目录,“-s”设定用户的默认Shell,“-c”添加附加信息。另外,“-U”选项则创建/添加一个与该用户同名的组。

12. 添加新用户并指定HOME目录、Shell、自定义注释以及UID/GID

这条命令和前面那个非常相似,不过这里我们指定其Shell为/bin/zsh并自定义该用户的UID和GID为tarunika。“-u”定义新用户的UID(如1000),“-g”指定GID(如1000)

[root@tecmint ~]# useradd -m -d /var/www/tarunika -s /bin/zsh -c "TecMint Technical Writer" -u 1000 -g 1000 tarunika

13. 添加新用户并指定HOME目录、设置空Shell、自定义注释以及UID

接下来的命令也与前面两个很相似,唯一不同的地方在于我们将禁用用户avishek的Shell并自定义其UID(如1019)。

这里,“-s”选项值默认为/bin/bash,不过这里我们将其指定为“/usr/sbin/nologin”,即代表该用户将不可登录系统。

[root@tecmint ~]# useradd -m -d /var/www/avishek -s /usr/sbin/nologin -c "TecMint Sr. Technical Writer" -u 1019 avishek

14. 添加新用户并指定HOME目录、Shell、Skell、Comment和UID

这里,我们只需小修改一下之前的命令。我们使用“-k”选项来设置navin的skeleton directory为/etc/custom.skell,以代替默认的/etc/skel。另外还使用“-s”选项来指定shell为/bin/tcsh。

[root@tecmint ~]# useradd -m -d /var/www/navin -k /etc/custom.skell -s /bin/tcsh -c "No Active Member of TecMint" -u 1027 navin

15. 添加新用户并指定HOME目录、设置空Shell、不含组并添加自定义注释

这次的命令与之前就会有所不同了。这里我们使用“-M”选项以做到在创建用户的时并不创建HOME目录,“-N”选项则告诉系统仅仅创建用户名而不指定组。“-r”则意指创建一个系统账户。

[root@tecmint ~]# useradd -M -N -r -s /bin/false -c "Disabled TecMint Member" claytonx

如果还想知晓“useradd”的更多信息和选项,可以自己在终端运行“useradd”进行查看。

COMMENTS
LEAVE COMMNT