useradd

Linux 系统中,可以使用 useradd 命令新建用户,此命令的基本格式如下:

[root@localhost ~]#useradd [选项] 用户名

该命令常用的选项及各自的含义,如表 1 所示。

表 1 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@localhost ~]# useradd lamp

此行命令就表示创建 lamp 普通用户。

不要小看这条简单的命令,它会完成以下几项操作:

(1)在 /etc/passwd 文件中创建一行与 lamp 用户相关的数据:

[root@localhost ~]# grep "lamp" /etc/passwd
lamp:x:500:500::/home/lamp:/bin/bash

可以看到,用户的 UID 是从 500 开始计算的。同时默认指定了用户的家目录为 /home/lamp/,用户的登录 Shell 为 /bin/bash。

(2)在 /etc/shadow 文件中新增了一行与 lamp 用户密码相关的数据:

[root@localhost ~]# grep "lamp" /etc/shadow
lamp:!!:15710:0:99999:7:::

当然,这个用户还没有设置密码,所以密码字段是 "!!",代表这个用户没有合理密码,不能正常登录。同时会按照默认值设定时间字段,例如密码有效期有 99999 天,距离密码过期 7 天系统会提示用户“密码即将过期”等。

(3)在 /etc/group 文件中创建一行与用户名一模一样的群组:

[root@localhost ~]# grep "lamp" /etc/group
lamp:x:500:

该群组会作为新建用户的初始组。

(4)在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息:

[root@localhost ~]# grep "lamp" /etc/gshadow
lamp:!::

当然,我们没有设定组密码,所以这里没有密码,也没有组管理员。

(5)默认创建用户的主目录和邮箱:

[root@localhost ~]#ll -d /home/lamp/
drwx------ 3 lamp lamp 4096 1月6 00:19 /home/lamp/
[root@localhost ~]#ll /var/spod/mail/lamp
-rw-rw---- 1 lamp mail 0 1月6 00:19 /var/spool/mail/lamp

注意这两个文件的权限,都要让 lamp 用户拥有相应的权限。

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

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

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

[root@localhost ~]# groupadd lamp1
#先手工添加lamp1用户组,因为我一会儿要把lamp1用户的初始迎指定过来,如果不事先建立,则会报告用户组不存在
[root@localhost ~]# useradd -u 550 -g lamp1 -G root -d /home/lamp1 -c "test user" -s /bin/bash lamp1
#在建立用户lamp1的同时,指定了UID(550)、初始组(lamp1)、附加组(root)、家目录(/home/lamp1/)、用户说明(test user)和用户登录Shell(/bin/bash)
[root@localhost ~]# grep "lamp1" /etc/passwd /etc/shadow /etc/group
#同时查看三个文件
/etc/passwd:lamp1:x:550:502:test user:/home/lamp1:/bin/bash
#用户的UID、初始组、用户说明、家目录和登录Shell都和命令手工指定的一致
/etc/shadow:lamp1:!!:15710:0:99999:7:::
#lamp1用户还没有设定密码
/etc/group:root:x:0:lamp1
#lamp1用户加入了root组,root组是lamp1用户的附加组
/etc/group:lampl:x:502:
#GID为502的组是lamp1组
[root@localhost ~]#ll -d /home/lamp1/
drwx------ 3 lamp1 lamp1 4096 1月6 01:13 /home/lamp1/
#家目录也建立了,不需要手工建立

通过以上 2 种方式,都可以成功创建用户。通常情况下,根本不需要手工指定任何内容,因为使用默认值就可以满足我们的要求。那你有没有想过,useradd 命令的这些默认值保存哪里,能否手工修改呢?

答案是肯定的。useradd 命令在添加用户时参考的默认值文件主要有两个,分别是 /etc/default/useradd 和 /etc/login.defs。大家详细了解 /etc/default/useradd 文件。

/etc/default/useradd 文件

首先,使用 Vim 命令查看 /etc/default/useradd 文件中包含哪些内容

[root@localhost ~]#vim /etc/default/useradd
# useradd defaults file
GR0UP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

另外,也可以直接通过命令进行查看,结果是一样的:

