用户和组的基本概念

用户和组是操作系统中一种身份认证资源。

每个用户都有用户名、用户的唯一编号 uid(user id)、所属组及其默认的 shell,可能还有密码、家目录、附属组、注释信息等。

每个组也有自己的名称、组唯一编号 gid(group id)。一般来说,gid 和 uid 是可以不相同的,但基本上约定俗成绝大多数都会让它们保持一致。

组分为主组 (primary group) 和辅助组 (secondary group) 两种,用户一定会属于某个主组,也可以同时加入多个辅助组。

用户组分类

* 系统管理员

具有使用系统所有权限的用户,其 UID 为 0,默认名称为 root。因为 uid 默认具有唯一性,所以超级管理员默认只能有一个(如何添加额外的超级管理员,见下文)。

* 普通用户

即一般用户,其使用系统的权限受限,默认只能执行 /bin、/usr/bin、/usr/local/bin 和自己目录下的命令。尽管普通用户权限受到限制,但是它对自己目录下的文件是有所有权限的。其 UID 为500-60000之间。

* 系统用户

保障系统运行的用户,一般不提供密码登录系统,其 UID 为1-499之间。

相关配置文件

1) /etc/passwd

/etc/passwd 文件存放系统用户配置,记录用户的基本属性,对所有用户来说都是可读的。每一行记录对应一个用户,属性以冒号间隔,格式如下:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:默认shell

实例:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

注:

  • 第二列默认都为 x 。在以前老版本的系统上,第二列是存放用户密码的,但是密码和用户信息放在一起不便于管理(密钥要保证其特殊属性),所以后来将密码单独放在另一个文件/etc/shadow中,这里就都写成 x 了。
  • 用户的默认 shell 表示的是用户登录(如果允许登录)时的环境或执行的命令。例如 shell 为 /bin/bash 时,表示登录时就执行 /bin/bash 命令进入bash环境;shell为/sbin/nologin 表示该用户不能登录,之所以不能登录不是因为指定了这个特殊的程序,而是由/sbin/nologin这个程序的功能实现的,假如修改Linux的源代码,将/sbin/nologin这个程序变成可登录,那么shell为/sbin/nologin时也是可以登录的。

2) /etc/shadow

/etc/shadow 文件存放用户密码信息。该文件具有特殊属性,除了超级管理员,任何人都不能直接读取和修改该文件,而用户自身之所以能修改密码,则是因为该文件的suid属性,使得修改密码时临时提升为root权限。

文件类似于 passwd,也是每一行记录代表一个用户,格式如下:

实例:

root:$1$isNMgfFT$Xs7zD53r4EWLSPpxw5lhz0:17742:0:99999:7:::
bin:*:17110:0:99999:7:::
    1. 用户名
    1. 加密后的密码
  • 3)上次更改密码时间距 1970 年 1 月 1 日的天数。
  • 4)密码更改后,不可以更改的天数。
  • 5)密码更改后,必须再次更改的天数(即密码的有效期)。
  • 6)密码过期之前提前多少天提醒用户(在正确登录时)。
  • 7)密码过期之后多少天帐户过期(在正确登录时)。
  • 8)帐户过期时间(自 1970-1-1 到该天经过了多少天来表示)。
  • 9)保留字段。

注:第二列还有其他含义:

  • 该列留空,即"::",表示该用户没有密码。
  • 该列为"!",即":!:",表示该用户被锁,被锁将无法登陆,但是可能其他的登录方式是不受限制的,如ssh key的方式,su的方式。
  • 该列为"",即"::",也表示该用户被锁,和"!"效果是一样的。
  • 该列以"!"或"!!"开头,则也表示该用户被锁。
  • 该列为"!!",即":!!:",表示该用户从来没设置过密码。
  • 如果格式为"\(id\)salt\(hashed",则表示该用户密码正常。其中\)id$的id表示密码的加密算法,\(1\)表示使用MD5算法,\(2a\)表示使用Blowfish算法,"\(2y\)"是另一算法长度的Blowfish,"\(5\)"表示SHA-256算法,而"\(6\)"表示SHA-512算法,可见上面的结果中都是使用sha-512算法的。\(5\)和\(6\)这两种算法的破解难度远高于MD5。\(salt\)是加密时使用的salt,$hashed才是真正的密码部分。

3) /etc/group

/etc/group 文件是用户组群的主要配置文件,内容包括用户组群的名称、GID等信息,并且能显示出用户是归属于哪一个或者哪几个组群。每一行表示一个组群账户的信息,每一行有4段,每段之间用“:”分隔开:

groupname :passwd : GID : userlist
  • groupname:组名
  • passwd:密码位,统一表示为“x”
  • GID:

    * CentOS6 为系统组预留1-499;可以通过/etc/login.defs文件查看GID的最大和最小值

    * CentOS7 为系统组预留1-999;可以通过/etc/login.defs文件查看GID的最大和最小值
  • 以当前组为附加组的用户列表(分隔符为逗号):

    * 当成员先把该组当作辅助组,再转成主要组时,用户列表不改变。

    * 当成员离开该组时,用户列表被删除。

4) /etc/gshadow

/etc/gshadow 是 /etc/group 的加密文件,用户组群的管理密码就存放在这个文件中。 /etc/gshadow 文件中每一行记录一个用户组群信息,每一行有4段,每段之间用“:”分隔开。文件格式如下:

  • groupname:组名
  • 密码位
  • 组管理员列表:

    * 只能由root任命或撤销,可以同时有多名,以,为间隔;

    * 权利:可以修改组密码,可以将用户从该组(辅助组)当中添加或删除。
  • 以当前组作为附加组的成员列表(以逗号为分隔符):

    * 当成员先把该组当作附加组,再转成主要组时,成员列表不改变;

    * 当成员离开该组时,成员列表被删除。

