本文转载并翻译自《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”进行查看。