[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

-D 选项指的就是查看新建用户的默认值。

表 2 对此文件中的各项做了详细的解释。

表 2 /etc/default/useradd 文件内容
参数 含义
GR0UP=100 这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说这个选项并不会生效。

Linux 中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。目前我们采用的是私有用户组机制。

HOME=/home 指的是用户主目录的默认位置,所有新建用户的主目录默认都在 /home/下,刚刚新建的 lamp1 用户的主目录就为 /home/lamp1/。
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/ 目录下,和用户名相同。例如,lamp1 的邮箱位于 /var/spool/mail/lamp1。

注意,此文件中各选项值的修改方式有 2 种,一种是通过 Vim 文本编辑器手动修改,另一种就是使用文章开头介绍的 useradd 命令,不过所用的命令格式发生了改变:

useradd -D [选项] 参数

用此命令修改 /etc/default/useradd 文件,可使用的选项如表 3 所示。

useradd -D 命令可用选项
选项+参数 含义
-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@localhost ~]# useradd -D -s /bin/csh
[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/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 目录中的所有文件到此主目录中,由此,一个新的用户就创建完成了。

当然,如果你能彻底掌握 useradd 命令创建用户的整个过程,完全可以手动创建用户。


userdel

userdel 命令功能很简单,就是删除用户的相关数据。此命令只有 root 用户才能使用。

用户的相关数据包含如下几项:

  • 用户基本信息:存储在 /etc/passwd 文件中;
  • 用户密码信息:存储在 /etc/shadow 文件中;
  • 用户群组基本信息:存储在 /etc/group 文件中;
  • 用户群组信息信息:存储在 /etc/gshadow 文件中;
  • 用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名。

其实,userdel 命令的作用就是从以上文件中,删除与指定用户有关的数据信息。

userdel 命令的语法很简单,基本格式如下:

[root@localhost ~]# userdel -r 用户名

-r 选项表示在删除用户的同时删除用户的家目录。

注意,在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录,也就是垃圾文件。

例如,删除创建的 lamp 用户,只需执行如下命令:

[root@localhost ~]# userdel -r lamp

除了使用 userdel 命令删除用户,还可以手动方式删除,毕竟通过前面的学习,我们已经知道与用户相关信息的存储位置。虽然这样做没有实际意义,但对于初学者来说,可以加深对 userdel 命令的理解。

手动删除指定用户的具体操作如下:

#建立新 lamp 用户
[root@localhost ~]# useradd lamp
[root@localhost ~]# passwd lamp
#为 lamp 用户设置密码,由此 lamp 用户才算是创建成功
#下面开始手动删除 lamp
[root@localhost ~]# vi /etc/passwd
lamp:x:501:501::/home/lamp:/bin/bash   <--删除此行
#修改用户信息文件,删除lamp用户行
[root@localhost ~]#vi /etc/shadow
lamp:$6$KoOYtcOJ $56Xk9vp3D2vMRBxibNOn.21cVJ9onbW8IHx4WrOx6qBqfGa9U3mjMsGjqYnj L/4t3zt3YxElce2X8rbb12x4a0:15716:0:99999:7:::   <--删除此行
#修改影子文件,删除lamp用户密码行,注意,这个文件的权限是000,所以要强制保存
[root@localhost ~]#vi /etc/group
lamp:x:501:  <--删除此行
#修改组信息文件,删除lamp群组信息
[root@localhost ~]#vi /etc/gshadow
lamp:!::  <--删除此行
#修改组影子文件,删除lamp群组密码信息。同样注意需要强制保存
[root@localhost ~]# rm -rf /var/spod/mail/lamp  #删除用户邮箱
[root@localhost ~]# rm -rf/home/lamp/  #删除用户的家目录
#至此,用户彻底删除,再新建用户lamp。如果可以正常建立,则说明我们手工删除干净了
[root@localhost ~]# useradd lamp
[root@localhost ~]# passwd lamp
#重新建立同名用户,没有报错,说明前面的手工删除是可以完全删除用户的

手动删除用户,仅是为了让读者对 userdel 命令理解地更透彻,实际使用中,使用 userdel 删除用户更方便。

最后需要大家注意的是,如果要删除的用户已经使用过系统一段时间,那么此用户可能在系统中留有其他文件,因此,如果我们想要从系统中彻底的删除某个用户,最好在使用 userdel 命令之前,先通过 find / -user 用户名 命令查出系统中属于该用户的文件,然后在加以删除。

Linux useradd userdel命令相关推荐

  1. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  2. Linux 系统管理 : userdel 命令详解

    userdel命令用于删除给定的用户,以及与用户相关的文件.若不加选项,则仅删除用户帐号,而不删除相关文件. 语法 userdel(选项)(参数) 选项 -f:强制删除用户,即使用户当前已登录: -r ...

  3. Linux命令 - userdel命令

    Linux命令 - userdel命令   Linux中 userdel 命令用于删除用户帐号. 1.语法: userdel [参数] [用户帐号] 2.功能:   可删除用户帐号与相关的文件.若不加 ...

  4. linux命令菜鸟userdel,Linux userdel命令用法详解

    userdel是什么 userdel 是一个底层用于删除用户的工具.在 Debian 上,我们通常会使用 deluser 命令.userdel 会查询系统账户文件,例如 /etc/password 和 ...

  5. Linux命令解释之useradd,userdel,usermod

    useradd,userdel,usermod

  6. linux小白-基础命令-useradd

    useradd [功能说明]:Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助 ...

  7. linux useradd命令使用示例

    Linux useradd 命令用于建立用户帐号. useradd 可用来建立用户帐号.帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号.使用 useradd 指令所 ...

  8. Linux useradd命令

    Linux useradd命令  Linux 命令大全 Linux useradd 命令用于建立用户帐号. useradd 可用来建立用户帐号.帐号建好之后,再用 passwd 设定帐号的密码.而可用 ...

  9. Linux 用户(useradd/userdel/groupadd/groupmod

    用户操作 linux用户操作保证了系统的安全性 /etc/passwd 文件 查看用户信息 /etc/shadow 用户信息加密 添加用户 用来向Linux系统添加新用户的主要工具是 useradd ...

最新文章

  1. windows XP下Python2.7包管理工具安装-setuptool,pip、distribute、nose、virtualenv
  2. Matplotlib 放置legend(bbox_to_anchor)
  3. react开发心路历程
  4. 聊聊高并发(四十)解析java.util.concurrent各个组件(十六) ThreadPoolExecutor源码分析
  5. 计算机如何实现共享接入,局域网内电脑实现共享设置方法
  6. Java EE 8 MVC:使用bean参数
  7. 事件图谱是什么?它能预测未来吗?
  8. python缩放图片,复制即用
  9. [转载]一个任务超时退出的装饰器,用起来真方便
  10. [CF592D]Super M
  11. NIO的基本概念和缓冲区
  12. 世界各国各地区名称代码对应表
  13. 淘宝获取收货地址列表的 API
  14. html表格复制最后一行字,为什么Word中的表格输入文字最后一行文字会自动跳到下一页...
  15. 这届年轻人追热点、爱国货 2021年购物车里藏着“青年情绪”
  16. python多线程爬取美图录网站图集按模特姓名存储到本地(一)
  17. 5个高质量简历模板网站,免费、免费、免费
  18. clover UEFI+GUID最简单显核安装黑苹果教程(易懂)
  19. 搜狗云输入法、Google手机语音搜索:两款创新云产品
  20. C语言handle对象对应java,c语言和java语言之间的关系到底是怎么样的,两种 体系?还是一种体系的不同阶段?还是其它的什么?...

热门文章

  1. 找工作:社招你会遇到的坑!校招你了解多少?(全面干货)
  2. 数学真题 2014-2015
  3. AEG电网连接中心逆变器PV.500-ID-UL
  4. maven项目打包成zip文件
  5. sort函数自定义排序
  6. python records_Python Pandas DataFrame.to_records用法及代码示例
  7. 云原生|kubernetes|rancher-2.6.4安装部署简明手册
  8. Ubuntu下的终端设置(分清Terminal与Terminator)-Terminator个性化主题设置
  9. 商城首页布局实现(HTML源码)
  10. TensorFlow-gpu2.0.0 + Anaconda + Win10(MX250)安装教程