linux账号及权限管理

446 阅读15分钟

一.用户账号概述

1.1.1 用户和用户组之间的关系

Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。

例如,某台 Linux 服务器上有 4 个用户,分别是 root、www、ftp 和 mysql,在同一时间内,root 用户可能在查看系统日志、管理维护系统;www 用户可能在修改自己的网页程序;ftp 用户可能在上传软件到服务器;mysql 用户可能在执行自己的 SQL 查询,每个用户互不干扰,有条不紊地进行着自己的工作。与此同时,每个用户之间不能越权访问,比如 www 用户不能执行 mysql 用户的 SQL 查询操作,ftp 用户也不能修改 www 用户的网页程序。

不同用户具有不问的权限,毎个用户在权限允许的范围内完成不间的任务,Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。

因此,如果要使用 Linux 系统的资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统(账户和用户是一个概念)。通过建立不同属性的用户,一方面可以合理地利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。

每个用户都有唯一的用户名和密码。在登录系统时,只有正确输入用户名和密码,才能进入系统和自己的主目录。

用户组是具有相同特征用户的逻辑集合。简单的理解,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,那如果有 100、1000 甚至更多的用户呢?

显然,这种方法不太合理。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。

将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作。

image.png

1.1.2 用户账号的分类(概念)

  • 超级用户: root用户是Linux操作系统中默认的超级用户账号,对本主机拥有最高的权限,系统中超级用户是唯一的。

  • 普通用户: 由root用户或其他管理员用户创建,拥有的权限会受到限制,一般只在用户自己的宿主目录中拥有完整权限。

  • 程序用户: 在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,仅用于维持系统或某个程序的正常运行,如bin、daemon、ftp、mail等。 了解了上述三种用户账号的分类


1.1.3 查看用户和组的基本信息

下面简单可以试一下这个命令:

[root@localhost ~]# id 用户名(超级用户和普通用户都是可以的)

输入后,会有如下显示

[root@localhost ~]# id root
uid=0(root) gid=0(root) 组=0(root)
#这里的能看到uid(用户ID)、gid(初始组ID), groups是用户所在组,这里既可以看到初始组,如果有附加组,则也能看到附加组

上面看到了四个内容uid,gid,用户所在组,附加组(有则显示,无则不显示)


uid

  • root用户账号的UID固定值0(上面使用命令就是用的root账号)
  • 程序用户账号的UID默认为Centos5,6: 1-499,Centos7: 1- 999
  • 普通用户的UID默认为Centos5, 6: 500~ 65535,Centos7: 1000~ 65535

uid的账号分配可以查看etc/Login.defs

image.png

1.1.4 用户账号文件位置及详细解释

  • 作用:保存用户名称、宿主自录、登录Sell等基本信息,每一行对应一个用户的帐号记录

  • 文件位置:

    • /etc/passwd :保存用户名称、宿主自录、登录Sell等基本信息
    • /etc/shadow:保存用户的账号、密码等有效信息

/etc/passwd文件内容详解

[root@localhost ~]# cat /etc/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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
这里省略,下面还有很多

可以看到,/etc/passwd 文件中的内容非常规律,每行记录对应一个用户。

大家可能会问,Linux 系统中默认怎么会有这么多的用户?这些用户中的绝大多数是系统或服务正常运行所必需的用户,这种用户通常称为系统用户或伪用户。系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。

这里第一行的root(超级管理员)来解释一下

root:x:0:0:root:/root:/bin/bash
每行用户信息都以 ":" 作为分隔符,划分为 7 个字段

字段1:root:用户名

字段2.:x:"x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中

字段3: 0:UID(用户ID)

字段4:0:GID(组ID)

字段5:root:用户全名

字段6:/root:用户宿主文件夹

字段7: 登录Shell信息( /bin/bash为可登陆系统,/sbin/nologin和/bin/false为禁 用户登陆系统)

tips:

whatis passwd(可以查看passwd文件在man中有什么内容)

man passwd(可以查看passwd手册,如果忘记可以查询)


/etc/shadow文件内容详解

每一行对应一个用户的密码记录。 默认只有root用户能够读取文件中的内容,而不允许直接编辑该文件中的内容。

[root@localhost ~]# cat /etc/shadow(查看/etc/shadow文件)
root:$6$RT3l3qkpWah.MqHR$OFQuPrn5NmMaMrAijCszGO4V7VJHRt/y1Nvv2y8fTrL.eUQOhFPz8/pC2Rj0LFJMxyeyjT0NbL8AVRO97.Mc3.::0:99999:7:::
bin:*:17110:0:99999:7::: (第一个:后显示*也是无法登陆)
daemon:*:17110:0:99999:7:::
rpc:!!:18993:0:99999:7:::(需要注意第一个:后显示!!表示无法登陆)

省略

同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 ":" 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。下面详细说明一下:

