一、id命令

可以用来查看用户的UID、GID和附加组信息

id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。

1.格式

id [OPTION]... [USER]
id [-gGnru][--help][--version][用户名称]

2.参数:

  -a        忽略,为了与其他版本的兼容性
  -Z, --context  只打印当前用户的安全上下文

  -u, --user    只打印用户有效的ID
  -g, --group     只打印有效的组ID
  -G, --groups  打印所有的组【附加组】ID
  -n, --name     打印名称而不是数字。适用于 -ugG
  -r, --real      打印真实的ID替代有效的ID。 对-ugG 而言
  -z, --zero delimit entries with NUL characters, not whitespace;
not permitted in default format
--help display this help and exit
--version output version information and exit

4.使用

[root@VM_0_10_centos shellScript]# id root
uid=(root) gid=(root) groups=(root)

PS:能看到uid(用户ID)、gid(初始组ID), groups是用户所在组,这里既可以看到初始组,如果有附加组,则也能看到附加组

5.案例

[root@VM_0_10_centos shellScript]# id -nug root
id: cannot print "only" of more than one choice
[root@VM_0_10_centos shellScript]# id -ng root
root
[root@VM_0_10_centos shellScript]# id -nu root
root
[root@VM_0_10_centos shellScript]# id -n root
id: cannot print only names or real IDs in default format
[root@VM_0_10_centos shellScript]# id -r
id: cannot print only names or real IDs in default format
[root@VM_0_10_centos shellScript]# id -ru [root@VM_0_10_centos shellScript]# id -ru root [root@VM_0_10_centos shellScript]# id -rg root [root@VM_0_10_centos shellScript]# id -rG root [root@VM_0_10_centos shellScript]# id -ruG root
id: cannot print "only" of more than one choice

PS: -nr 不能和ugG连用,只能使用-nu或-nG、-ng。-r同理

6.查看命令所在位置和类型

[root@VM_0_10_centos shellScript]# whereis id
id: /usr/bin/id /usr/share/man/man1/id..gz
[root@VM_0_10_centos shellScript]# type id
id is hashed (/usr/bin/id)

二、usermod命令

  修改系统帐户文件来反映通过命令行指定的变化(修改用户账户的各项设置)

  /etc/passwd文件中的每个用户都有一个对应的记录行,记录着这个用户的基本属性。该文件对所有用户可读。

  /etc/shadow文件是passwd文件的一个影子,/etc/shadow文件中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。但是/etc/shadow文件只有系统管理员才能够进行修改和查看。

1.格式

usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]

2.参数

-a | --append      ##把用户追加到某些组中,仅与-G选项一起使用
-c | --comment ##修改/etc/passwd文件第五段comment
-d | --home ##修改用户的家目录通常和-m选项一起使用
-e | --expiredate ##指定用户帐号禁用的日期,格式YY-MM-DD
-f | --inactive ##用户密码过期多少天后采用就禁用该帐号,0表示密码已过期就禁用帐号,-1表示禁用此功能,默认值是-
-u | --uid         ##修改用户的uid,该uid必须唯一
-g | --gid         ##修改用户的gid,改组一定存在
-G | --groups ##把用户追加到某些组中,仅与-a选项一起使用
-l | --login ##修改用户的登录名称
-L | --lock ##锁定用户的密码
-m | --move-home ##修改用户的家目录通常和-d选项一起使用
-s | --shell ##修改用户的shell
-u | --uid ##修改用户的uid,该uid必须唯一
-U | --unlock ##解锁用户的密码

3.案例

1)新建test1账户,密码自己设置,添加用户组gtest1

[root@VM_0_10_centos shellScript]# useradd test1
[root@VM_0_10_centos shellScript]# echo "密码" | passwd --stdin test1
[root@VM_0_10_centos shellScript]# groupadd gtest1

2)将test1用户加入到用户组gtest1中(多个组之间用空格隔开)

