Linux用户和权限——用户和用户组管理

摘要:本文主要介绍了Linux系统中的用户和用户组管理。

用户和用户组

含义

在使用Linux系统时,虽然输入的是自己的用户名和密码,但其实Linux并不认识用户名称,它只认识用户名对应的ID号(也就是一串数字)。Linux系统将所有用户的名称与ID的对应关系都存储在/etc/passwd文件中。说白了,用户名并无实际作用,仅是为了方便用户的记忆而已。

Linux系统中,每个用户的ID细分为2种,分别是用户ID(UserID,简称UID)和组ID(GroupID,简称GID),这与文件有拥有者和拥有群组两种属性相对应。

每个文件都有自己的拥有者ID和群组ID,当显示文件属性时,系统会根据/etc/passwd和/etc/group文件中的内容,分别找到UID和GID对应的用户名和群组名,然后显示出来。

忘记密码怎么办

对于普通账户的密码遗失,可以通过root账户解决,它会重新给你配置好指定账户的密码,而不需知道你原有的密码(利用root的身份使用passwd命令即可)。

如果root账号的密码遗失,则需要重新启动进入单用户模式,系统会提供root权限的bash接口,此时可以用passwd命令修改账户密码;也可以通过挂载根目录,修改/etc/shadow,将账户的root密码清空的方法,此方式可使用root无法密码即可登陆,建议登陆后使用passwd命令配置root密码。

保存用户数据的/etc/passwd文件

Linux系统中的/etc/passwd文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。

首先我们来打开这个文件,看看到底包含哪些内容,执行命令如下:

 [root@localhost ~]# cat /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
...
[root@localhost ~]#

可以看到,/etc/passwd文件中的内容非常规律,每行记录对应一个用户。

这些用户中的绝大多数是系统或服务正常运行所必需的用户,这种用户通常称为系统用户或伪用户。系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。

不仅如此,每行用户信息都以“:”作为分隔符,划分为七个字段:

 用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

用户名

用户名,就是一串代表用户身份的字符串,用户名仅是为了方便用户记忆,Linux系统是通过UID来识别用户身份,分配用户权限的。/etc/passwd文件中就定义了用户名和UID之间的对应关系。

密码

“x”表示此用户设有密码,但不是真正的密码,真正的密码保存在/etc/shadow文件中,此文件只有root用户可以浏览和操作,这样就最大限度地保证了密码的安全。

需要注意的是,虽然“x”并不表示真正的密码,但也不能删除,如果删除了“x”,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆(只能在使用无密码登录,远程是不可以的),除非特殊情况(如破解用户密码),这当然是不可行的。

UID

全称“User ID”,也就是用户ID。每个用户都有唯一的一个UID,Linux系统通过UID来识别不同的用户。

实际上,UID就是一个0~65535之间的数,不同范围的数字表示不同的用户身份:

1)0:超级用户。UID为0就代表这个账号是管理员账号。在Linux中,只需把其他用户的UID修改为0就可以了,这一点和Windows是不同的,不过不建议建立多个管理员账号。

2)1~499:系统用户(伪用户)。也就是说,此范围的UID保留给系统使用。其中,1~99用于系统自行创建的账号,100~499分配给有系统账号需求的用户。其实,除了0之外,其他的UID并无不同,这里只是默认500以下的数字给系统作为保留账户,只是一个公认的习惯而已。

3)500~65535:普通用户。通常这些UID已经足够用户使用了。但不够用也没关系,2.6.x内核之后的Linux系统已经可以支持232个UID了。

GID

全称“Group ID”,也就是组ID,表示用户初始组的组ID号。这里需要解释一下初始组和附加组的概念。

初始组,指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组。比如说,我们手工添加用户sam,在建立用户sam的同时,就会建立sam组作为sam用户的初始组。

附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组外,用户再加入其他的用户组,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。

举例来说,刚刚的sam用户除属于初始组sam外,我又把它加入了users组,那么sam用户同时属于sam组和users组,其中sam是初始组,users是附加组。

