用户信息文件 /etc/passwd

这个文件中保存的就是系统中所有的用户及其对应的用户主要信息。

文件格式 : 

第1字段 第2字段 第3字段 第4字段 第5字段 第6字段 第7字段
用户名称 密码标志 用户ID 组ID 用户说明 家目录 登陆后的Shell

例如:root:x:0:0:root:/root:/bin/bash

lizhouwei:x:1000:1000:lizhouwei:/home/lizhouwei:/bin/bash

用户名称

第1个字段是用户名称,用户名称只是为了方便管理员记忆,Linux 系统是通过用户 ID (UID) 来区分不同用户、分配用户权限的。而用户名称和 UID 的对应正是通过 /etc/passwd 这个文件来定义的。

密码标志

第2个字段是密码标志,这里的"x"代表的是密码标志,表示用户是拥有密码的,而不是真正的密码,真正的密码是保存在 /etc/shadow 文件中的。由于这个文件的权限是 644,查询命令如下:

[root@localhost /]# ls -l etc/passwd
-rw-r--r--. 1 root root 2282 Nov 5 20:19 etc/passwd

所有用户都可以读取 /etc/passwd 文件,这样非常容易导致密码的泄露。虽然密码是加密的,但是采用暴力破解的方式也是能够进行破解的。所以现在的 Linux 系统把真正的加密密码串放置在影子文件/etc/shadow中,而影子文件的权限是 000,查询命令如下:

[root@localhost /]# ls -l etc/shadow
----------. 1 root root 1266 Nov 5 20:19 etc/shadow

这个文件是没有任何权限的,但因为我是 root 用户,所以读取权限不受限制。当然,用强制修改的方法也是可以手工修改这个文件的内容的。只有 root 用户可以浏览和操作这个文件,这样就最大限度地保证了密码的安全。

所以在 /etc/passwd 中"x"只是密码标志,代表用户是拥有密码的,具体的密码要去 /etc/shadow 文件中查询。如果删除了密码标志"x",那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆(用户无密码时远程是不可以登陆的)。

UID

第3个字段就是用户 ID(UID),在Linux中系统是通过 UID 来识别不同的用户和分配用户权限的。这些 UID 是有使用限制和要求的:

  0:超级用户 UID。如果用户 UID 为 0,则代表这个账号是管理员账号。在 Linux 中只需把其他用户的 UID 修改为 0 就可以把普通用户升级成管理员了。

  1~499:系统用户(伪用户)UID。这些 UID 是系统保留给系统用户的 UID,也就是说 UID 是 1~499 范围内的用户是不能登录系统的,而是用来运行系统或服务的。其中,1~99 是系统保留的账号,系统自动创建;100~499 是预留给用户创建账号的,但是这些用户同样也不能被删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。

  500~65535:普通用户 UID。建立的普通用户 UID 从 500 开始,最大到 65535。

说明:在2.6.x 内核以后的 Linux 系统用户 UID 已经可以支持 232 个用户了。

GID

第4个字段就是用户的组 ID(GID),这个组ID是指用户的初始组的标志号。在Linux 中用户可以同时加入初始组和附加组。

初始组:指用户一登陆录就立刻拥有这个用户组的相关权限。每个用户的初始组只能有一个,在添加用户时如果不指定初始组,则系统会建立一个与用户名相同的组作为用户的初始组。例如:我们手工添加用户 lizhouwei,在建立用户 lizhouwei 的同时就会建立 lizhouwei组作为 lizhouwei 用户的初始组。

附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组以外,把用户再加入其他的用户组,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。例如:刚刚的 lizhouwei 用户除属于初始组 lizhouwei 外,我又把它加入了 users 组,那么 lizhouwei 用户同时属于 lizhouwei 组、users 组,其中 lizhouwei 是初始组,users 是附加组。当然,初始组和附加组的身份是可以修改的,但是我们在工作中不修改初始组,只修改附加组,因为修改了初始组有时会让管理员逻辑混乱。

用户说明

第5个字段是这个用户的简单说明,没有什么特殊作用,可以不写。

家目录

第6个字段是这个用户的家目录,也就是用户登录后有操作权限的访问目录,我们把这个目录称为用户的家目录。

普通用户家目录: /home/ 用户名  所有者所属组都是此用户 权限 700;

