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

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

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

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

1./etc/passwd

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

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

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

上面的每一行代表了存在你系统中的一个用户。按照“:”来进行字段的划分,可以划分为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命令,例如:

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

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

2./etc/shadow

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

  1. root:$6$tVBKdRxY$myJhWrhIwlXh42zNYLz1fmwu4ONQWP03O/5ccx1/34koU8GTn0M0ACx3xI4Bl.wPN3DPrrGbQX7vbPqqR//xv0:17593:0:99999:7:::
  2. bin:*:17110:0:99999:7:::
  3. daemon:*:17110:0:99999:7:::
  4. 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文件中存放的是用户组的相关的信息,打开大致如下:

  1. root:x:0:root

一共有四个字段:

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

4./etc/gpasswd

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

  1. root:::root

同样有四个字段:

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

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

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

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

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

  1. groups
  2. # 输出
  3. groups1 groups2

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

  1. newgrp group2
  2. groups
  3. # 输出
  4. 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. Failed to start LSB: Bring up/down错误解决方法

    很多朋友在使用centos7系统时,有时候需要分配多个IP地址,这就涉及到修改网卡配置,但是在修改完网卡配置时,重启网络服务时会出现"Failed to start LSB: Bring u ...

  2. ffmpeg命令 从网络摄像头录制视频

    安装 sudo apt-get install ffmpeg 录制视频为record.mp4文件 ffmpeg -y -i rtsp://cameral_ip:port -vcodec copy -a ...

  3. 整理之Java容器

    主要参考:JAVA常见容器 Set,List,Map,Vector,ArrayList的区别 Java所有容器见下图: 数组 int[] t = new int[10]; //声明并创建长度为10的数 ...

  4. 堆栈相关的经典题(c++)

    1.定义队列 typedef struct node{ int data; struct node * next; }Node; typedef struct linkQueue { Node * f ...

  5. Servlet学习笔记(一)之Servlet原理、初始化、生命周期、结构体系

    Servlet是用java语言编写的应用到Web服务器端的扩展技术,与java对象的区别是,Servlet对象主要封装了对HTTP请求的处理,并且它的运行需要Servlet容器的支持(以下会介绍原因, ...

  6. SpringBoot - 搭建静态资源存储服务器

    目录 前言 环境 实现效果 具体实现 文件上传 配置类 上传接口 上传实现 辅助类 实体 上传测试 文件访问 配置类 项目源码 前言 记录下SpringBoot下静态资源存储服务器的搭建. 环境 wi ...

  7. springMVC学习总结(二) --springMVC表单处理、标签库、静态文件处理

    根据springMVC学习总结(一) --springMVC搭建 搭建项目 一.表单处理 1.创建两个java类 Student.java, StudentController.java. 2.在js ...

  8. SQL语句之基本使用

    1.sql语法 一些重要的SQL命令: SELECT - 从数据库中提取数据 UPDATE - 更新数据库中的数据 DELETE - 从数据库中删除数据 INSERT INTO - 向数据库中插入新数 ...

  9. Docker 面试宝典

    Docker 是什么? 是实现容器技术的一种工具 是一个开源的应用容器引擎 使用 C/S 架构模式,通过远程API 来管理 可以打包一个应用及依赖包到一个轻量级.可移植的容器中 容器是什么? 对应用软 ...

  10. 【机器学习|数学基础】Mathematics for Machine Learning系列之线性代数(1):二阶与三阶行列式、全排列及其逆序数

    @ 目录 前言 二阶与三阶行列式 二阶行列式 三阶行列式 全排列及其逆序数 全排列 逆序数 结语 前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ...