Linux下关于用户账户的几个文件解析

Linux是一个多用户系统,但是对于一个多用户共存的系统中,当然不能够出现用户相互越权等一系列的安全问题,所以如何正确的管理账户成为了Linux系统中至关重要的一环。

在Linux下,与用户账户有着紧密联系的文件又如下的几个:

/etc/passwd   #管理用户的UID、GID等重要用户信息
/etc/shadow #管理用户密码的等重要信息
/etc/group #管理用户组
/etc/gpasswd #管理用户组密码

1./etc/passwd

虽说这个文件的文件名写着passwd,但是里面并没有存放密码(早起存放,后来为了安全将密码分离出来)

打开该文件,里面的内容大致如下:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...

上面的每一行代表了存在你系统中的一个用户。按照“:”来进行字段的划分,可以划分为7个字段,从左到右依次如下意义:

  • 账号名称(1)。用以来对应UID,例如上面的第一行root。
  • 密码位(2)。早期的该字段的确用来存放密码,但是这个文件特性是所有程序都能读取,为了安全起见,后来将密码放置在了/etc/shadow中了,所以这里只有一个“x”。
  • UID(3)。用户标识,在Linux中,该UID是整数。且多个账号可以对应一个UID,因为Linux系统内核只认UID的。不同的区间有不同的意义:
    0(系统管理员)。如果你希望其他的某些账号也是系统管理员,可以讲其UID修改为0。(极度不推荐,一是安全性,二是UID还与多处文件及系统有关联,单一修改往往设置不全会出问题)
    1~499。保留给系统账户使用的ID,不强制,只是一个习惯。
    500~2^32-1。给一般用户使用的。
  • GID(4)。这个与/etc/group有关,即与用户组相关,后续会提到。
  • 用户信息说明(5)。没有重要用途,单纯作简单描述。
  • 主文件夹(6)。例如上面的/root目录,当root登陆以后,直接进入root的主目录中。当然你可以进行个性化配置。
  • Shell(7)。当用户root登陆以后,会查找该字段并使用该字段指定的shell(这里是/bin/bash)。但这是里有一个特殊的shell(nologin)可以用来替代成让账号无法取得shell环境的登陆操作。譬如,你当然不希望一个在你Linux上的邮件账户来通过shell操作你的电脑。

当然,如果记不住的话,可以使用finger命令与id命令,例如:

finger root
# 输出如下:
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Fri Mar 9 19:10 (CST) on tty1 7 seconds idle
Mail last read Sat Mar 3 15:58 2018 (CST)
No Plan. id root
# 输出如下:
uid=0(root) gid=0(root) groups=0(root)

输出内容不在解释,十分 -h 了。

2./etc/shadow

打开该文件,内容大致如下:

root:$6$tVBKdRxY$myJhWrhIwlXh42zNYLz1fmwu4ONQWP03O/5ccx1/34koU8GTn0M0ACx3xI4Bl.wPN3DPrrGbQX7vbPqqR//xv0:17593:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::

shadow文件夹自然也以“:”作为分隔符,这里一共有9个字段,从左到右依次具有如下意义:

  • 账号名称(1)
  • 密码(2)。该处使用了摘要加密技术,即不容易逆向破译,只可做验证。
  • 最近改动密码的日期(3)。自1970年1月1日以来累加的天数。
  • 密码不可被改动的天数(4)。相当于改密码的冻结天数。root中为0代表你随时可以更改,如果修改为20就代表了20天内不可修改。
  • 密码需要重新更改的天数(5)。这里root行填写的99999代表了root的密码在99999天以内需要修改,可以理解为允许你永不更改。
  • 密码需要更改前的警告天数(6)。这一字段与上一字段配合。例如,上一字段设置为了20,即希望你在20天要重新修改密码,这里设置为5,就代表了第15天到第20天之前你登录的时候会提示你洗修改密码。
  • 密码过期后的账号宽限天数(7)。例如,在字段(5)设置为了20,即希望你在20天内要修改密码,但是你在20天以后都还没有修改,那么该密码就过期了(密码过期你的账户依然可以使用bash等,但是重新登录时系统会提醒你修改密码),在过期期间你还没有修改密码,那么这个账户就失效了,该账号再也无法使用该密码登录了。
  • 账号失效日期(8)。同样基于1970年1月1号以来的天数,日期到了以后,该账号会直接失效,与账号是否过期无关。
  • 保留(9)。

3./etc/group

/etc/group文件中存放的是用户组的相关的信息,打开大致如下:

root:x:0:root

一共有四个字段:

  • 用户组名称(1)
  • 用户组密码(2)。通常不需要设置,是给“用户组管理员”来使用的。
  • GID(3)。/etc/passwd中第四个字段使用GID就是对应于此的。
  • 此用户组支持的账户名(4)。当我们想要将一个用户添加到该用户组时,就可以将其写在该字段中,使用“,“无空格连接。

4./etc/gpasswd

/etc/gpasswd文件中存放的是用户组没密码的相关信息,大致如下:

root:::root

同样有四个字段:

  • 用户组名(1)
  • 密码(2)
  • 用户组管理员账号(3)
  • 该用户组所属账号(4)

当然,对于一个用户来说,当然可以在多个组当中。但是,当我们使用一个账户进行某些操作时,系统如何判断我们当前属于哪个组呢?例如,当前有个文件属性如下:

----r----- root group1  x.txt

