/etc/passwd, /etc/shadow

2023-05-16

使用者帐号:/etc/passwd, /etc/shadow

  由上面的说明您大概已经知道,嘿嘿!帐号管理最重要的两个档案就是‘ /etc/passwd 与 /etc/shadow ’了!这两个档案可以说是 Linux 里头最重要的档案之一了! 如果没有这两个档案的话,呵呵!您可是无法登入 Linux 的呦!所以,底下我们先针对这两个档案来进行说明。 当然啰,更详细的资料您可以自行 man 5 passwd 及 man 5 shadow 的啦~

  # /etc/passwd
  这个档案的构造是这样的:每一行都代表一个帐号, 有几行就代表有几个帐号在你的系统中!不过需要特别留意的是,  里头很多帐号本来就是系统中必须要的,我们可以简称他为系统帐号,  例如 bin, daemon, adm, nobody 等等,这些帐号是系统正常运作时所需要的,请不要随意的杀掉他呢! 这个档案的内容有点像这样:

  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

  我们先来看一下每个 Linux 系统都会有的第一行,就是 root 这个系统管理员那一行好了, 你可以明显的看出来,每一行使用‘:’分隔开,共有七个咚咚,分别是:

  1. 帐号名称:就是帐号名称啦!对应 UID 用的!例如 root 就是预设的系统管理员的帐号名称;

  2. 密码:早期的 Unix 系统的密码是放在这个档案中的, 但是因为这个档案的特性是所有的程序都能够读取,所以,这样一来很容易造成资料的被窃取, 因此后来就将这个栏位的密码资料给他改放到 /etc/shadow 中了,关于 /etc/shadow 这一部份等一下再说。而这里你会看到一个 x ,呵呵!别担心,这表示密码已经被移动到 shadow 这个加密过后的档案啰;

  3. UID:这个就是使用者识别码 (ID) 啰!通常 Linux 对于 UID 有几个限制需要说给您瞭解一下:
  id 范围   该 ID 使用者特性
   0   当 UID 是 0 时,代表这个帐号是‘系统管理员’! 所以当你要作另一个系统管理员帐号时, 你可以将该帐号的 UID 改成 0 即可;这也就是说,一部系统上面的系统管理员不见得只有 root 喔! 不过,不很建议有多个帐号的 UID 是 0 啦~
   1~499   保留给系统使用的 ID, 其实 1~65534 之间的帐号并没有不同, 也就是除了 0 之外,其他的 UID 并没有不一样, 预设 500 以下给系统作为保留帐号只是一个习惯。 这样的好处是,以有名的 DNS 伺服器的启动服务‘ named ’为例,这个程式的预设所有人 named 的帐号 UID 是 25 ,当有其他的帐号同样是 25 时,很可能会造成系统的一些小问题!为了杜绝这样的问题,建议保留 500 以前的 UID 给系统吧!
   不过,一般来说, 1~99 会保留给系统预设的帐号,另外 100~499 则保留给一些服务来使用。
   500~65535   给一般使用者用的。 事实上,目前的 linux 核心 (2.6.x 版)已经可以支援到 4294967295 (2^32-1) 这么大的 UID 号码喔!

  上面这样说明可以瞭解了吗?是的, UID 为 0 的时候,就是 root 呦!所以请特别留意一下你的 /etc/passwd 档案!

  4. GID:这个与 /etc/group 有关!其实 /etc/group 的观念与 /etc/passwd 差不多,只是他是用来规范 group 的而已!

  5. 使用者资讯说明栏:这个栏位基本上并没有什么重要用途, 只是用来解释这个帐号的意义而已!不过,如果您提供使用 finger 的功能时, 这个栏位可以提供很多的讯息呢!底下的 chfn 可以解释一下啰!

  6. 家目录:这是使用者的家目录,以上面为例, root 的家目录在 /root ,所以当 root 登入之后,就会立刻跑到 /root 里头啦!呵呵! 如果你有个帐号的使用空间特别的大,你想要将该帐号的家目录移动到其他的硬碟去, 没有错!可以在这里进行修改呦!预设的使用者家目录在 /home/yourIDname

  7. Shell:所谓的 shell 是用来沟通人类下达的指令与硬体之间真正动作的界面!我们通常使用 /bin/bash 这个 shell 来进行指令的下达!嘿嘿!发现了吧?我们在 bash 章节里面提到很多次,登入 Linux 时为何预设是 bash 呢?就是这里设定的啦~ 这里比较需要注意的是,有一个 shell 可以用来替代成让帐号无法登入的指令!那就是 /sbin/nologin 这个东西!这也可以用来制作纯 pop 邮件帐号者的资料呢!

  # /etc/shadow
  上面约略提到,由于每个程序都需要取得 uid 与 gid 来判断权限的问题,所以, /etc/passwd 的权限必须要设定成为 -rw-r--r-- 这样的权限,在这样的情况下, 使用者的密码不就任何人都可以看到吗?即使这个档案内的密码栏是加密的, 坏心肠的朋友也可能利用暴力破解法去 try and error 找出您的密码资料......

  因为这样的关系,所以后来发展出将密码移动到 /etc/shadow 这个档案分隔开来的技术, 而且还加入很多的密码限制参数在 /etc/shadow 里头呢!我们先来瞭解一下这个档案的构造吧! 我的 /etc/shadow 档案有点像这样:

  root:$1$i9Ejldjfjio389u9sjl$jljsoi45QE/:12959:0:99999:7:::
  bin:*:12959:0:99999:7:::
  daemon:*:12959:0:99999:7:::
  adm:*:12959:0:99999:7:::

  基本上, shadow 同样以‘:’作为分隔符号,如果数一数,会发现共有九个栏位啊, 这九个栏位的用途是这样的:

  1. 帐号名称:由于密码也需要与帐号对应啊~因此, 这个档案的第一栏就是帐号,必须要与 /etc/passwd 相同才行!

  2. 密码:这个才是真正的密码,而且是 经过编码过的密码啦! 你只会看到有一些特殊符号的字母就是了!需要特别留意的是, 虽然这些加密过的密码很难被解出来,但是‘很难’不等于‘不会’,所以, 这个档案的预设属性是‘-rw-------’或者是‘-r--------’,亦即只有 root 才可以读写就是了!你得随时注意,不要不小心更动了这个档案的属性呢!另外, 如果是在密码栏的第一个字元为‘ * ’或者是‘ ! ’,表示这个帐号并不会被用来登入的意思。 所以万一哪一天你的某个使用者不乖时,可以先在这个档案中,将他的密码栏位的最前面多加一个 * !嘿嘿!他就无法使用该帐号啰!直到他变乖了,再给他启用啊!

  3. 最近更动密码的日期:这个栏位记录了‘更动密码的那一天’的日期, 不过,很奇怪呀!在我的例子中怎么会是 12959 呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 ,而 1971 年 1 月 1 日则为 366 啦! 所以这个日期是累加的呢!得注意一下这个资料呦!那么最近的 2005 年 1 月 1 日就是 12784 啦,瞭解了吗?

  4. 密码不可被更动的天数: 第四个栏位记录了这个帐号的密码需要经过几天才可以被变更!如果是 0 的话, 表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后, 20 天之内都无法改变这个密码呦!

  5. 密码需要重新变更的天数: 由于害怕密码被某些‘有心人士’窃取而危害到整个系统的安全,所以有了这个栏位的设计。 你必须要在这个时间之内重新设定你的密码,否则这个帐号将会暂时失效。 而如果像上面的 99999 的话,那就表示,呵呵,密码不需要重新输入啦! 不过,如果是为了安全性,最好可以设定一段时间之后,严格要求使用者变更密码呢!

  6. 密码需要变更期限前的警告期限:当帐号的密码失效期限快要到的时候, 就是上面那个‘必须变更密码’的那个时间时, 系统会依据这个栏位的设定,发出‘警告’言论给这个帐号,提醒他‘再过 n 天你的密码就要失效了,请尽快重新设定你的密码呦!’,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。

  7. 密码过期的恕限时间:如果用户过了警告期限没有重新输入密码, 使得密码失效了,也就是说,你在‘必须变更密码的期限前,并没有变更你的密码!’ 那么该组密码就称为‘失效的密码’啰~怎么办?没关系,还有这个栏位的天数设计啊~ 意思就是说,当密码失效后,你还可以用这个密码在 n 天内进行登入的意思。 而如果在这个天数后还是没有变更密码,呵呵!那么您的帐号就失效了!无法登入!

  8. 帐号失效日期:这个日期跟第三个栏位一样,都是使用 1970 年以来的总日数设定。这个栏位表示: 这个帐号在此栏位规定的日期之后,将无法再使用。 这个栏位会被使用通常应该是在‘收费服务’的系统中, 你可以规定一个日期让该帐号不能再使用啦!

  9. 保留:最后一个栏位是保留的,看以后有没有新功能加入。

  举个例子来说好了,假如我的 dmtsai 这个使用者的密码栏如下所示:

  dmtsai:$1$8zdAKdfC$XDa8eSus2I7nQL7UjRsIy/:13025:5:60:7:2:13125:

  这表示什么呢?要注意的是, 13025 是 2005/08/30 ,所以, dmtsai 这个使用者他的密码相关意义是:

  * 最近一次更动密码的日期是 2005/08/30 (13025);
  * 能够修改密码的时间是 5 天以后,也就是 2005/09/04 以前 dmtsai 不能修改自己的密码; 如果使用者还是尝试要更动自己的密码,系统就会出现这样的讯息:

  You must wait longer to change your password
  passwd: Authentication token manipulation error

  * 使用者必须要在 2005/09/04 到 2005/10/29 之间的 60 天限制内去修改自己的密码,若 2005/10/29 之后还是没有变更密码时,该帐号就会宣告失效;
  * 如果使用者一直没有更改密码,那么在 2005/10/29 之前的 7 天内,系统会警告 dmtsai 应该修改密码的相关资讯;例如当 dmtsai 登入时,系统会主动提示如下的资讯:

  Warning: your password will expire in 5 days

  * 如果该帐号一直到 2005/10/29 都没有更改密码,由于还有两天的恕限时间,因此, dmtsai 还是可以在 2005/10/31 以前继续登入;
  * 如果使用者在 2005/10/29 以前变更过密码,那么那个 13025 的日期就会跟著改变,因此, 所有的限制日期也会跟著相对变动喔!^_^
  * 无论使用者如何动作,到了 13125 ,大约是 2005/12/8 左右,该帐号就失效了~

  透过这样的说明,您应该会比较容易理解了吧?! ^_^
  Tips:
  常常听到:我的密码忘记或者被更动了?怎么办?

  有的时候会发生这样的情况,就是说,你的 root 密码忘记了!要怎么办?重新安装吗?另外, 有的时候是被入侵了, root 的密码被更动过,该如何是好?

   这个时候就必须要使用到 /etc/shadow 这个资料了!我们刚刚知道密码是存在这个档案中的, 所以只要你能够以各种可行的方法开机进入 Linux ,例如单人维护模式,或者是以 live CD (KNOPPIX) 来进入 Linux 系统。之后,将硬碟顺利挂载,然后进入 /etc/shadow 这个档案中,将 root 的密码这一栏全部清空!然后再登入 Linux 一次,这个时候 root 将不需要密码 (有的时候需要输入空白字元) 就可以登入了!这个时候请赶快以 passwd 设定 root 密码即可。 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

