开发者学堂课程【Linux企业运维实战 - 入门及常用命令:Linux 认证授权及用户定义及组的类别】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/550/detail/7608
Linux 认证授权及用户定义及组的类别
内容介绍:
一、本章内容介绍
二、介绍安全 3A
三、用户 user
四、组 group
五、安全上下文
六、组的类别
七、用户和组的配置文件
注意:
管道左侧的命令一定是标准输出,有些命令是没有标准输出的,不是所有命令都有标准输出的。但是没有标准输出的命令放在管道左侧是没有意义的。
管道右边的命令一定需要有标准输入功能,虽然学了很多命令,但是标准输入的的命令不是特别多,比如 cat、tr、mail、bc等需要标准输入。
Echo $user | echo 这个命令是没有意义的,写法逻辑上就是混乱的。Echo 命令执行是不需要标准输入的,这个写法就是不对的。要记得管道右边的命令一定是要包含有标准输入功能的,不然就是没有意义。
使用 openssl rand –base64 命令可以生成随机字符,随机字符可以指定多少位,而且是随机的。
例如 openssl rand –base64 12 可以生成12位的随机字符,含有大写字母、小写字母和数字,有时候会带一些别的符号。
所以现在要处理一下,把除了字母和数字的其他字符删掉,把大写字母转换为小写字母,变成小写字母和数字组成的随机字符串,将来作为文件名。所以使用命令 openssl rand –bass64 10 丨tr –dc ‘[:alnum:]’就光留下了子母和数字。
因为 c 是补集,就把其他的字符都给删掉了。
再使用 openssl rand –bass64 10 丨tr –dc ‘[:alnum:]’ 丨tr ‘[:upper:]’ ‘[:lower:]’ 将大写字母转换为小写,再加上 touch 就可以作为文件名。补上 .log 就可以加后缀。
“用户、组和权限”,在工作中是很基础的一章。
我们在 linux 当中每个人使用不用的系统账号,只有每个人使用不同的账号那么将来在系统中才会分配不同的权限。
在 linux 当中假如有三个人 a、b、c,那么需要区分三个人,就必须针对这三个人对应创建不同的用户。
如果共用一个账号,那么系统就分不清三个人到底谁是谁,所以在linux里面区分不同的人就要使用不同的账号。
张三用张三的账号,李四用李四的账号,只有不同的人运用不同的账号才能判断不同的身份,进而分配不同的权限。
一、本章内容介绍
◆解释Linux的安全模型
◆解释用户帐号和组群帐号的目的
◆用户和组管理命令
◆理解并设置文件权限
◆默认权限
◆特殊权限
◆ACL
主要介绍的就是第一,用户账号的管理,第二,组的管理,第三有了用户和组的管理命令之后,该设置他的默认权限和特殊权限,以及功能非常强大的ACL权限,这些是这一章的重点。
二、介绍安全 3A
针对 linux 里面不同的用户创建不同的用户账号用以区分。生活中的资源为了安全都会有3A认证,3A并不是 linux 特有的,在工作中或者是一些网络设备中也有3A机制,3A代表着以下三个单词。
◆资源分派 :
Authentication :认证
Authorization :授权
Accouting|Audition :审计
首先讲解的是在我们平时生活中接触非常多的资源,这些资源有可能是文件,也可能是工作中的网络资源或是其他的一些资源。
生活中的资源为了安全都会有3A认证,网络设备也有3A机制。认证时验明身份,知道身份才可以授予不同的权限,再 windows 中即为判断不同的密码,在手机上可能就是指纹或者人脸识别一类的。
认证的目的只是判断身份,最终的功能需要授权,不同的人授予不同的权限,授权完成之后可以不同的操作了,但是为了安全考虑需要监控,也就是审计。
三、用户 user
◆令牌 token,identity
◆Linux用户: Username/UID
◆管理员: root,0
◆普通用户: 1-65535
系统用户: 1-499, 1-999 ( CentOS7 )
对守护进程获取资源进行权限分配
登录用户: 500+, 1000+ ( CentOS7 )
交互式登录
在linux里面要判断用户的不同身份实际上是基于令牌机制的。令牌的因为单词为 token。
在linux里面,只要你登录就会给你一个令牌,将来你访问以下软件就要出示这个令牌去判断你的身份。
系统登录成功 login 以后,系统会返回一个令牌 token,登录靠用户名 username 和成对的密码 password 判明合法身份。
当然在 linux 里面应该有存放密码的数据库,因为系统中不仅有一个用户,有很多用户,每个用户登录时都需要在数据库里进行验证。当用户登录成功,系统会给他一个令牌,将来去访问资源时,就会出示令牌,把令牌提交给资源 file,资源根据令牌来决定你是否有权限访问。
当然还会有这样一个问题,令牌是登录的时候获取到的,如果说这个用户登录是 token1,但是这个资源授权是对 token2授权的,那么在系统中就算补上 token2,但是用户已经登录了,除非你重新登录去获取 token2,不然 token2 是获取不到的。
所以我们知道了想要获取最新的令牌必须要重新登录。
在 linux 里面,系统判定你的身份是根据 UID 来区分的,用户账号的范围可以达到六万多甚至更多,非零为普通用户,为零为管理员。系统用户是给系统用的,即软件等,账号1-499为 Cent0S6,1-999为 CentOS7。登录用户是供人所使用的。
比如 nginx 服务,nginx 是给系统用的,要创建账号才是给人用的。
在 windows 里面,查看用户用 user 查看:
知道了当前的两个用户账号,一个是 administrator,一个是 guest,但是我也可以创建用户,比如说创建 test 这样一个用户,密码 123。这样就创建了一个账号,再查看就会有三个账号了。
当然在 windows 里也可以创建组,组为 local,查看到系统中带的组列表。
组和用户之间的关系就是,组是用户的集合。我们可以把用户添加到组里面去,在不太复杂的情况下不添加进组也是可以的,比如单个的人我们可以单个的授权。但是如果有好几个人想要授予同样的权限,把用户添加进组的好处就是不需要一个一个的授权很多次,创建一个组就一个对组授权,把这个组的成员都授予上权限,简化授权的操作。如果人数不多,也可以不添加进组。
三、组 group
◆Linux组: Groupname/GID
◆管理员组: root, 0
◆普通组:
系统组: 1-499, 1-999 ( CENTOS7 )
普通组: 500+, 1000+ ( CENTOS7 )
在 Windows 里,组为 localgroup,组是用户的集合,可以把用户账号加到组里面成为成员。
好处是方便管理,可以简化授权的操作,减少授权次数,不用一个一个授权,可以统一授权。组在 linux 里面也有组 ID,而且和 Windows 里有区别,在 linux 里面用户名和组名允许同名,但是在 windows 里面用户名和组名是不允许同名的。
Windows 和 linux 有一些概念是想通的,但是还是会有些细微的差别。
默认情况下每建一个账号会同步建一个组,称为私有组,比如我们建立了 wang 账号,那么系统就会自动创建一个组为 wang,wang 账号会自动添加进私有组 wang 里面。
建一百个账号就会建立一百个组。在 Windows 里不会自动创建组,而是都储存在 users 里面。
四、安全上下文
◆Linux 安全上下文
运行中的程序:进程(process)
以进程发起者的身份运行:
root: /bin/cat
mage: /bin/cat
进程所能够访问资源的权限取决于进程的运行者的身份
在无论 linux 还是 windows里面。当我们去访问资源时,到底能不能访问资源是由用户决定的还是由访问的程序决定的呢?
假设有一个用户叫 user1,用 cat 命令访问我们磁盘上的一个文件 log,同一个用户通过 nano 去访问同一个文件 log,那么到底可不可以访问文件 log 跟使用命令 cat 还是使用 nano 有没有关联呢?
答案是没有关联,访问权限由用户决定,这个由用户来决定访问资源的方式就叫做上下文。
文件的访问是由用户决定的而不是用程序决定的。比如张三和李四都用 cat 去访问可能得到的权限是不一样的。
五、组的类别
◆Linux 组的类别
用户的主要组(primary group)
用户必须属于一个且只有一个主组
组名同用户名,且仅包含一个用户,私有组
用户的附加组(supplementary group)
一个用户可以属于零个或多个辅助组
一个组可以包含多个用户,对一个组授权,里面的多个用户都将获得权限,比如 g1 组里有 wang 账号和 mage 账号,一旦对 g1 组授权,那么里面的 wang 账号 和 mage 账号也将获得同样的权限;同样一个用户也可以加到多个组里,wang 账号可以加到 g1组、g2 组和 g3 组三个组里面,但是 g1、g2和 g3 获取的权限是不一样的,那么 wang 账号可能会获取到什么权限呢?
答案是用户将获得多个所加组的累加权限。组和用户之间的关系是多对多的关系,组可以包括多个账号,一个账号也可以加到多个组里面去。
组细分为两种,主要组和附加组,主要组的特点是一个账号必须属于一个组,它不能不属于任何组,比如属于某个组,这个组就是主要组,其他的组就是附加组。就像到了单位以后你必须属于一个岗位,你有一个主要身份,其他身份可有可无,所以附加组也可有可无,主组有且只有一个。
在 linux 里面默认情况下当你创建一个账号时会默认创建一个同名主组,当然这个主组也不一定非要用它的同名组,也可以用本身就有的组作为新建长好的主组。
主组的用处就是你创建的文件就放入你的主组里面。
六、用户和组的配置文件
◆Linux 用户和组的主要配置文件:
/etc/passwd :用户及其属性信息(名称、UID、主组 ID等)
/etc/group :组及其属性信息
/etc/shadow :用户密码及其相关属性
/etc/ gshadow :组密码及其相关属性
前面讲到系统判明账号的时候不是根据用户名,是根据你的 uid 判明账号的身份,那么这个 UID包括该账号的对应关系以及这个账号是否要设置口令之类的,这些东西的存放就存放在上述四个相关配置文件里。
其中前两个 passwd 和 group 使用用户以及组的口令信息的。后面两个 shadow 和 gshadow 是放密码和相关属性的。
Etc 跟组相关的文件主要是 passwd 和shadow 文件,passwd 文件是文本文件可以修改,但格式不能随便写。可以用 man 来查看。
一个账号有七个信息,分别是 name、password、uid、gid、gecos、directory 和 shell。系统判明的身份不是根据用户名,而是根据 uid,Id 为零就是管理员,非零为普通用户。
主组的 id 为 gid,是必须有的。
Gecos 为描述信息,可以人为的添加,可以用 chfn 添加描述信息,比如名字,办公室,电话等等。
加完之后就可以看见已添加。
不过这样看不清楚,可以挂光盘使用别的方式查看。专门用来查看用户信息的叫 finger,但是要提前挂上光盘。
Centos 6 有一个功能为自动挂光盘,使用命令 rpm –ivh /misc/cd/packages/finger- 安装。装完之后在执行命令 finger wang 就可以查看信息。
默认账号一登陆就进入家目录,当然也可以人为使用 nano 修改。在默认的家目录里会存在配置文件,但自建的就没有。创建 wang 账号之后,在 home 文件里有一个配置文件。
而自建的文件里肯定是空的。
而在这些文件里面就定义了一些东西,例如我们说的 bash 变量,包括 psy 就都在里面。
所以修改家目录不是光修改文件夹,而是把配置文件也要添加进去。
现在有这样一个情况,我就想把 wang 账号 放在 data 目录下,如果说这个账号在我们在我们创建的时候就放在 data 目录下,那么 home 文件下根本就不存在这些配置文件。
所以在我们创建账号的时候,系统会自动的复制它的配置文件到它的家目录中去,就在 /etc/skel 这个目录下。
如果想自建家目录,就要把 /etc/skel 复制过去,使用 cp –r /etc/skel .[^.]* /data/wang 命令复制到 data 中去,前提是有权限访问。