超级用户的家目录: /root   所有者所属组都是root 权限 550;

说明:在psswd中即使将用id(UID)改为0用户管理员,其家目录的位置是不变的,还是/home/用户名

登录之后的Shell

Shell 就是 Linux 的命令解释器。将Linux的命令翻译成系统可以识别的机器语言,同时把系统的执行结果翻译为用户可以识别的 高级语言。Linux 的标准 Shell 就是 /bin/bash。
在 /etc/passwd 文件中,大家可以把这个字段理解为用户登录之后所拥有的权限。如果写入的是 Linux 的标准 Shell,/bin/bash 就代表这个用户拥有权限范围内的所有权限。例如:

[root@localhost /]# vim etc/passwd

lizhouwei:x:1000:1000:lizhouwei:/home/lizhouwei:/bin/bash

例如:lizhouwei 用户,它的登录 Shell 是 /bin/bash,那么这个用户就可以使用普通用户的所有权限。如果把 lizhouwei 用户的 Shell 修改为 /sbin/nologin,那么这个用户就不能登录了,因为 /sbin/nologin 就是禁止登录的 Shell。如果我在这里放入的系统命令,如 /usr/bin/passwd,那么这个用户可以登录,但登录之后就只能修改自己的密码。

说明:在用户的 Shell中不能随便写入和登陆没有关系的命令,如 ls,否则系统不会识别这些命令,也就意味着这个用户不能登录。

影子文件 /etc/shadow

这个文件中保存着用户的实际加密密码和密码有效期等参数。我们已经知道这个文件的权限是 000,所以除 root 用户外,其他用户是不能查看的,这样做有效地保证了密码的安全。字段之间使用":"作为分隔符。

第1字段 第2字段 第3字段 第4字段 第5字段 第6字段 第7字段 第8个字段 第9个字段
用户名称 密码

密码最后一次修改曰期

密码的两次修改间隔时间

(和第3个字段相比)

密码的有效期

(和第3个字段相比)

密码修改到期前的警告天数

(和第5个字段相比)

密码过期后的宽限天数

(和第5个字段相比)

账号失效时间

保留

例如:lizhouwei:bIUmABK6YbB4k1w6Ai::0:99999:7:::

用户名称

第1个字段中保存的是用户名称,和 /etc/passwd 文件的用户名称相对应。

密码

第2个字段中保存的是真正加密的密码。在Linux 的密码采用的是 SHA512 散列加密算法。如果用户密码是"!!"或"*",代表没有密码是不能登录。例如:所有伪用户的密码都是"!!"或"*",代表没有密码是不能登录的。新创建的用户如果不设定密码,那么它的密码项也是"!!",代表这个用户没有密码,不能登录。

密码最后一次修改曰期

第3个字段是密码的修改日期,数值表示 当前日期 到 1970年1月1日的天数, 366 代表的就是 1971 年 1 月 1 日。

密码的两次修改间隔时间(和第三个字段相比)

第4个字段是密码的两次修改间隔时间。这个字段要和第3个字段相比,也就是说密码被修改后多久不能再修改密码。如果是 0,则密码可以随时修改。如果是 10,则代表密码修改后 10 天之内不能再次修改这个密码。

密码的有效期(和第三个字段相比)

第5个字段是密码的有效期。这个字段也要和第三个字段相比,也就是说密码被修改后可以生效多少天。默认值 99999,也就是 27 年,大家可以认为永久生效。如果改为 90,那么密码被修改 90 天之后就必须再次修改,否则该用户就不能登录了。我们在管理服务器的时候可以通过这个字段强制用户定期修改密码。

密码修改到期前的警告天数(和第五个字段相比)

第6个字段是密码修改到期前的警告天数。这个字段要和第五个字段相比,就是密码到期前需提前几天修改。默认值是7,也就是说从密码到期前的 7 天开始,每次登录系统都会警告该用户修改密码。

密码过期后的宽限天数(和第五个字段相比)

第7个字段是密码过期后的宽限天数。也就是密码过期后,用户如果还是没有修改密码,那么在宽限天数内用户还是可以登录系统的;如果过了宽限天数,那么用户就无法再使用该密码登录了。天数如果是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

账号失效时间

第8个字段是用法的账号失效时间。这里同样要写时间戳,也就是用 1970 年 1 日 1 日进行时间换算。如果超过了失效时间,就算密码没有过期,用户也就失效,无法使用了。