当然,初始组和附加组的身份是可以修改的,但是我们在工作中不修改初始组,只修改附加组,因为修改了初始组有时会让管理员逻辑混乱。

需要注意的是,在/etc/passwd文件的第四个字段中看到的ID是这个用户的初始组。

描述性信息

这个字段并没有什么重要的用途,只是用来解释这个用户的意义而已。

主目录

也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。

例如,root超级管理员账户的主目录为/root,普通用户将在/home/目录下建立和用户名相同的目录作为主目录,如sam用户的主目录就是/home/sam/目录。

默认的Shell

Shell就是Linux的命令解释器,是用户和Linux内核之间沟通的桥梁。

我们知道,用户登陆Linux系统后,通过使用Linux命令完成操作任务,但系统只认识类似0101的机器语言,这里就需要使用命令解释器。也就是说,Shell命令解释器的功能就是将用户输入的命令转换成系统可以识别的机器语言。

通常情况下,Linux系统默认使用的命令解释器是bash(/bin/bash),当然还有其他命令解释器,例如sh、csh等。

在/etc/passwd文件中,大家可以把这个字段理解为用户登录之后所拥有的权限。如果这里使用的是bash命令解释器,就代表这个用户拥有权限范围内的所有权限。

sam用户使用的是bash命令解释器,那么这个用户就可以使用普通用户的所有权限,例如:

 [root@localhost ~]# vim /etc/passwd
sam:x::::/home/sam:/bin/bash

如果sam用户的Shell命令解释器是/sbin/nologin,那么,这个用户就不能登录了,因为/sbin/nologin就是禁止登录的Shell,例如:

 [root@localhost ~]# vim /etc/passwd
sam:x::::/home/sam:/sbin/nologin

保存用户密码的/etc/shadow文件

/etc/shadow文件,用于存储Linux系统中用户的密码信息,又称为“影子文件”。

前面介绍了/etc/passwd文件,由于该文件允许所有用户读取,易导致用户密码泄露,因此Linux系统将用户的密码信息从/etc/passwd文件中分离出来,并单独放到了此文件中。

/etc/shadow文件只有root用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。注意,如果这个文件的权限发生了改变,则需要注意是否是恶意攻击。

介绍此文件之前,先打开看看,执行如下命令:

 [root@localhost ~]# cat /etc/shadow
root:$$yZkTv2VHvJfZft5s$XaKB9Jp6cRNEsdFKsYvQlmwmckbhvEDcFN/dDY1MpHLsx2w99Xn5lYvoQbkh6GU/DTx8ewq0xns1CQRbOXU1j/:::::::
bin:*:::::::
...
[root@localhost ~]#

同/etc/passwd文件一样,文件中每行代表一个用户,同样使用“:”作为分隔符,不同之处在于,每行用户信息被划分为九个字段。每个字段的含义如下:

 用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

用户名

同/etc/passwd文件的用户名有相同的含义。

加密密码

这里保存的是真正加密的密码。目前Linux的密码采用的是SHA512散列加密算法,原来采用的是MD5或DES加密算法。SHA512散列加密算法的加密等级更高,也更加安全。

注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。

所有伪用户的密码都是“!!”或“*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是“!!”,代表这个用户没有密码,不能登录。

最后一次修改时间

此字段表示最后一次修改密码的时间。Linux计算日期的时间是以1970年1月1日作为1不断累加得到的时间。

最小修改时间间隔

最小修改间隔时间,也就是说,该字段规定了从第三个字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是0,则密码可以随时修改,如果是10,则代表密码修改后10天之内不能再次修改密码。

此字段是为了针对某些人频繁更改账户密码而设计的。

密码有效期

经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第三个字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
该字段的默认值为99999,也就是273年,可认为是永久生效。如果改为90,则表示密码被修改90天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。

密码需要变更前的警告天数

与第5字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户“再过n天你的密码就要过期了,请尽快重新设置你的密码!”。

该字段的默认值是7,也就是说,距离密码有效期的第7天开始,每次登录系统都会向该账户发出“修改密码”的警告信息。