[root@VM_0_10_centos shellScript]# usermod -aG gtest1 test1
[root@VM_0_10_centos shellScript]# id test1
uid=(test1) gid=(test1) groups=(test1),(gtest1)

3)修改用户的家目录为usertest

[root@VM_0_10_centos shellScript]# usermod -md /home/usertest1 test1
[root@VM_0_10_centos shellScript]# ll /home/
drwx------ test1 test1 Oct : usertest1

4)修改用户名称

[root@VM_0_10_centos shellScript]# usermod -l usertest1 test1
[root@VM_0_10_centos shellScript]# id usertest1
uid=(usertest1) gid=(test1) groups=(test1),(gtest1)

5)锁定usertest1的密码

# 查看usertest1用户的密码
# $p:匹配$最后一行  /$/p:匹配带$的所有行
[root@VM_0_10_centos shellScript]# sed -n '$p' /etc/shadow
usertest1:$$iXyz/MbY$7gYSO3kumZXgiH.jYVkst/:::::::
[root@VM_0_10_centos shellScript]# usermod -L usertest1
[root@VM_0_10_centos shellScript]# sed -n '$p' /etc/shadow
usertest1:!$$iXyz/MbY$7gYSO3kumZXgiH.jYVkst/:::::::
# 查看用户密码锁定状态
[root@VM_0_10_centos shellScript]# passwd -S usertest1
usertest1 LK -- - (Password locked.)

或使用passwd锁定密码

[root@rhel7 ~]# passwd -l usertest1    --- -l 锁定
Locking password for user usertest1.
passwd: Success
[root@rhel7 ~]# passwd -S usertest1 --- 查看状态
usertest1LK -- - (Password locked.)
[root@rhel7 ~]# passwd -u usertest1 --- 解锁
Unlocking password for user usertest1.
passwd: Success
[root@rhel7 ~]# passwd -S usertest1
usertest1 PS -- - (Password set, SHA512 crypt.)

6)解锁usertest1的密码

[root@VM_0_10_centos usertest1]# usermod -U usertest1
[root@VM_0_10_centos usertest1]# sed -n '$p' /etc/shadow
usertest1:$$iXyz/MbY$7gYSO3kumZXgiH.jYVkst/:::::::

7)修改用户的shell

# $!d:最后一行不删除($表示最后一行)  d: 删除pattern中的所有行,并读入下一新行到pattern中
[root@VM_0_10_centos usertest1]# sed -n '$p' /etc/passwd
usertest1:x::::/home/usertest1:/bin/bash
[root@VM_0_10_centos usertest1]# sed '$!d' /etc/passwd
usertest1:x::::/home/usertest1:/bin/bash
[root@VM_0_10_centos usertest1]# usermod -s /bin/sh usertest1
[root@VM_0_10_centos usertest1]# sed '$!d' /etc/passwd
usertest1:x::::/home/usertest1:/bin/sh

手动编辑 vi /etc/passwd 找到usertest1编辑保存即可

8)修改用户的UID、GID

[root@VM_0_10_centos usertest1]# usermod -u  usertest1
[root@VM_0_10_centos usertest1]# usermod -g test1

9)指定账户过期日期

[root@VM_0_10_centos usertest1]# sed -n '$p' /etc/shadow  
usertest1:$$iXyz/MbY$7gYSO3kumZXgiH.jYVkst/:::::::
[root@VM_0_10_centos usertest1]# usermod -e -- usertest1
[root@VM_0_10_centos usertest1]# sed -n '$p' /etc/shadow
usertest1:$$iXyz/MbY$7gYSO3kumZXgiH.jYVkst/:::::::

10)指定用户帐号密码过期多少天后,禁用该帐号

[root@VM_0_10_centos usertest1]# usermod -f  usertest1
[root@VM_0_10_centos usertest1]# sed -n '$p' /etc/shadow
usertest1:$$iXyz/MbY$7gYSO3kumZXgiH.jYVkst/:::::::