root:$6$RT3l3qkpWah.MqHR$OFQuPrn5NmMaMrAijCszGO4V7VJHRt/y1Nvv2y8fTrL.eUQOhFPz8/pC2Rj0LFJMxyeyjT0NbL8AVRO97.Mc3.::0:99999:7:::

字段1:用户帐号的名称;

字段2:使用SHA512加密的密码字串信息,当开头显示为“*” 或“! !”时表示此用户不能登录到系统。,若该字段内容为空,则该用户无须密码即可登录系统;

字段3:上次修改密码的时间,表示从1970年01月01日算起到最近一次修改密码时间隔的天数。我这里显示0天,没有修改过密码

tips:可以使用data -d "1970-1-1 天数 days"显示日期

字段4:密码的最短有效天数,自本次修改密码后,必须至少经过该天数才能再次修改密码。默认值为0,表示不进行限制;

字段5:密码的最长有效天数,自本次修改密码后,经过该天数以后必须再次修改密码。默认值为99999, 表示不进行限制;

字段6:提前多少天警告用户密码将过期,默认值为7;

字段7:在密码过期之后多少天禁用此用户,如果是0,则密码过期立刻失效,如果是-1,则代表永久不会失效;

字段8:帐号失效时间,此字段指定了用户作废的天数(从1970年01月01日起计算),默认值为空,表示账号永久可用;

字段9:保留字段,没有特殊含义。

1.2 用户账号管理

1.2.1 useradd-添加用户账号

命令格式

格式:useradd [选项]... 用户名

常用选项

选项作用
-u指定用户的UID号,要求该UID号码未被其他用户使用
-d指定用户的宿主目录位置(当与-M一起使用时,不生效)只能用绝对路径指定目录(且不需要事先创建目录)
-e指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式
-g指定用户的基本组名(或使用GID号),对应的组名必须已存在
-G指定用户的附加组名(或使用GID号),对应的组名必须已存在
-M不建立宿主目录。(一般用于系统用户账号)
-s指定用户的登录Shell,(比如/bin/bash为可登陆系统,/sbin/nologin和/bin/false为禁止用户登陆系统)

批量添加用户

单独使用useradd是无法批量添加用用户的,需要用到管道符和xargs命令

useradd {1..10} |xargs -n1 useradd (批量添加用户名1-10的用户)

生产环境下程序用户一般设置为:

[root@localhost ~]# useradd -M -s /sbin/nologin juejin (新建一个不建立宿主用户,进制用户登录系统的名为掘金的用户)

1.2.2 passwd-设置/更改用户密码

  • root用户可以指定用户名作为参数,对指定账号的密码进行管理;不指定用户名时,修改当前账号的密码。
  • 普通用户却只能执行单独的“passwd"命令修改自己的密码。

命令格式

passwd [选项]... 用户名

常用选项

选项功能
-d清空指定用户的密码,仅使用用户名即可登录系统
-l锁定用户账户,锁定的用户账号将无法再登录系统。(一定要事先设好密码)
-S查看用户账户的状态(是否被锁定)。
-u解锁用户账户

1.2.3 usermode-更该用户属性

命令格式

usermode [选项]... 用户名

常用选项

选项作用
-u修改用户的UID号
-d修改用户的宿主目录位置
-e修改用户的账户失效时间,可使用YYYY–MM-DD的日期格式
-g修改用户的基本组名(或使用GID号)
-G修改用户的附加组名(或使用GID号)
-M不建立宿主目录,即使/etc/login.defs系统配置中已设定要建立宿主目录
-s指定用户的登录Shell

以上选项与useradd命令中的含义相同

-l 更改用户账号的登录名称 格式:usermod -l 新名称 旧名称

-L 锁定用户账户

-u 解锁用户账户

tips:免交互更改密码:echo "密码" |passwd --stdin 用户名

实例

usermod -d

1.2.4 userdel-删除账户

命令格式

userdel [选项]... 用户名(结合-r可以删除宿主目录)

二.管理组账号

2.1.1组账号的分类

基本组(私有组): 基本组账号只有一个,一般为创建用户时指定的组。在/etc/passwd文件中第4段记录的即为该用户的基本组GID号。 附加组(公共组): 用户除了基本组以外,额外添加指定的组。

2.1.2组标识GID( Group IDentifi,组标识号 )

root用户账号的GID固定值0

  • 程序用户账号的GID默认为Centos5,6: 1499,Centos7: 1 999
  • 普通用户的GID默认为Centos5, 6: 500~ 65535,Centos7: 1000~ 65535

2.1.3 组账号文件

  • /etc/group:保存组账号基本信息
  • /etc/gshadow:保存组组账号的密码信息

字段含义:

mannbulueg:x:1000:mannbulueg(分为4端,每断用:分隔)

字段1 mannblueg (组名)
字段2 x  (密码占位符)
字段3 gid  (组id号)
字段4 mannyblueg (此组中的用户,如果有多个用户,用,分隔)

2.1.4 groupadd仅添加组

  • 命令格式 groupadd [-g GID]账号名

示例

