8.9 Linux useradd命令:添加新的系统用户

  • 添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,需设置密码,才可使用。
  • Linux 系统中,可以使用 useradd 命令新建用户,此命令的基本格式如下:
[root@CncLucZK ~]#useradd [选项] 用户名
  • 该命令常用的选项及各自的含义,如下表所示。
选项 含义
-u UID 手工指定用户的 UID,注意 UID 的范围(不要小于 500)。
-d 主目录 手工指定用户的主目录。主目录必须写绝对路径,而且如果需要手工指定主目录,则一定要注意权限;
-c 用户说明 手工指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置;
-g 组名 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。
-G 组名 指定用户的附加组。我们把用户加入其他组,一般都使用附加组;
-s shell 手工指定用户的登录 Shell,默认是 /bin/bash;
-e 曰期 指定用户的失效曰期,格式为 “YYYY-MM-DD”。也就是 /etc/shadow 文件的第八个字段;
-o 允许创建的用户的 UID 相同。例如,执行 “useradd -u 0 -o usertest” 命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0;
-m 建立用户时强制建立用户的家目录。在建立系统用户时,该选项是默认的;
-r 创建系统用户,也就是 UID 在 1~499 之间,供系统程序使用的用户。由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建主目录。
  • 系统已经帮我们规定了非常多的默认值,在没有特殊要求下,无需使用任何选项即可成功创建用户,它会完成以下几项操作
[root@CncLucZK /]# useradd zk       #创建 zk 普通用户
[root@CncLucZK /]# grep 'zk' /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:zk:x:1002:1002::/home/zk:/bin/bash
/etc/shadow:zk:$6$Rw1...6xUZRHiL1vwPB6yH...:19279:0:99999:7:::
/etc/group:users:x:100:zk
/etc/group:zk:x:1002:
/etc/gshadow:users:::zk
/etc/gshadow:zk:!::
[root@CncLucZK /]# ll -d /home/zk
drwx------ 2 zk zk 4096 Oct 14 20:29 /home/zk
[root@CncLucZK /]# ll /var/spool/mail/zk
-rw-rw---- 1 zk mail 0 Oct 14 18:44 /var/spool/mail/zk

在 /etc/passwd 文件中创建一行与 zk用户相关的数据,可以看到,用户的 UID 是从 500 开始计算的。同时默认指定了用户的家目录为 /home/zk/,用户的登录 Shell 为 /bin/bash。

在 /etc/shadow 文件中新增了一行与 zk用户密码相关的数据:若用户没有设置密码,所以密码字段是 “!!”,代表这个用户没有合理密码,不能正常登录。同时会按照默认值设定时间字段,例如密码有效期有 99999 天,距离密码过期 7 天系统会提示用户“密码即将过期”等。

在 /etc/group 文件中创建一行与用户名一模一样的群组:该群组会作为新建用户的初始组。

在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息:此时没有设定组密码,所以这里没有密码,也没有组管理员。

默认创建用户的主目录和邮箱:这两个文件的权限,都要让 zk 用户拥有相应的权限。

将 /etc/skel 目录中的配置文件复制到新用户的主目录中

  • 可以看到,useradd 命令创建用户的过程,其实就是修改了与用户相关的几个文件或目录

  • 除了默认创建用户,我们还可以利用 useradd 命令的各种选项亲自定制要创建的用户,例如:

[root@CncLucZK /]# useradd –d  /home/tony -m tony
  • 此命令创建了一个用户tony,其中-d和-m选项用来为登录名tony产生一个主目录 /home/tony(/home为默认的用户主目录所在的父目录)。