保留

这个字段目前没有使用。

在 Linux 中,如果遗忘了密码,则可以启动进入单用户模式。这时既可以删除 /etc/passwd 文件中的密码标识字段,也可以删除 /etc/shadow 文件中的密码标识字段,都可以达到清空密码的目的

组信息文件 /etc/group

这个文件是记录组 ID(GID) 和组名的对应文件。etc/passwd 文件的第四个字段记录的是每个用户的初始组的 ID

文件格式:

第1字段 第2字段 第3字段 第4字段

组名

组密码标志

组ID (GID)

组中的用户

例如:lizhouwei:x:1000:lizhouwei


组名

第1个字段是用户组的组名。

组密码标志

第2个字段是组密码标志字段。和 /etc/passwd 文件一样,这里的"x"仅仅是密码标识,真正的加密之后的组密码保存在 /etc/gshadow 文件中。
不过,用户设置密码是为了验证用户的身份,但是用户组设置密码是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。

组ID (GID)

第3个字段是用户组的 ID,和 UID 一样,Linux 系统是通过 GID 来区别不同的用户组的,组名只是为了便于管理员识别。所以,在 /etc/group 文件中可以查看对应的组名和GID。

组中的用户

第4个字段表示的就是这个用户组中到底包含了哪些用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段。也就是说,写入这个字段的用户是这个用户组的附加用户。比如 lizhouwei 组就是这样写的"lizhouwei:x:1000",并没有在第四个字段中写入 lizhouwei 用户,因为 lizhouwei 组是 lizhouwei 用户的初始组。如果要查询这些用户的初始组,则需要先到 /etc/passwd 文件中查看 GID(第四个字段),然后到 /etc/group 文件中比对组名。

每个用户都可以加入多个附加组,但是只能属于一个个初始组。所以我们在实际工作中,如果需要把用户加入其他组,则需要添加附加组。一般情况下,用户的初始组就是在建立用户的同时建立的和用户名相同的组。

注意,/etc/passwd、/etc/shadow、/etc/group 之间的关系为:先在 /etc/group 文件中查询用户组的 GID 和组名;然后在 /etc/passwd 文件中查找该 GID 是哪个用户的初始组,同时提取这个用户的用户名和 UID;最后通过 UID 到 /etc/shadow 文件中提取和这个用户相匹配的密码

组密码文件 /etc/gshadow

这个文件就是保存组密码的文件。如果我们给用户组设定了组管理员,并给该用户组设定了组密码,那么组密码就保存在这个文件中,组管理员就可以利用这个密码管理者个用户组了。

 文件格式:

第1字段 第2字段 第3字段 第4字段

组名

组密码

组管理员用户名

组中的附加用户

例如:lizhouwei:!!::lizhouwei

组名

第1个字段是用户的组名。

组密码

第2个字段就是实际加密的组密码。注意,对于大多数用户来说,这个字段不是空就是"!",代表这个组没有合法的组密码。

组管理员用户名

第3个字段表示这个组的管理员是哪个用户。

组中的附加用户

第4个字段用于显示这个用户组中有哪些附加用户。

用户模板目录 /etc/skel/

此文件是一个用户创建的时候一个模板,如果该/etc/skel文件夹有文件的话,使用useradd命令则会将/etc/skel/下的文件拷贝到新建用户的/home/用户名文件夹下

