`

Linux学习笔记-5. 用户和用户组管理

 
阅读更多

 

5.用户和用户组管理

5.1.用户配置文件

越是对服务器安全性要求高的服务器,越是需要建立合理的用户权限等级制度和服务器操作规范。

在Linux中主要是通过用户配置文件 来查看和修改用户信息

5.1.1.用户信息文件/etc/passwd

 

每一行代表一个用户,通过冒号分隔出7个字段

root:x:0:0:root:/root:/bin/bash

 

1个字段:root 用户名称

2个字段:x 密码标识,相当于密码占位符,真正存储在/etc/shadow

3个字段:0 UID,用户UID

         0:超级用户,系统以ID来识别是否为超级用户,默认为root,如果一个用户变成超级用户,只需要将其UID改为0即可。

         1-499:系统用户,伪用户,这些用户不能删除,不能登录

         500-65535:普通用户,的centos7中添加了一个普通用户,默认ID1000

4个字段:0 GID 用户初始组ID

         初始组:就是指用户一登录就立刻拥有这个用户组相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。不建立修改初始组,不符合常用规范。初始组只能有一个。

         附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。

 

5个字段:root 用户说明

6个字段:/root 家目录

         普通用户:/home/用户名/

         超级用户:/root/

7个字段:/bin/bash 登录之后的Shell

         Shell就是Linux的命令解释器

         /etc/passwd当中,除了标准的Shell/bin/bash之外,还可以是/sbin/nologin,表示禁止登录。

 

         这个Shell如果改错了,就麻烦了,命令就解释不了,就无法登录了。

 

 

5.1.2.影子文件/etc/shadow

 

shadow只有root用户才能改

[root@localhost etc]# ll shadow

----------. 1 root root 686 Apr 26 23:22 shadow

 

可以理解为passwd的影子,保存的是用户的经过加密的密码

每一行代表一个用户的密码信息,通过冒号分隔出9个字段

 

test:$6$10O6OnRx$zWQIJ3sdfassdN6pE/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVasdh1:17647:0:99999:7:::

 

1个字段:test 用户名

2个字段:表示的是加密密码

$6$10O6OnRx$zWQIJ3sdfassdN6pE/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVasdh1

         加密算法升级为SHA512散列加密算法

         如果密码位是!!* 代表没有密码,不能远程登录。ssh协议禁止空密码远程登录

         可以加密密码前加上!号,把密码换算失败,相当于临时禁用用户登录。

3个字段:17647 密码最后一次修改日期

         使用1970-01-01作为标准时间,每过1 时间戳加117647表示从1970-01-01年到修改密码的那1天总共过的天数。

4个字段:0 两次密码修改间隔时间的天数,和第3个字段相比

5个字段:99999 密码有效期的天数,和第3个字段相比

6个字段:7 密码修改到期前后警告天数,和第5个字段相比

7个字段:密码过期之后宽限的天数,如果没有用户过期则直接禁止

         0:代表密码过期后立即失效,和不写是一样的

         -1:则代表密码永远不会失效

8个字段:帐号失效时间

         要用时间戳表示。

        

把时间戳换算为日期:

                  date -d "1970-01-01 17647 days"

                 

[root@localhost ~]# date -d "1970-01-01 17647 days"

Thu Apr 26 00:00:00 CST 2018

[root@localhost ~]#

 

         把日期换算为时间戳:

                   echo $(($(date --date="2018/04/30" +%s)/86400+1))

                  

                   [root@localhost ~]# echo $(($(date --date="2018/04/30" +%s)/86400+1))

17651

[root@localhost ~]# echo $(($(date --date="2018/04/26" +%s)/86400+1))

17647

[root@localhost ~]#

 

9个字段:保留

 

 

 

 5.1.3.组信息文件/etc/group和组密码文件/etc/gshadow

 

组信息文件/etc/group

 

root:x:0:

 

1个字段:root 组名,默认和用户名是一样的

2个字段:x 组的密码标志位,密码是在gshadow文件中存放

3个字段:GID,组ID

4个字段:组中附加用户

 

 

 

密码文件/etc/gshadow

 

root:::

 

1个字段:组名

2个字段:组密码

3个字段:组管理员用户名

4个字段:组中附加用户

 

 

组管理员一般不使用

 

 

 5.2.用户管理相关文件

 

用户的家目录:

普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700

超级用户:/root/,所有者和所属组都是root用户,权限是550

 

 

test用户变成超级用户

passwd中,将其UID修改为0即可

 

 

超级用户的提示符是:#

普通用户的提示符是:$

 

[root@localhost ~]#

 

 

用户的邮箱

/var/spool/mail/用户名/

添加用户时,邮件默认自动创建

 

[root@localhost ~]# cd /var/spool/mail

[root@localhost mail]# ls

root  test

 

 

用户模板目录

当创建一个用户,用户自动创建许多目录和文件,都是从这个模板里面生成的。

用户的home目录都是从这里复制过来的,所以放在这里面的文件会复制到新创建用户的家目录中

 

 

/etc/skel

 

 

5.3.用户管理命令

 

 

 

5.3.1.用户添加命令useradd

 

useradd [选项] 用户名

 

-u UID 手工指定用户的UID

-d 家目录 手工指定用户的家目录,不建议手动指定。

-c 用户说明,手工指定用户的说明

-g 组名,手工指定用户的初始组

-G 组名,指定用户的附加组

-s sheel,指工指定用户的登录shell,默认是/bin/bash

 

 

添加用户test

user test

 

添加用户时,系统都执行什么操作?

1passwd文件

[root@localhost skel]# grep test /etc/passwd

test:x:1000:1000::/home/test:/bin/bash

2shadow文件

[root@localhost skel]# grep test /etc/shadow

test:$6$10O6OnRx$zWQIJ3WtmLRN6pE/asdfsadfs.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVph1:17647:0:99999:7:::

3、组文件

[root@localhost skel]# grep test /etc/group

test:x:1000:

4gshadow文件

[root@localhost skel]# grep test /etc/gshadow

test:!::

5、家目录

[root@localhost skel]# ll -d /home/test/

drwx------. 2 test test 83 Apr 26 23:04 /home/test/

6、邮件

[root@localhost skel]# ls /var/spool/mail

root  test

 

 

用户默认值文件

/etc/default/useradd

 

[root@localhost ~]# cat /etc/default/useradd

# useradd defaults file

GROUP=100                                          #用户默认组

HOME=/home                                      #用户家目录

INACTIVE=-1                                         #密码过期宽限天数,shadow文件的7字段

EXPIRE=                                                  #密码失效时间,shadow文件的字段8

SHELL=/bin/bash                                  #默认shell

SKEL=/etc/skel                                               #模板目录

CREATE_MAIL_SPOOL=yes               #是否建立邮箱

 

 

用户默认值文件

/etc/login.defs

 

 

[root@localhost ~]# cat /etc/login.defs

#

# Please note that the parameters in this configuration file control the

# behavior of the tools from the shadow-utils component. None of these

# tools uses the PAM mechanism, and the utilities that use PAM (such as the

# passwd command) should therefore be configured elsewhere. Refer to

# /etc/pam.d/system-auth for more information.

#

 

# *REQUIRED*

#   Directory where mailboxes reside, _or_ name of file, relative to the

#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.

#   QMAIL_DIR is for Qmail

#

#QMAIL_DIR      Maildir

MAIL_DIR        /var/spool/mail

#MAIL_FILE      .mail

 

# Password aging controls:

#

#       PASS_MAX_DAYS   Maximum number of days a password may be used.

#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.

#       PASS_MIN_LEN    Minimum acceptable password length.

#       PASS_WARN_AGE   Number of days warning given before a password expires.

#

PASS_MAX_DAYS   99999               #密码有效期,shadow文件字段5

PASS_MIN_DAYS   0                         #密码修改间隔,shadow文件字段4

PASS_MIN_LEN    5                         #密码最小5位,PAM

PASS_WARN_AGE   7                       #密码到期警告,shadow文件字段6

 

#

# Min/max values for automatic uid selection in useradd

#

UID_MIN                  1000               #UID最小值

UID_MAX                 60000              #UID最大值

# System accounts

SYS_UID_MIN               201

SYS_UID_MAX               999

 

#

# Min/max values for automatic gid selection in groupadd

#

GID_MIN                  1000

GID_MAX                 60000

# System accounts

SYS_GID_MIN               201

SYS_GID_MAX               999

 

#

# If defined, this command is run when removing a user.

# It should remove any at/cron/print jobs etc. owned by

# the user to be removed (passed as the first argument).

#

#USERDEL_CMD    /usr/sbin/userdel_local

 

#

# If useradd should create home directories for users by default

# On RH systems, we do. This option is overridden with the -m flag on

# useradd command line.

#

CREATE_HOME     yes

 

# The permission mask is initialized to this value. If not specified,

# the permission mask will be initialized to 022.

UMASK           077

 

# This enables userdel to remove user groups if no members exist.

#

USERGROUPS_ENAB yes

 

# Use SHA512 to encrypt password.

ENCRYPT_METHOD SHA512            #密码加密模式

 

[root@localhost ~]#

 

 

 5.3.2.修改用户密码passwd

 

语法:

passwd [选项] 用户名

 

-S 查询用户密码的密码状态,仅root用户可以用。

-l 暂时锁定用户。仅root可用。

-u 解锁用户。仅root可用。

--stdin 可以通过管道符输出的数据作为用户的密码

 

 

查询test用户密码的密码状态

[root@localhost ~]# passwd -S test

test PS 2018-04-26 0 99999 7 -1 (Password set, SHA512 crypt.)

 

test 用户名

PS

2018-04-26 密码最后修改时间

0密码修改间隔时间

99999 密码有效期

7 密码过期前几天提示警告

-1 密码失效时间,-1表示不失效

 

 

锁定用户时,是在密码前增加了两个感叹号:!!,相当于暂时锁定用户

[root@localhost ~]# passwd -l test

Locking password for user test.

passwd: Success

[root@localhost ~]# grep test /etc/shadow

test:!!$6$10O6OnRx$sSDFSDAF/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVph1:17647:0:99999:7:::

 

解锁用户时,是把!!去掉就行了,可以用命令,也可以直接修改shadow文件

 

管道设置密码

echo "123" | passwd --stdin test

这种方式一般在脚本文件中使用,这种密码是明文,需要登录后修改,确保安全。

 

 

普通用户只能改自己的密码,超级用户可以自己和别人的密码。

 

给当前用户设置密码时,用户名就不需要输入了

 

 

 5.3.3.修改用户信息usermod

 

 

英文原意:user modify

 

语法:

usermod [选项] 用户名

 

-u UID 手工指定用户的UID

-c 用户说明,手工指定用户的说明

-G 组名,指定用户的附加组

-L 临时锁定用户Lock

-U 解锁用户Unlock

 

useradd中的选项在usermod中基本都可以使用

 

 

用户test的用户说明修改:

[root@localhost ~]# usermod -c "This is a test user" test

[root@localhost ~]# grep test /etc/passwd

test:x:1000:1000:This is a test user:/home/test:/bin/bash

 

 

 5.3.4.修改用户密码状态chage

 

 

 

  

语法:

chage  [选项] 用户名

 

-l 列表用户的详细密码状态

-d 日期:修改密码最后一次更改日期,shadow文件字段3

-m 天数:两次密码修改间隔,shadow文件字段4

-M 天数:密码有效期,shadow文件字段5

-W 天数:密码过期前警告天数,shadow文件字段6

-I 天数:密码过期后宽限天数,shadow文件字段7

-E 日期:帐号失效时间,shadow文件字段8

 

 

[root@localhost ~]# chage -l test

Last password change                                    : Apr 26, 2018

Password expires                                        : never

Password inactive                                       : never

Account expires                                         : never

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

[root@localhost ~]#

 

 

把密码最后修改日期设置为0shadow文件字段3,这样用户一登录就要修改密码。

chage –d 0 test

 

 5.3.5.删除用户userdel

 

英文愿意:user delete

语法:

userdel  [选项] 用户名

-r 删除用户时,同时删除用户的家目录

 

 

手工删除用户,这样删除并不方便,这里只是说明一下删除时都删除什么内容

vim /etc/passwd

vim /etc/shadow

vim /etc/group

vim /etc/gshadow

rm –rf /var/spool/mail/test

rm –rf /home/test

 

id命令

查看用户ID

id 用户名

[root@localhost ~]# id test

uid=1000(test) gid=1000(test) groups=1000(test)

 

 

 

 5.3.6.用户切换命令su

 

 

英文愿意:switch user?

语法:

su  [选项] 用户名

 

<!--[if !supportLists]-->-          <!--[endif]-->表示将用户的环境变量一起切换。如果不加个选项,会导致只切换了一部分过去,例如家目录,邮件等信息还是切换之前用户的。

-c  仅执行一次命令,而不切换用户身份

 

 

不切换root用户的身份,只是执行root用户的命令,添加一个用户test2

su - root -c "useradd test2"

 

 

 5.4.用户组管理命令

 

 

 

添加用户组

groupadd [选项] 组名

-g GID 指定组ID

 

groupadd group1

 

修改用户组

groupmod [选项] 组名

-g GID 修改组ID

-n 新组名:修改组名

 

groupmod –n newgroup group1

 

 

删除用户组

groupdel 组名

 

如果组中有初始用户存在,则组是删除不掉的。

 

 

把用户添加入组或从组中删除

gpasswd  选项 组名

-a 用户名:把用户加入组

-d 用户名:把用户从组中删除

 

 

 

 

 

 

分享到:
评论

相关推荐

    软件测试第二天学习笔记-JMeter.zip_jmeter_shown14l

    【标题解析】:“软件测试第二天学习笔记-JMeter.zip_jmeter_shown14l”这个标题表明这是一份关于软件测试的材料,特别是聚焦在JMeter工具的第二日学习内容。"JMeter.zip"提示这是一个压缩文件,包含了与JMeter相关...

    linux-lab-master.zip

    - **权限与用户管理**:掌握`chmod`、`chown`和`chgrp`命令,以及理解用户和组的概念。 - **进程管理**:学习启动、停止、监控和控制进程,如`ps`、`top`和`kill`命令。 - **网络配置**:了解`ifconfig`、`netstat`...

    Linux学习笔记PDF文档.pdf

    此外,权限和用户管理是Linux系统管理的重要部分。笔记会讲解用户和组的概念,如何使用chown、chgrp和chmod命令改变文件和目录的所有权和权限,以及sudo和su命令的使用。 系统管理和维护也是关键内容。笔记可能会...

    linux学习笔记--很经典

    本篇“Linux学习笔记”详细介绍了Linux的基本目录结构及其各自的功能,这对于初学者理解Linux系统的核心概念非常重要。 #### 二、Linux目录结构解析 1. **/(根目录)** - 根目录是Linux文件系统的起点,所有的...

    PyPI 官网下载 | touchbar-lyric-0.1.3.tar.gz

    库的分发通常采用.tar.gz这样的压缩格式,这是一种常见的Unix/Linux系统中用于归档和压缩文件的方法,它结合了tar(打包)和gzip(压缩)工具,能有效减小文件大小,便于存储和传输。 "touchbar-lyric-0.1.3"这个...

    写得蛮好的linux学习笔记--linux目录架构

    这些命令是系统管理员和用户日常操作中必不可少的工具,如`ls`、`cp`、`mv`等。 #### /boot 用于存放系统启动过程中所需的文件,包括内核(`vmlinuz`)和初始化ramdisk(`initrd`)。此外,GRUB引导加载器的配置文件`...

    Xshell-5.rar

    结合提供的“Linux学习笔记”,初学者可以通过实际操作,更好地理解和掌握Linux系统。 总结起来,Xshell-5不仅是一个终端模拟器,更是一个综合的Linux管理工具,它与Xftp的协同工作,为Windows用户提供了高效、安全...

    Linux学习笔记-初学者

    ### Linux学习笔记-初学者 #### 一、Linux分区命名规则及理解 Linux系统中的分区命名规则对于初学者来说非常重要,因为这直接影响到如何管理和识别不同的存储设备。下面详细介绍几个关键概念: - **MBR(Master ...

    华为工程师linux的笔记-第2章 .pdf

    Linux基础篇总共包含8个章节,第1章到第8章学习内容分别包括:Linux快速入门、Linux发展及系统安装、CentOS Linux系统管理、Linux必备命令、Linux用户和组、Linux软件包管理、磁盘管理、Linux文件共享管理等。...

    Linux学习笔记--RuanJava

    在Linux学习过程中,了解操作系统的核心结构以及主要目录的用途至关重要。Linux系统采用的是层次化的目录结构,这使得系统管理更为有序。以下是对标题和描述中涉及的一些关键知识点的详细解释: 1. **根目录** `/`...

    linux学习笔记-01linux操作基础

    ### Linux学习笔记—01 Linux操作基础 #### 1. Linux 基础命令与用法 在Linux操作系统中,掌握一系列的基础命令是非常重要的。这些命令可以帮助用户进行各种日常操作,比如文件管理、目录切换、文件查看等。下面将...

    ipython-1.2.1.tar.gz

    该压缩包包含了IPython项目的全部源代码,使得开发者和用户能够对其进行编译、安装或者深入研究。 IPython的核心特性包括: 1. **增强的交互式Shell**:IPython的Shell提供了比标准Python Shell更多的功能,如自动...

    linux学习笔记-2

    ### Linux学习笔记精要 #### 一、Linux操作系统概述与常用命令 - **Shell与GUI**: Linux系统提供了两种主要的用户交互方式,图形用户界面(GUI)如Gnome和命令行界面(CLI)如Bash。GUI适合初学者,而CLI对于高效地...

    Python库 | amocrm_api-0.8.1.tar.gz

    这个库的版本为0.8.1,它被打包成一个`.tar.gz`文件,这是Linux和Unix系统常用的压缩格式,便于下载和分发。 **Python库的概念** Python库是由预编写好的模块和函数组成的集合,这些模块和函数可以被其他Python程序...

    华为工程师linux的笔记-第5章.pdf

    Linux基础篇总共包含8个章节,第1章到第8章学习内容分别包括:Linux快速入门、Linux发展及系统安装、CentOS Linux系统管理、Linux必备命令、Linux用户和组、Linux软件包管理、磁盘管理、Linux文件共享管理等。...

    JAVA学习笔记-java学习笔记WORD样式.docx

    ### JAVA学习笔记知识点详解 #### 一、计算机概述 1. **计算机**:电子设备,用于处理信息。 2. **计算机硬件**: - **中央处理器(CPU)**:计算机的大脑,负责处理指令。 - **内存(RAM)**:临时存储数据,...

    Linux学习笔记(强悍总结值得一看)_linux_linux学习笔记_

    这份"Linux学习笔记(强悍总结值得一看)"是Linux初学者的宝贵资源,也适合有经验的用户作为参考手册。以下是对笔记内容的详细概述: 1. **Linux常用命令**: Linux命令行是其强大的工具,掌握常用命令是Linux学习...

    day01-sql安装与SQL语句-笔记.zip

    在本压缩包“day01-sql安装与SQL语句-笔记.zip”中,我们可以预见到包含的...以上是SQL安装和基础语句的主要知识点,通过深入学习和实践,你可以掌握数据库管理的基本技能,为数据分析和应用程序开发奠定坚实的基础。

    Shell-脚本常用命令-文档.zip

    Shell脚本是Linux/Unix操作系统中的一个强大工具,它允许用户编写自动化任务,执行一系列命令,简化日常操作。本文将详细解析Shell脚本中的常用命令,帮助你更好地理解和利用这一强大的资源。 1. **基本结构** - ...

    Linux内核笔记-很强大很详细的

    这份“Linux内核笔记-很强大很详细的”压缩包包含了两个PDF文档,分别是“joyfire的linux内核笔记.pdf”和“joyfire的linux系统管理笔记.pdf”,它们深入浅出地探讨了Linux内核的各个方面,对于想要深入理解Linux...

Global site tag (gtag.js) - Google Analytics