[root@CncLucZK /]# useradd -s /bin/sh -g tgroup –G tony,root user1
  • 此命令新建了一个用户user1,该用户的登录Shell是 /bin/sh,它属于tgroup用户组,同时又属于上面例子中的tony初始组和root用户组,其中tgroup用户组是其主组。

  • 这里可能新建组:`#groupadd tgroup

  • Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。

  • 综合使用:

[root@CncLucZK /]# groupadd u-dev1
#先手工添加 u-dev1用户组,后续要把 u-dev1用户的初始迎指定过来,如果不事先建立,则会报告用户组不存在
[root@CncLucZK /]# useradd -u 1003 -g u-dev1 -G users -d /home/u-dev1 -c 'devloper user' -s /bin/bash u-dev1
#在建立用户u-dev1的同时,指定了UID(1003)、初始组(u-dev1)、附加组(users)、家目录(/home/u-dev1/)、用户说明(devloper user)和用户登录Shell(/bin/bash)[root@CncLucZK /]# grep 'u-dev1' /etc/passwd /etc/shadow /etc/group /etc/gshadow #同时查看4个文件
/etc/passwd:u-dev1:x:1003:1003:devloper user:/home/u-dev1:/bin/bash
#用户的UID、初始组、用户说明、家目录和登录Shell都和命令手工指定的一致
/etc/shadow:u-dev1:!!:19279:0:99999:7:::
#u-dev1用户还没有设定密码
/etc/group:users:x:100:zk,u-dev1
#u-dev1用户加入了users组,users组是u-dev1用户的附加组
/etc/group:u-dev1:x:1003:
#GID为1003的组是u-dev1组
/etc/gshadow:users:::zk,u-dev1
/etc/gshadow:u-dev1:!::
#家目录也建立了,不需要手工建立
  • 以上 2 种方式,都可以成功创建用户。通常情况下,根本不需要手工指定任何内容,因为使用默认值就可以满足我们的要求

  • useradd 命令的这些默认值参考的默认值文件主要有两个,分别是 /etc/default/useradd 和 /etc/login.defs。这次了解 /etc/default/useradd 文件。

  • cat查看 /etc/default/useradd 文件中包含哪些内容:

[root@CncLucZK /]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
#另外,也可以直接通过命令进行查看,结果是一样的:
[root@CncLucZK /]# useradd -D      -D 选项指的就是查看新建用户的默认值。
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
  • 对此文件中的各项做了详细的解释。
参数 含义
GR0UP=100 这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说这个选项并不会生效。 Linux 中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。目前我们采用的是私有用户组机制。
HOME=/home 指的是用户主目录的默认位置,所有新建用户的主目录默认都在 /home/下,刚刚新建的 u-dev1用户的主目录就为 /home/u-dev1/。
INACTIVE=-1 指的是密码过期后的宽限天数,也就是 /etc/shadow 文件的第七个字段。这里默认值是 -1,代表所有新建立的用户密码永远不会失效。
EXPIRE= 表示密码失效时间,也就是 /etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。
SHELL=/bin/bash 表示所有新建立的用户默认 Shell 都是 /bin/bash。
SKEL=/etc/skel 在创建一个新用户后,你会发现,该用户主目录并不是空目录,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 目录下的内容就可以改变新建用户默认主目录中的配置文件信息。
CREATE_MAIL_SPOOL=yes 指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同。例如,zk的邮箱位于 /var/spool/mail/zk。
  • 注意,此文件中各选项值的修改方式有 2 种,一种是通过 Vim 文本编辑器手动修改,另一种就是使用文章开头介绍的 useradd 命令,不过所用的命令格式发生了改变:
useradd -D [选项] 参数
  • 用此命令修改 /etc/default/useradd 文件,可使用的选项如下表所示。

    选项+参数 含义
    -b HOME 设置所创建的主目录所在的默认目录,只需用目录名替换 HOME 即可,例如 useradd -D -b /gargae。
    -e EXPIRE 设置密码失效时间,EXPIRE 参数应使用 YYYY-MM-DD 格式,例如 useradd -D -e 2019-10-17。
    -f INACTIVE 设置密码过期的宽限天数,例如 useradd -D -f 7。
    -g GROUP 设置新用户所在的初始组,例如 useradd -D -g bear。
    -s SHELL 设置新用户的默认 shell,SHELL 必须是完整路径,例如 useradd -D -s /usr/bin/csh。
  • 例如,要修改新用户的默认 Shell 为 /bin/csh,可以使用如下方式:

[root@CncLucZK /]# useradd -D -s /usr/bin/csh
[root@CncLucZK /]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/usr/bin/csh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

通过 /etc/default/useradd 文件,大家仅能修改有关新用户的部分默认值,有一些内容并没有在这个文件中,例如修改用户默认的 UID、GID,以及对用户密码的默认设置,对这些默认值的修改就需要在 /etc/login.defs 文件中进行。

其实,useradd 命令创建用户的过程是这样的,系统首先读取 /etc/login.defs 和 /etc/default/useradd,根据这两个配置文件中定义的规则添加用户,也就是向 /etc/passwd、/etc/group、/etc/shadow、/etc/gshadow 文件中添加用户数据,接着系统会自动在 /etc/default/useradd 文件设定的目录下建立用户主目录,最后复制 /etc/skel 目录中的所有文件到此主目录中,由此,一个新的用户就创建完成了。

参考文献:
Linux useradd命令详解:添加新的系统用户
Linux用户和用户组

下一篇:Linux学习-26-passwd命令:修改用户密码

Linux学习-25-useradd命令:添加新的系统用户相关推荐

  1. linux添加用户命令_Linux useradd命令添加新用户图文详解

    在Linux 系统中,可以使用 useradd 命令新建用户,此命令的基本格式如下: [root@localhost ~]#useradd [选项] 用户名 该命令常用的选项及各自的含义,如表 1 所 ...

  2. linux中useradd存放位置,Linux useradd命令详解:添加新的系统用户

    linux 系统中,可以使用 useradd 命令新建用户,此命令的基本格式如下: [root@localhost ~]#useradd [选项] 用户名 该命令常用的选项及各自的含义,如表 1 所示 ...

  3. Linux学习:shell命令(文件权限、用户、用户组)

    一.文件权限.用户.用户组 d rwx rwx r-x 2 itcast itcast 4096 1 月 14 17:33 bb 下面一一来讲解这几位: (1)第 1 位:文件类型(共 7 种)(注意 ...

  4. linux学习查看日志命令

    linux学习查看日志命令 tail -f linux学习日 志 文 件 说 明 /var/log/maillog 与邮件相关的日志信息 /var/log/secure 与安全相关的日志信息 /var ...

  5. 为Ubuntu系统添加新的普通用户

    文章目录 1.创建一个新的普通用户 2.给用户授权 3.删除用户 4.新增用户添加至ubuntu的sudors文件中 5.提高ubuntu下访问github的速度 6.配置ubuntu国内镜像下载源的 ...

  6. Linux——安全权限(禁止添加新用户+umask值+修改默认密码最长有效期)

    目录 一.不再允许添加新用户的请求 演示: 二.umask值: (1)简介: (2)查看: (3)为什么 umask 里目录是 022,文件是 002? (4)演示: (5)更改: 三.修改默认的密码 ...

  7. Linux学习手册(命令大全)

    入门概述 Linux 简介 Linux 内核最初只是由芬兰人==林纳斯·托瓦兹(Linus Torvalds)==在赫尔辛基大学上学时出于个人爱好而编写的. Linux 是一套免费使用和自由传播的类 ...

  8. linux学习系列-常用命令的使用

    某些参数的用法: (1)-v,用于很多命令后,可视化操作过程: (2)!,用于很多命令前,都是指执行上一次的该命令,如!touch执行上一次的touch命令: (3)-f,不询问直接操作,可能出现该操 ...

  9. Linux学习整理-网络命令集

    目录 前提 1. 机器IP地址查询 1.1 ifconfig 1.1.1 安装包 1.1.2 执行命令 1.1.3 拓展-ifconfig的其它用法 1.1.4 常用的属性说明 1.2 ip addr ...

最新文章

  1. $_FILES上传错误类型
  2. 通用试题库管理系统 jsp mysql_通用在线考试系统 JSP+Servlet+MySQL
  3. 5G NGC — 关键技术 — 网络切片 — 切片的选择
  4. memcache及其telnet命令使用详解
  5. 2.1 Objective-C概述
  6. WebAssembly已支持所有主流浏览器
  7. arduino使用oled代码_如何做一个Arduino无线气象站
  8. 华为nova 5全新外观曝光:水滴全面屏设计 边框下巴极窄
  9. python动态类型的坑_在Python中避免动态类型错误的策略是什么(NoneType没有属性x)?...
  10. 【hdu 4859】海岸线(图论--网络流最小割)
  11. 算法5-----三个数大小比较
  12. OpenCV五种平滑处理(模糊处理)
  13. 常用的三种机器学习预测方法
  14. [国家集训队] 矩阵乘法
  15. Android开发学习笔记整理(9)-Adapter、ListView和GridView
  16. Linux攻关之基础模块四 命令初识
  17. java verify_java – 什么时候使用Mockito.verify()?
  18. pl sql 和if loop结构
  19. 北京科技大学871计算机真题,(NEW)北京科技大学871计算机综合一(含计算机组成原理、数据结构)历年考研真题汇编(350页)-原创力文档...
  20. JZOJ 4210. 【五校联考1day1】我才不是萝莉控呢

热门文章

  1. 《计算机应用基础》在线作业一
  2. 2019年计算机考研大纲,2019年计算机考研大纲(原文).pdf
  3. 一位散户高手的炒股心得
  4. ad中装配图如何导出,PCB设计软件输出装配图的3个方法
  5. linux 多行注释
  6. mac系统装mysql还是mariadb_Mac安装MariaDB数据库
  7. LeetCode题解(1594):矩阵从左上移动到右下的最大非负积(Python)
  8. Arduino CNC电机扩展板详解(A4988驱动42步进电机)
  9. 一小时刷完英语口语常用3000词汇(绿色护眼版)day10-词汇901-1000
  10. 使用python将数据写入csv文件,行与行间多出空行