5) /etc/skel/*

/etc/skel/* 该目录下的所有文件都是隐藏文件,用来存放新用户配置文件的目录,当新用户被创建时,该目录下的文件会被自动地复制到新用户的家目录下。通过修改、添加、删除/etc/skel目录下的文件,可为新创建的用户提供统一的、标准的、初始化用户环境。若用户家目录下的配置文件发生故障时,将/etc/skel目录下相应的文件复制到用户家目录下即可。

6)/etc/login.defs

用来定义创建一个用户时的默认设置,比如创建邮箱、分配权限、指定用户的 UID 和 GID 的范围,用户的过期时间、是否需要创建用户主目录等等。

7)/etc/default/useradd

创建用户时的默认配置。useradd -D 修改的就是此文件。

# useradd defaults file
GROUP=100 # 在useradd使用-N或/etc/login.defs中USERGROUPS_ENAB=no时表示创建用户时不创建同用户名的主组(primary group),
# 此时新建的用户将默认以此组为主组,网上关于该设置的很多说明都是错的,具体可看man useradd的-g选项或useradd -D的-g选项
HOME=/home # 把用户的家目录建在/home中
INACTIVE=-1 # 是否启用帐号过期设置(是帐号过期不是密码过期),-1表示不启用
EXPIRE= # 帐号过期时间,不设置表示不启用
SHELL=/bin/bash # 新建用户默认的shell类型
SKEL=/etc/skel # 指定骨架目录,前文的/etc/skel就在这里
CREATE_MAIL_SPOOL=yes # 是否创建用户mail缓冲

用户管理命令

1) 新建用户账号

语法格式
useradd 选项 用户名

选项:

-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

用户名:

指定新账号的登录名。
实例
useradd -d /usr/marklogzhu -m marklogzhu

此命令创建了一个用户 marklogzhu ,其中-d和-m选项用来为登录名marklogzhu产生一个主目录/usr/marklogzhu(/usr为默认的用户主目录所在的父目录)。

2) 修改用户账号

语法格式
usermod 选项 用户名

选项:

常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。另外,有些系统可以使用选项:-l 新用户名,这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
实例
 usermod  -l  新用户名  -d  /usr/新用户名  -m  老用户名

3) 删除用户账号

语法格式
userdel 选项 用户名

常用的选项是 -r,它的作用是把用户的主目录一起删除。

实例
userdel -r newmarklogzhu

4) 用户口令

用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。

指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:

passwd 选项 用户名

选项:

-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫用户下次登录时修改口令。
实例

实例1:指定自己的口令

[root@VM_0_15_centos usr]# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

实例2:超级管理员指定其他用户的口令

[root@VM_0_15_centos usr]# passwd marklogzhu
Changing password for user marklogzhu.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

用户组管理命令

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

1) 新增用户组

语法格式
groupadd 选项 用户组

选项:

-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
实例
 groupadd group1

新增加一个用户组 group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。

2)删除用户组

语法格式
groupdel 用户组
实例
groupdel group1

3)修改用户组

语法格式
groupmod 选项 用户组

选项:

-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n 新用户组 将用户组的名字改为新名字
实例

将组group2的标识号改为10000,组名修改为group3。

 groupmod –g 10000 -n group3 group2

4) 切换用户组

一个用户可以同时属于多个用户组,用户可以在用户组之间切换,以便具有其他用户组的权限。

语法格式
newgrp  用户组
实例

切换当前用户到 root 组。

newgrp root

常用命令

1) 显示当前登陆用户

users

2) id

id 选项 用户名

选项:

-u:得到uid
-n:得到用户名而不是uid
-z:无任何空白字符输出模式,不能在默认的格式下使用。

3) 查看最近登陆用户

last 选项

选项:

-n:显示记录数

其实查看的是 /var/log/wtmp 文件。

4) 查看登陆失败用户

lastb 选项

选项:

-n:显示记录数

5) 切换用户或以指定用户运行命令

语法格式
su(选项) 要切换身份的用户

选项:

-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份;
-f或——fast:适用于csh与tsch,使shell不用去读取启动文件;
-l或——login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量;
-m,-p或--preserve-environment:变更身份时,不要变更环境变量;
-s<shell>或--shell=<shell>:指定要执行的shell;
--help:显示帮助;
--version;显示版本信息。
实例

变更帐号为 root 并在执行 ls 指令后退出,变回原使用者。

su -c ls root

6) 提权操作

有时候需要root 权限,但是又不想将 root 账号告知,面对这种场景就可以使用提权操作,以其他人的身份执行。

语法格式
sudo (选项) (参数)

选项:

-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s<shell>:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。

参数:

指令:需要运行的指令和对应的参数。

配置 sudo 必须通过编辑 /etc/sudoers 文件,而且只有超级用户才可以修改它,还必须使用 visudo 编辑。之所以使用 visudo 有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用 visudo 来检查一下语法。

实例

增加 marklogzhu 账号 sudo 权限

1)进入 sudoers 文件: vim /etc/sudoers
2)找到 root ALL=(ALL) ALL ,在下面新增 marklogzhu ALL=(ALL) ALL

我们知道 etc/shadow 文件是只有管理员可以查看的,我们试下没有提权时能否查看:

[marklogzhu@VM_0_15_centos /]$ cat etc/shadow
cat: etc/shadow: Permission denied

提示没有权限,我们试下提权:

[marklogzhu@VM_0_15_centos /]$ sudo !!
sudo cat etc/shadow We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things: #1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility. [sudo] password for marklogzhu:
root:$1$L0j6SBPg$39oiYVrzXev1FXOWqQAqm/:17758:0:99999:7:::
bin:*:17110:0:99999:7:::

发现可以查看数据了!

注:!! 表示重复上一条命令

Liunx学习总结(三)--用户和用户组管理的更多相关文章

  1. Linux基础学习(7)--用户和用户组管理

    第七章——用户和用户组管理 一.用户配置文件 1.用户信息文件/etc/passwd: (1)用户管理简介:所以越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范.   ...

  2. 2019/12/11学习内容摘要(Linux系统用户与用户组管理①)

    一,认识/etc/passwd和/etc/shadow 1. /etc/passwd :文件中保存系统中所有的用户和用户的主要信息. 在命令行输入 cat /etc/passwd  | head  ( ...

  3. Linux 系统常用命令汇总(三) 用户和用户组管理

    用户和用户组管理 命令 选项 注解 示例 useradd [选项] 用户名 新建用户 创建一个名为tester的用户,并指定他的UID为555,指定加入test群,指定其使用C-shell:  use ...

  4. Linux 学习笔记04丨Linux的用户和用户组管理

    Chapter 3. 用户和用户组管理 由于Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以该账号身份进入系统. 3.0 用户与 ...

  5. Liunx学习笔记(三) 文件权限

    一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...

  6. Linux 用户和用户组管理

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

  7. Linux用户和用户组管理总结

    Linux下和用户和用户组管理有关的配置文件: /etc/group Group account information. /etc/gshadow Secure group account info ...

  8. Linux系列教程(十五)——Linux用户和用户组管理之用户管理命令

    上篇博客我们介绍了用户管理的相关配置文件,包括用户信息文件/etc/passwd,用户密码文件/etc/shadow:然后介绍了用户组信息文件/etc/group,用户组密码文件/etc/gshado ...

  9. 八、Linux 用户和用户组管理

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

随机推荐

  1. c语言进阶15-数据结构总结

    数据结构结论 1.阿基米德说过:“给我一个支点,我就能翘起地球”. 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成.记为:Data_Structure=(D, ...

  2. c语言进阶11-算法设计思想

    一.  算法设计的要求: 为什么要学算法? /* 输出Hello word! */ #include "stdio.h" void main() { printf("He ...

  3. C#3.0新增功能03 隐式类型本地变量

    连载目录    [已更新最新开发文章,点击查看详细] 从 Visual C# 3.0 开始,在方法范围内声明的变量可以具有隐式“类型”var. 隐式类型本地变量为强类型,就像用户已经自行声明该类型,但 ...

  4. 机器学习-EM算法

    最大期望算法 EM算法的正式提出来自美国数学家Arthur Dempster.Nan Laird和Donald Rubin,其在1977年发表的研究对先前出现的作为特例的EM算法进行了总结并给出了标准 ...

  5. 给hexo博客的NEXT主题添加一个云日历

    一点废话 hexo中有文件的归档,但是博文的数目多了,浏览的时候也是很不方便的.于是我就有找个云日历的想法了,折腾了几天,网上的方法都试过了.但是没出效果.于是想着自己来写一个.这自己写的这部分是基于 ...

  6. python课堂整理2

    一.字节和编码 1个字节是8位二进制 utf-8 表示一个中文要用3个字节 gbk 为中国汉字发明,2个字节可表示汉字 所以 utf-8 可以读gbk编码,而gbk去读utf-8 的内容会乱码 uni ...

  7. 转 java - java反射机制创建对象

    转 https://blog.csdn.net/nch_ren/article/details/78814080 1.创建service实现类 package com.springstudy.refl ...

  8. ioc和aop的区别

    IoC,(Inverse of Control)控制反转,其包含两个内容:其一是控制,其二是反转.在程序中,被调用类的选择控制权从调用它的类中移除,转交给第三方裁决.这个第三方指的就是Spring的容 ...

  9. 第三章 基础算法和数据结构高频题 I

    区间类问题 1 Missing Interval public List<String> findMissingRanges(int[] nums, int lower, int uppe ...

  10. 原创:用node.js搭建本地服务模拟接口访问实现数据模拟

    前端开发中,数据模拟是必要的,这样就能等后台接口写完,我们直接把接口请求的url地址从本地数据模拟url换成后台真实地址就完成项目了.传参之类的都不用动. 之前网上找了很多类似于mock等感觉都不太实 ...