密码过期后的宽限天数

也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的,如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。

比如说,此字段规定的宽限天数是10,则代表密码过期10天后失效;如果是0,则代表密码过期后立即失效;如果是-1,则代表密码永远不会失效。

账号失效时间

同第3个字段一样,使用自1970年1月1日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用。

该字段通常被使用在具有收费服务的系统中。

保留

这个字段目前没有使用,等待新功能的加入。

保存用户组数据的/ect/group文件

/ect/group文件是用户组配置文件,即用户组的所有信息都存放在此文件中。此文件是记录组ID(GID)和组名相对应的文件。

/etc/group文件的内容可以通过Vim看到:

 [root@localhost ~]# cat /etc/group
root:x::
bin:x::
...
[root@localhost ~]#

可以看到,此文件中每一行各代表一个用户组。

各用户组中,还是以“:”作为字段之间的分隔符,分为四个字段,每个字段对应的含义为:

 组名:密码:GID(组ID):该用户组中的用户列表

组名

也就是是用户组的名称,有字母或数字构成。同/etc/passwd中的用户名一样,组名也不能重复。

组密码

和/etc/passwd文件一样,这里的“x”仅仅是密码标识,真正加密后的组密码默认保存在/etc/gshadow文件中。

用户设置密码是为了验证用户的身份,用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代root进行管理。但是这项功能目前很少使用,也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用sudo命令代替。

GID

就是群组的ID号,Linux系统就是通过GID来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。

这里的组GID与/etc/passwd文件中第四个字段的GID相对应,实际上,/etc/passwd文件中使用GID对应的群组名,就是通过此文件对应得到的。

组中的用户

此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。

一般情况下,用户的初始组就是在建立用户的同时建立的和用户名相同的组。

保存用户组密码的/etc/gshadow文件

前面讲过,/etc/passwd文件存储用户基本信息,同时考虑到账户的安全性,将用户的密码信息存放另一个文件/etc/shadow中。本节要将的/etc/gshadow文件也是如此,组用户信息存储在/etc/group文件中,而将组用户的密码信息存储在/etc/gshadow文件中。

首先,我们借助Vim命令查看一下此文件中的内容:

 [root@localhost ~]# cat /etc/gshadow
root:::
bin:::
...
[root@localhost ~]#

文件中,每行代表一个组用户的密码信息,各行信息用“:”作为分隔符分为四个字段,每个字段的含义如下:

 组名:加密密码:组管理员:组附加用户列表

组名

同/etc/group文件中的组名相对应。

组密码

对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为“!”,指的是该群组没有组密码,也没有群组管理员。

组管理员

从系统管理员的角度来说,该文件最大的功能就是创建群组管理员。

考虑到Linux系统中账号太多,而超级管理员root可能比较忙碌,因此当有用户想要加入某群组时,root或许不能及时作出回应。这种情况下,如果有群组管理员,那么他就能将用户加入自己管理的群组中,也就免去麻烦root了。

不过,由于目前有sudo之类的工具,因此群组管理员的这个功能已经很少使用了。

组中的附加用户

该字段显示这个用户组中有哪些附加用户,和/etc/group文件中附加组显示内容相同。

