一.用户账号概述
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 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作。
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
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: 1
499,Centos7: 1999 - 普通用户的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 | 定义组成员列表,以逗号分隔**(重新定义,不是追加)** |
示例
2.1.6 groupdel删除用户组
- 格式:groupdel 组账号名
示例
2.1.7 查询账户和组的信息
查询用户账号所属组—groups命令
格式: groups [用户名]
查询用户身份标识-id
格式:id [用户名]
查询用户账号的登录属性-finger命令
finger命令需要通过yum install finger -y安装
查询当前主机的用户登录情况—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的含义
| 权限项 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
|---|---|---|---|---|---|---|---|---|---|
| 字符表示 | r | w | x | r | w | x | r | w | x |
| 数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
| 权限分配 | 文件所有者 | 文件所属组 | 其他用户 | ||||||
| 八进制数表示 | 7 | 7 | 7 |
在表示属主、属组用户或者其他用户对该文件的访问权限时,主要使用了三种不同的权限字符,权限字符也可以分别表示为八进制数字4、2、1,表示一个权限组合时需要将数字进行累加。 各自含义如下:
- 读取 r :允许查看文件的内容、显示目录列表
- 写入 w :允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
- 可执行 x :允许运行程序、切换目录。
命令格式与选项
格式: 字符形式: chmod [ugoa···][+-=][rwx] 文件...
数字形式: chmod nnn 文件/目录...
选项详解
试例:
[root@localhost umask]# chmod 700 6.txt(设置文件为700权限,也就是只给属主可读可写可执行的权限)
[root@localhost umask]# ll 6.txt
-rwx------ 1 root root 0 3月 11 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,创建文件夹和文件,查看权限
- 文件夹
- 目录
2 将umask设置为
022,创建文件夹和文件,查看权限
- 文件夹
- 文件
3.特殊情况
如果将umask码设置为123,新建文件夹是,属主的权限是没有变化的,因为umask文件的权限本来就是666,所以没有可以减去的x,所以默认保持不变