[root@localhost ~]# groupadd -g  1002 zhansan (添加gid为1002 名字叫zhangsan的组)
[root@localhost ~]# cat /etc/group (查看组文件是否添加成功)
zhansan:x:1002:

2.1.5 gpasswd### 添加、设置、删除组成员

  • 命令格式: gpasswd [选项] 用户名... 组账号名

常用选项

选项作用
-a向组内添加一个用户
-d从组内删除一个用户成员
-M定义组成员列表,以逗号分隔**(重新定义,不是追加)**

示例

image.png


2.1.6 groupdel删除用户组

  • 格式:groupdel 组账号名

示例

image.png

2.1.7 查询账户和组的信息

查询用户账号所属组—groups命令

格式: groups [用户名] image.png

查询用户身份标识-id

格式:id [用户名]

image.png

查询用户账号的登录属性-finger命令

finger命令需要通过yum install finger -y安装

image.png

查询当前主机的用户登录情况—w命令、who命令

三. 文件目录的权限和归属

​ 在Linux文件系统的安全模型中,为系统中的文件赋予了两个属性:

  • 访问权限和文件所有者,简称“权限”和“归属”。其中访问权限包括读取、写入、可执行三种基本类型,

  • 归属包括属主(拥有该文件的用于账号)、属组(拥有该文件的组账号)。Linux系统根据文件和目录的访问权限、归属来对用户访问数据的过程进行控制。

3.1如何查看查看文件/目录的权限和归属


[root@localhost ~]# ll /etc/passwd
-rw-r--r-- 1 root root 2122 3月  10 22:56 /etc/passwd

在上述输出信息中,第3、4个字段的数据分别表示该文件的属主、属组,上面的"/etc/passwd"文件都属于root用户,root组:

而第1个字段的数据表示该文件的访问权限,如:"-rw-r–r–"。权限字段由四部分组成,各自的含义如下

  • 第一个字符:表示该文件的类型,可以是d(目录)、b(块设备文件)、c(字符设备文件)、“-”(普通文件)、字母“ l ”(链接文件)等;

  • 第2~4个字符:表示该文件的属主用户(User)对该文件的访问权限;

  • 第5~7个字符:表示该文件的属组内各成员用户(Group)对该文件的访问权限;

  • 第8~10个字符:表示其他任何用户(Other)对该文件的访问权限;

  • 第11个字符:这里的“ . ”与SELinux有关,目前不需要关注。

3.2 chmod-设置文件/目录权限

了解权限rwx的含义

权限项执行执行执行
字符表示rwxrwxrwx
数字表示421421421
权限分配文件所有者文件所属组其他用户
八进制数表示777

在表示属主、属组用户或者其他用户对该文件的访问权限时,主要使用了三种不同的权限字符,权限字符也可以分别表示为八进制数字4、2、1,表示一个权限组合时需要将数字进行累加。 各自含义如下:

  • 读取 r :允许查看文件的内容、显示目录列表
  • 写入 w :允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
  • 可执行 x :允许运行程序、切换目录。

命令格式与选项

格式: 字符形式: chmod [ugoa···][+-=][rwx] 文件... 
数字形式: chmod nnn 文件/目录...

选项详解

image.png

试例:

[root@localhost umask]# chmod 700 6.txt(设置文件为700权限,也就是只给属主可读可写可执行的权限)
[root@localhost umask]# ll 6.txt
-rwx------ 1 root root 0 311 20:33 6.txt(可以看到已经设置成功)

3.3chown-设置文件和目录的归属(属主和属组)

命令格式

chown/chgrp 属主 文件或目录 
chown/chgrp :属组 文件或目录 
chown/chgrp 属主:属组 文件或目录
  • 常用选项: -R:递归修改指定目录下所有子项的权限(包括目录中的文件)

四 umask应用

我们新建一个新的文件或者目录时,它的默认权限时什么呢,这个与umask有关。

1 .unmask作用:

设置目录和文件的默认权限; 指定目前用户在新建文件或目录时的权限默认值; 新建的文件或者目录的权限为默认最大权限减去umask(普通文件的最大默认权限为666,目录的最大默认权限为777)

格式:
umask查看:	umask
umask设置:	umask 000

umask含义

默认的umask为0022,可以输入umask查看,拿0022代表什么呢

  • 第一个0代表文件和目录的特殊权限
  • 第二个0代表文件和目录的所有者rwx权限
  • 第三个2表示文件或目录的所属组被拿走了w权限,及所属组的权限r-x
  • 第四个2表示文件或目录的其他人被拿走了w权限,及所有人的权限为r-x

实例

1.设置usk为000,创建文件夹和文件,查看权限

  • 文件夹 image.png
  • 目录

image.png 2 将umask设置为022,创建文件夹和文件,查看权限

  • 文件夹

image.png

  • 文件

image.png 3.特殊情况

如果将umask码设置为123,新建文件夹是,属主的权限是没有变化的,因为umask文件的权限本来就是666,所以没有可以减去的x,所以默认保持不变

image.png