Linux用户和权限——用户和用户组管理的更多相关文章

  1. JavaEE学习之Spring Security3.x——模拟数据库实现用户,权限,资源的管理

    一.引言 因项目需要最近研究了下Spring Security3.x,并模拟数据库实现用户,权限,资源的管理. 二.准备 1.了解一些Spring MVC相关知识: 2.了解一些AOP相关知识: 3. ...

  2. linux和windows互传文件/用户配置文件和密码配置文件/用户组管理/用户管理

    2.27linux和windows互传文件 3.1 用户配置文件和密码配置文件 3.2 用户组管理 3.3 用户管理 linux和windows互传文件 显示日期date [root@centos_1 ...

  3. linux专题(八):用户组管理

    http://dwz.date/UDf 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理.不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个 ...

  4. 阶段5 3.微服务项目【学成在线】_day18 用户授权_08-动态查询用户的权限-用户中心查询用户权限

    3.3 用户中心查询用户权限 3.3.1 需求分析 认证服务请求用户中心查询用户信息,用户需要将用户基本信息和用户权限一同返回给认证服务. 本小节实现用户查询查询用户权限,并将用户权限信息添加到的用户 ...

  5. linux之文件权限+用户权限

    chmod 文件权限命令: 文件权限: r是否能查看文件内容 w是否能修改文件的内容,需要与r权限配合使用   只有w的时候vim强制修改文件内容,会导致源文件内容清空 x是否能运行命令或脚本权限,需 ...

  6. linux命令(29):用户组管理

    用户管理: 新建用户或组:新建用户:adduser user //新建user用户(推荐)passwd user //给user用户设置密码 新建组:groupadd test //新建test工作组 ...

  7. linux 用户管理,用户权限管理,用户组管理

    linux 用户管理,用户权限管理,用户组管理 一:ls -l 命令 解释 第个d表示是目录,如果是文件是-,如果是连接是l 第2到4个 rwx 表示创建者的操作权限 r 读,w 写,x 执行 第5到 ...

  8. linux中文件权限格式与chmod命令以及用户和用户组的管理

    简单了解一下linux中的文件权限格式与chmod命令 chmod命令:改变文件或者目录的权限 格式:chmod [参数] [<权限范围><符号><权限代码>] - ...

  9. Linux 用户与用户组管理

    Linux 是一个多用户多任务的分是操作系统,用户是实现操作系统资源分配,同时也是安全权限模型的核 心要素之一:用户组是一个容纳很多用户的容器,可以分配权限组,进一步优化了权限分配. 一.用户管理 用 ...

随机推荐

  1. centOS服务器安装mongodb

    1.为服务器添加mongodb的包管理工具,这就相当于在windows中安装npm,以便能用npm安装各种依赖.添加了这个包管理工具,才能在后面对mongodb做一系列操作. touch /etc/y ...

  2. python 生成 树状结构

    树状结构: 字典里只有一个键值对, key 为根, 值为一个列表, 列表里的某个或多个元素可以再进行分支(分支还是列表) 比如: 邮件的发件人, 收件人, 转发关系树状结构 forwarding_re ...

  3. 软工个人项目(Java实现)

    一. Github地址: https://github.com/RuiBingo/PersonalWork 二.个人PSP表格: PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟) Plan ...

  4. centOS7安装mysql8.0完美教程!!只要按照步骤,无脑操作,一次成功!

    查看防火墙systemctl status firewalld重启防火墙systemctl start firewalld 1.mysql 首先关闭防火墙 systemctl stop firewal ...

  5. [PHP] PDO对象与mysql的连接超时

    在php中每一个new的PDO对象,都会去连接mysql,都会创建一条tcp连接.当pdo对象赋予的变量是一个的时候,那么他只会保持一个tcp连接,没有被引用的对象连接会直接断掉.如果不对这个对象进行 ...

  6. luoguP3258 [JLOI2014]松鼠的新家

    树上差分 树上差分分析 使点x到点y的路径上(链上),全加上一个值,可以选择使用树上差分(不用线段树乱搞.... 首先,和普通的差分一样,要有一个tag.然而,对于一个结点,我们需要求出它全部儿子的t ...

  7. CF1225B2 TV Subscriptions (Hard Version)

    CF1225B2 TV Subscriptions (Hard Version) 洛谷评测传送门 题目描述 The only difference between easy and hard vers ...

  8. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) D. Power Products 数学 暴力

    D. Power Products You are given n positive integers a1,-,an, and an integer k≥2. Count the number of ...

  9. ZooKeeper 入门看这篇就够了

    什么是 ZooKeeper? ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务.ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原 ...

  10. Tomcat配置https访问

    1.利用JDK自带的keytools生成一个p12类型的证书 keytool -genkey -storetype PKCS12 -alias tomcat -keyalg RSA -keysize ...