PS:  usermod不允许你改变正在线上的使用者帐号名称。当usermod用来改变userID,必须确认这名user没在电脑上执行任何程序

三、用户文件详解

1./etc/passwd、/etc/shadow

1)/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段

其格式和具体含义如下:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

字段解释:

  用户名(login_name):代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
  口令(passwd):存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
  用户标识号(UID):是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。取值范围是0-65535。0是超级用户root的标识号,1-99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。
  组标识号(GID):用户所属的用户组。它对应着/etc/group文件中的一条记录。
  注释性描述(users):字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
  主目录(home_directory):用户的起始工作目录(家目录),它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
  登录Shell(Shell):用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。

2)/etc/shadow文件格式与/etc/passwd文件格式类似,同样由若干个字段组成,字段之间用“:”隔开。

字段主要含义为:

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

字段解释:

  登录名:是与/etc/passwd文件中的登录名相一致的用户账号
  口令:存放的是加密后的用户口令:

    如果为空,则对应用户没有口令,登录时不需要口令;
    星号代表帐号被锁定;
    双叹号表示这个密码已经过期了;
    $6$开头的,表明是用SHA-512加密;
    $1$表明是用MD5加密;
    $2$ 是用Blowfish加密;
    $5$ 是用 SHA-256加密;
  最后一次修改时间:表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCOLinux中,这个时间起点是1970年1月1日

  最小时间间隔:指的是两次修改口令之间所需的最小天数。
  最大时间间隔:指的是口令保持有效的最大天数。
  警告时间:表示的是从系统开始警告用户到用户密码正式失效之间的天数。
  不活动时间:表示的是用户没有登录活动但账号仍能保持有效的最大天数。
  失效时间:给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。

2./etc/group、/etc/gshadow文件

1)/etc/group

  包括用户组(Group):用户组口令:GID及该用户组所包含的用户(User):每个用户组一条记录

格式如下:

group_name:passwd:GID:user_list

2)/etc/gshadow

  /gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必的。比如我们不想让一些非用户组成员永久拥有用户组的权限和特性,这时我们可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用到用户组密码。

格式如下,每个用户组独占一行;

groupname:password:admin,admin,…:member,member,…

字段解释:

  第一字段:用户组
  第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;
  第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;
  第四字段:组成员,如果有多个成员,用,号分割;

【Linux命令】id,usermod用户管理命令(包括/etc/passwd、shadow、group、gshadow文件)的更多相关文章

  1. lesson - 5 课程笔记 which/ type / whereis /locate /pwd / etc/passwd/ shadow/ group / gshadow /useradd /usermod /userdel /passwd / su sudo

    一.which 作用: which 命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录, which 命令会在环境变量$PATH 设置的目录里查找符合条件的文件.也 ...

  2. Linux系列教程(七)——Linux帮助和用户管理命令

    上篇博客我们介绍了Linux文件搜索命令,其中find是用的最多的也是功能最强大的文件或目录搜索命令,和另一个搜索命令locate的区别是,find命令是全盘搜索,刚创建的文件也能搜索的到,而loca ...

  3. Linux常用命令之帮助和用户管理命令

    目录 1.帮助命令 一.获得命令或配置文件帮助信息:man 二.获得shell内置命令的帮助信息:help 三.获得命令的中文帮助信息:--help 2.用户管理命令 一.添加新用户:useradd ...

  4. Linux系列教程(七)——Linux常用命令之帮助和用户管理命令

    上篇博客我们介绍了Linux文件搜索命令,其中find是用的最多的也是功能最强大的文件或目录搜索命令,和另一个搜索命令locate的区别是,find命令是全盘搜索,刚创建的文件也能搜索的到,而loca ...

  5. Linux 用户篇——用户管理命令之id、whoami、su、chage

    一.浅谈id.whoami.su.chage 本篇是续写上一篇<Linux 用户篇——用户管理命令之useradd.passwd.userdel.usermod>. (1)id命令 命令格 ...

  6. Linux 用户篇——用户管理命令之useradd、passwd、userdel、usermod

    一.用户重要,用户管理命令同样重要 用户是Linux系统安全的核心,每个登录Linux系统的用户都会分配相应的权限,这些权限取决于能否访问系统中各种对象.而管理这些用户的相关信息离不开用户管理命令,比 ...

  7. Linux用户管理命令大全

    1.添加用户,首先用adduser命令添加一个普通用户,命令如下: $ adduser tommy //添加一个名为tommy的用户 $ passwd tommy //修改密码 Changing pa ...

  8. Linux学习之用户管理命令与用户组管理命令(十五)

    Linux学习之用户管理命令与用户组管理命令 目录 用户管理命令 用户添加命令useradd 修改用户密码passwd 修改用户信息usermod 修改用户密码状态chage 删除用户userdel ...

  9. linux笔记:用户管理命令和用户组管理命令

    用户管理命令 命令名称:useradd功能:添加用户(添加完后不能立即使用,必须用passwd修改用户密码后才能使用)用法:useradd [选项] 用户名选项参数:-u 手工指定用户的UID-d 手 ...