/etc/passwd, /etc/shadow 的相关文章

  • 为什么有人劝别选计算机专业?

    大家好 xff0c 我是程序员吴师兄 xff0c 一个坚持在 CSDN 日更原创的程序员 今天想和大家聊一聊为什么有人劝别选计算机专业 和大家说一句掏心窝的话 xff1a 直到 2021 年 xff0c 计算机专业依旧是寒门改变命运的一个最

随机推荐

  • 看完谷歌大佬的 LeetCode 刷题笔记,我马上去字节跳动面试!

    如果你刷 LeetCode 觉得吃力 那么一定需要这份谷歌大佬的 LeetCode 刷题笔记 微信搜索 五分钟学算法 xff0c 公众号回复 04 即可获取对应的下载链接 xff0c 以下是详细介绍 在这里推荐一个谷歌大佬的刷题笔记 每一道
  • 剑指 Offer 09. 用两个栈实现队列(视频讲解)

    一 题目描述 用两个栈实现一个队列 队列的声明如下 xff0c 请实现它的两个函数 appendTail 和 deleteHead xff0c 分别完成在队列尾部插入整数和在队列头部删除整数的功能 若队列中没有元素 xff0c delete
  • 刷到 LeetCode 这个评论,被笑到了

    大家好 xff0c 我是吴师兄 今天早上我在 LeetCode 第 141 号问题 环形链表 的评论区中发现了一个称得上是天秀的解法 xff0c 简直太骚气了 xff0c 忍不住分享给大家 首先给没有见过这道题目的小伙伴补充一下前置知识 x
  • Android JNI基础篇(一)

    Android JNI 基础篇 前言 JNI学习其实并不难 xff0c 在这里 xff0c 我将引导大家学习JNI的基础知识 xff0c 认真学完本教程 xff0c 你将更加坚信我说的话 来吧 xff0c 我们一起学习 xff01 JNI
  • ROS学习(三):消息通信过程

    主节点管理节点信息 xff0c 每个节点根据需要与其他节点进行连接和消息通信 在这里 xff0c 我们来看看最重要的主节点 节点 话题 服务和动作信息的过程 一 运行主节点 节点之间的消息通信当中 xff0c 管理连接信息的主节点是为使用R
  • HTTP Digest authentication(摘要认证)和HTTP basic Authorization(普通认证)用户登出注销的方法

    最近项目中需要对普通认证HTTP basic Authorization和摘要认证HTTP Digest authenticatio登录进行注销 搜索到有几篇文章号称ie xff0c Firefox chrome都可以可以注销 xff0c
  • POCO C++库学习和分析 -- 序

    POCO C 43 43 库学习和分析 序 1 POCO库概述 xff1a POCO是一个C 43 43 的开源库集 同一般的C 43 43 库相比 xff0c POCO的特点是提供了整一个应用框架 如果要做C 43 43 程序应用框架的快
  • 【ubuntu18+QT12+OpenCV4环境配置】

    ubuntu18 43 QT12 43 OpenCV4环境配置 前些天编译了最新版本opencv4 xff0c 但是电脑内还有个opencv3 2 xff0c 有时候二者共享链接库文件即libopencv so XX xff0c 之类的路径
  • Ubuntu无法使用浏览器上网

    1 可以更新一下浏览器 xff0c 打开终端 xff0c 输入 xff1a sudo apt get install firefox 如果你用的是其他浏览器可以吧后面的 firefox 改为其他浏览器 xff0c 如谷歌浏览器 xff1a
  • 浅析C++中struct和class的区别

    文章目录 C和C 43 43 中struct的区别C 43 43 中struct和class的区别 C和C 43 43 中struct的区别 struct最早是在C语言中出现的 xff0c 但在C语言中struct只是一种 用户自定义数据类
  • C语言头文件.h互相包含所引发的一系列错误C2143之类的解决方法

    本文可解决的问题 在一个头文件 h中定义一个结构体 在另一个 h文件中使用这个结构体引发错误C2143 语法错误 缺少 在 的前面 编译源文件 等莫名的报错头文件的交叉包含 即头文件a包含了头文件b 头文件b又包含了头文件a多个不同的头文件
  • 使用python进行http请求自动登录处理302跳转的问题

    一 问题背景 最近在做一个自动化业务处理的程序时 xff0c 需要完成对系统的自动登录 经过抓包测试只需要使用简单的post请求后收到的回包中包含cookie信息 xff0c 因此可以据此完成登录 程序设计思路为发送求到登录验证页面 xff
  • C# TCP/UDP网络通讯调试助手(含源码)

    C TCP UDP网络通讯调试助手 1 客户端界面 1 客户端界面 源码下载地址 xff1a https download csdn net download kingleitao 11927885
  • socketcan

    参考 lt lt Linux Can编程详解 gt gt CAN原理介绍 https www cnblogs com spoorer p 6649303 html 一 初始化工作 SocketCAN 中大部分的数据结构和函数在头文件 lin
  • vscode+cmake 实现C++项目的完整编译

    1 项目目录 span class token builtin class name span bin build CMakeLists txt include array 2d h common h swap h lib src arra
  • 航模常用硅胶线、热缩管规格

    一般穿越机中信号线等用26或28awg xff0c 外径1 3 1 5mm xff0c 配套热缩管选用2mm的比较合适 供电电源线一般用10awg或12awg xff0c 外径4 5 5 4mm xff0c 配套热缩管为7mm比较合适 14
  • POCO C++库学习和分析 -- 线程 (一)

    POCO C 43 43 库学习和分析 线程 xff08 一 xff09 线程是程序设计中用的非常多的技术 xff0c 在UI设计 xff0c 网络通讯设计中广泛使用 在POCO库中 xff0c 线程模块可以分成6个部分去理解 锁 xff0
  • 100条经典C语言笔试题目

    100 条经典C语言笔试题目 题目来源 xff1a 1 中兴 华为 慧通 英华达 微软亚洲技术中心等中 外企业面试题目 xff1b 2 C 语言面试宝典 林锐 高质量编程第三版 说明 xff1a 1 部分C 语言面试题中可能会参杂部分和C
  • hadoop2.7完全分布式集群搭建以及任务测试

    要想深入的学习hadoop数据分析技术 xff0c 首要的任务是必须要将hadoop集群环境搭建起来 xff0c 本文主要讲述如何搭建一套hadoop完全分布式集群环境 环境配置 xff1a 2台64位的redhat6 5 43 1台64位
  • /etc/passwd, /etc/shadow

    使用者帐号 xff1a etc passwd etc shadow 由上面的说明您大概已经知道 xff0c 嘿嘿 xff01 帐号管理最重要的两个档案就是 etc passwd 与 etc shadow 了 xff01 这两个档案可以说是