有一个用户名为user既属于group1又属于group2。那该用户到底能不能读取这个txt呢?

其实这就涉及到了一个有效用户组与初始用户组两个概念了。使用groups命令,可以看到类似如下的输出(这里模拟有groups1、2两个组):

groups
# 输出
groups1 groups2

第一个就是有效用户。有效用户组意味着目前你身份是user,现在属于group1。所以你是可以读取那个txt的。如何进行切换呢?使用newgrp命令

newgrp group2
groups
# 输出
group2 group1

此时尝试读取x.txt会提示权限不足。

那么初始用户组是什么呢?其实就是/etc/passwd中的GID对应的用户组,也是我们在登陆是的第一个用户组。

Linux下关于用户账户的几个文件解析的更多相关文章

  1. 自学Linux Shell7.1-linux用户账户和组

    点击返回 自学Linux命令行与Shell脚本之路 7.1-linux用户账户和组 linux安全系统的核心是用户账户.每个能进入linux系统的用户都会被分配唯一的用户账户,用户对系统中各对象的访问 ...

  2. linux下添加用户并将文件夹授权给某一个用户

    ### linux下添加用户并将文件夹授权给某一个用户 背景:在做一个项目时,需要外包的前端人员调试测试环境的页面,但是又不能给他服务器的账号信息,就在服务器上新添加一个子账户,再给这个账户项目文件的 ...

  3. Linux下的用户、组和权限

    目录 一:用户和组信息的查看 查看用户信息 查看密码信息 查看组信息 特殊组wheel 二:用户和组信息的管理 用户管理 组管理 三:文件权限 文件权限的查看 文件权限的修改 ACL控制权限 setf ...

  4. linux下普通用户如何使用80端口启动程序

    linux下普通用户如何使用80端口启动程序 http://blog.csdn.net/shootyou/article/details/6750230 大家都知道默认情况下linux的1024以下端 ...

  5. linux下创建用户

    linux下创建用户(一) Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系 ...

  6. Linux 下监控用户最大进程数参数(nproc)是否到达上限

    Linux 下监控用户最大进程数参数(nproc)是否到达上限的步骤: 1.查看各系统用户的进程(LWP)数: 注意:默认情况下采用 ps 命令并不能显示出所有的进程.因为 Linux 环境下执行多线 ...

  7. linux下创建用户并且限定用户主目录

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

  8. 【搬运工】linux下创建用户(一)

    转载:http://www.cnblogs.com/ylan2009/articles/2321177.html linux下创建用户(一) Linux 系统是一个多用户多任务的分时操作系统,任何一个 ...

  9. linux命令详解之useradd命令使用方法[linux下 添加用户、删除用户、修改用户密码、用户组管理]

    http://www.jb51.net/article/45848.htm Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...

随机推荐

  1. 关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析

    大家可以自行网上找资源(网上资源比较多,不建议下载我的),也可以在我这里下载: 1.取得每个部门最高薪水的人员名称:正确   一共有4个单位,要进行左外连接 其中一个单位没得员工 SELECT dep ...

  2. Java程序设计学习笔记(五) — 多线程

    时间:2016-4-15 09:56 --多线程(还有多核编程)     1.进程         进程是一个正在执行中的程序.         每一个进程执行都有一个执行顺序,该顺序是一个执行路径, ...

  3. mybatis gengeator一键生成

  4. 跨平台APP推荐收藏

    时间:2019-04-11 整理:pangYuaner 标题:十大跨平台优秀软件 地址:https://www.cnblogs.com/the-king-of-cnblogs/p/3154758.ht ...

  5. 24点游戏(24 game)的C++编程求解实现

    什么是24点游戏 24点游戏,英文叫做24 game,是对给定的4个非负整数进行加减乘除运算,要求每个数都要被用到且仅用到一次,并得到最终的运算结果为24.比如3.8.3.8这四个数,可以找出唯一的一 ...

  6. P1721 [NOI2016] 国王饮水记 题解

    蒟蒻的第一篇黑题题解,求过. 题目链接 题意描述 这道题用简洁的话来说,就是: 给你 \(n\) 个数字,你可以让取其中任意若干个数字,每次操作,都会使所有取的数字变为取的数字的平均数,并且你最多只能 ...

  7. JS011. 身份证号码校验(仅34行)

    身份证格式 六位数字地址码 + 八位数字出生日期码 + 三位数字顺序码 + 一位数字校验码 checkIdCard.js checkIdCard: function (idCard){ //15位和1 ...

  8. Servlet3.0注解配置访问路径和urlParttern配置

    一.Servlet用注解配置访问路径 二.IDEA的tomcat相关配置 其中,第一点的配置文件,直接在IDEA的可视化操作界面修改就可以改掉配置文件中内容: 三.urlParttern配置 其中,* ...

  9. 如何高效掌控K8s资源变化?K8s Informer实现机制浅析

    作者 王成,腾讯云研发工程师,Kubernetes contributor,从事数据库产品容器化.资源管控等工作,关注 Kubernetes.Go.云原生领域. 概述 进入 K8s 的世界,会发现有很 ...

  10. Java中使用jxl.jar将数据导出为excel文件

      Java对Excel文件的读写操作可由jxl.jar或poi.jar实现,这里使用jxl.jar完成对Excel文件的导出. 一.将Excel文件导出在本地 步骤:   创建文件 -> 创建 ...