随机推荐

  1. django的使用INNODE的方式,排除错误MySQL Strict Mode is not set for database connection 'default'

    出现如下错误: 解决办法: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mxshop', 'HO ...

  2. linux系统的特殊符号

    符号 作用 示例 # 注释符号,井号后的内容不会执行 echo #WORD ~ 当前用户的家目录 cd ~ ; 命令顺序执行,前面执行成功与否对后面没影响 COMMAND1 ; COMMAND2 &a ...

  3. Metasploit从文件中读取目标地址

    本文简单介绍如何使用Metasploit从文件中读取目标地址,来执行检测. 以检测MS17-010漏洞为例,在设定RHOSTS参数时,可设定目标地址范围和CIDR地址块,设定单个IP的目标也是可以的. ...

  4. UNIX系统编程知识点总结——思维导图

    根据考纲整理了一下本学期系统编程课的知识点,并且做成了思维导图便于理解和记忆 主要都是一些比较入门的知识点,UNIX博大精深,每一个知识点其实都能深挖 因为博客园不可能直接出思维导图,本文的主要内容都 ...

  5. 浏览器及Windows常用快捷键汇总

    浏览器常用快捷键: F5 刷新 Ctrl+N 打开新窗口 Ctrl+T 打开新标签 Ctrl +  O  打开浏览器的时候打开文件 Ctrl+Shift+N 隐身模式打开窗口 F2 F3 切换  Ct ...

  6. 如何在动态链接库dll/so中导出自定义的模板类template class | how to implement a template class with c++ and export in dll/so

    本文首发于个人博客https://kezunlin.me/post/4ec4ae49/,欢迎阅读最新内容! how to implement a template class with c++ and ...

  7. 四面快手、终拿Offer,想告诉你的一些事情

    本篇面经来自于群里粉丝朋友的分享,希望对你有所帮助! 快手高开及以上职级面试 是没有笔试或者机试的,所以从第一轮开始就是直接面对面试官. 一轮 主要考察对Java基础的理解和深入程度. Spring ...

  8. NFS深度解析及搭建同步NFS服务

    1.nfs 进程 [root@nfsserver ~]# ps -ef|egrep "nfs|rpc" rpcuser : ? :: rpc.statd -->检查文件一致性 ...

  9. Python 从入门到进阶之路(三)

    在之前的文章我们介绍了一下 Python 中 if while for 的使用,本章我们来看一下 Python 中的变量类型. 在 Python 定义变量时的规则是 变量名 = 变量 ,Python ...

  10. Java 并发编程 | 线程池详解

    原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...