Linux用户和用户组管理 用户配置和管理的相关文件的更多相关文章

  1. linux创建www用户组和用户

    linux创建www用户组和用户 wdcp中的nginx服务启动需要依赖www用户,因此若没有此用户就可能会启动失败.创建这个用户的方法: [root@bogon local]# id www [ro ...

  2. 系统用户与用户组管|chfn、密码管理、身份切换、sudo

    2 系统用户与用户组管理 GID为GroupId,即组ID,用来标识用户组的唯一标识符 UID为UserId,即用户ID,用来标识每个用户的唯一标示符 /etc/passwd /etc/shadow ...

  3. linux下创建用户组与用户 只能访问指定目录的方法 以及FTP用户配置详解

    VSFTPD 安装: -- 查看是否已经安装 VSftpd: rpm -qa | grep vsftp yum install -y vsftpd groupadd ftpuser #创建ftpuse ...

  4. Linux系统的用户和用户组管理

    一.用户账户管理 Linux/Unix是一个用户.多任务的操作系统:在讲Linux账号及账户组管理之前,先简单了解一下多用户.多任务操作系统的基本概念. Linux的单用户多任务 在Linux下,当你 ...

  5. Linux常用命令学习8---(用户和用户组管理)

    1.用户和用户组     用户和用户组概念        用户:使用操作系统的人(Linux支持多个用户在同一时间登陆同一个操作系统)        用户组:具有相同权限的一组用户(Linux系统中可 ...

  6. 攻城狮在路上(叁)Linux(十一)--- 用户与用户组、文件权限、目录配置

    一.用户与用户组: 3个概念:文件所有者(user).用户组(group).其他人(others). /etc/passwd  <==存放所有的用户名 /etc/shadow  <==存放 ...

  7. linux用户管理 用户和用户组信息

    用户管理配置文件 用户信息文件  /etc/passwd 密码文件 /etc/shadow 用户配置文件 /etc/login.defs /etc/default/useradd 新用户信息文件 /e ...

  8. Linux实战教学笔记14:用户管理初级(上)

    第十四节 用户管理初级(上) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,账号管理 1.1 管理用户命令汇总 命令 注释说明(特殊颜色的必须掌握) useradd增 ...

  9. Linux基础——用户和用户组

    Linux基础--用户和用户组 一.用户和用户组 用户在/etc/passwd中 用户组在/etc/group/中注意:在创建用户时,系统默认生成一个用户组(组名和用户名一致) 1.用户 1.1查看用 ...

  10. 一起来学linux:用户与用户组

    linux的文件属性以及管理方法和windows是完全不同的,所以学习linux首先来了解下用户以及文件权限是怎么回事 p { margin-bottom: 0.25cm; line-height: ...

随机推荐

  1. PHP下载远程文件的3种方法以及性能考虑

    今天在做导出Excel的时候,总是要测试导出的Excel文件,频繁的下载和打开,很麻烦 就想着写段代码一气呵成  服务端导出Excel==>下载Excel文件到本地==>并打开的操作. 这 ...

  2. Irrelevant Elements UVA - 1635 二项式定理+组合数公式+素数筛+唯一分解定理

    /** 题目:Irrelevant Elements UVA - 1635 链接:https://vjudge.net/problem/UVA-1635 题意:給定n,m;題意抽象成(a+b)^(n- ...

  3. ORACLE函数之日期时间转换函数

     1.          TO_CHAR 语法:TO_CHAR(X [,format]) 说明:将X按format格式转换成字符串.X是一个日期或者数字.format是一个规定了X採用何种格式转换 ...

  4. Who's in the Middle - poj 2388 (快速排序寻找中位数)

    题意; 寻找中位数 利用快速排序来寻找中位数. #include <iostream> using namespace std; int N; ]; int Median(int left ...

  5. 【Python + ATX基于uiaotumator2】之Android—APP自动化简易例子

    上代码: import uiautomator2 as u2 from time import sleep d = u2.connect_usb('608ad0fe') #打开小卖 # d(text= ...

  6. Tomcat无法启动:Server Tomcat v8.5 Server at localhost failed to start

    Tomcat无法启动 项目状态 Maven项目:基础环境(依赖,基本配置文件)搭建完成,前端页面都导入,部署测试项目环境,出现该问题 问题情景: 1.弹窗提示Tomcat启动失败  2.Console ...

  7. char * const p和const char *p的区别

    1. 前者定义P为常量,即只能单向赋值一次,P++展开为p=p+1,重复赋值给常量,出错,后者P为地址变量,地址变量是指向该变量的存储地址值如:4B3F6A,不能赋给一个字符值(字符相当于ascii表 ...

  8. weixin oauth 授权

    1. 先了解下请求授权页面的构造方式:   https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_u ...

  9. Codeforces Beta Round #25 (Div. 2)--A. IQ test

    IQ test time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...

  10. C++STL容器(lower_bound,upper_bound)

    C++STL容器中有三种二分查找函数,这里分享其中的两个 这两个函数其实都可以理解为不破坏数组次序的前期下能将目标元素插入到数组的第几个位置,不过在细节上两个函数有所差异 int d[6]={0,2, ...