前言
文章的内容来源拉钩教育上的课程学习,通过写博客的方式,更好的提高对该知识的掌握。
一、权限抽象
-
一个完整的的权限管理体系,要有合理的抽象。就这包括对用户、进程、文件、内存、系统调用等抽象。 -
首先,我们来说下用户和组。Linux是一个多用户平台,允许多个用户同时登录该系统。Linux将用户抽象成账户,账户可以登录系统,如通过输入用户名+密码的方式进行登录,也可以通过证书的方式进行登录。 -
为了方便分配每个账户的权限,Linux还支持Group账户。组账户是多个账户的集合,组可以为成员分配某一类权限。每个用户可以在多个组,这样可以通过组快速分配权限。 -
组的概念类似于微信群。一个用户可以在多个群里。如某个组中分配了10个目录的权限,那么新建用户的时候可以将这个用户增加到这个组中,这样新增的用户不需要去一个个去分配权限。而每一个微信群都有一个群组,Root账户也叫做超级管理员,就相当于微信群主,他对系统有完全的掌控。一个超级管理员可以使用系统提供的全部能力。 -
此外,Linux还对文件进行权限抽象(目录也是一种文件)。Linux中一个文件可以设置三种权限:
- 读权限 r:控制读取文件
- 写权限 w:控制文件写入
- 执行权限x:控制文件执行,如脚本、应用程序。
-
然后每个文件可以从三个维度去配置上述的3种权限(User、Group、All) 1.用户维度。每个文件可以所属1个用户,用户维度配置的rwx在用户维度生效 2.组维度。每个文件可以所属一个分组,组维度配置的rwx在组维度生效。 3.全部用户维度。设置对所有用户的权限。
初始权限问题
- 一个文件创建后,文件的所属用户被设置创建文件的用。谁创建谁拥有,这个逻辑很顺理成章。但是文件的组又是如何分配的?
Linux中就是为每个用户创建了一个同名分组。比如说zhang这个用户创建时,工作分组就会默认使用它同名组zhang,如果zhang想要切换分组时,可以使用newgrp指令切换另一个分组。 文件创建后,权限通常是 rw-rw-r–
权限划分
- 权限架构思想遵循一个原则,权限划分边界足够清晰,尽量做到足够清晰,尽量做到相互隔离。Linux提供了用户和组。 这里我们说说root的危害,举个例子,你有一个MYSQL进程执行在root账户上,如果有黑客攻破了MySQL服务,获得MySQL上执tm行SQL权限,那么整个系统都被暴露在黑客眼前了。黑客可以利用MYSQL的copy From Prgram指令为所欲为,备份关键文件,然后删除他们,并要挟你通过指定账户打款。如过执行最小权限原则,即使黑客攻破我们MySQL服务,也只能获得最小权限。
权限包围
- Linux提供了权限包围的能力。如一个应用,临时需要高级权限,可以利用交互界面(比如让用户输入root账户密码)验证身份,然后执行需要高级权限的操作,然后马上恢复到普通的账户下,这样做可以减少应用在高级权限的时间,并做到专权专用,防止被恶意程序利用。
二、用户分组指令
1.创建用户
useradd lw
passwd 用户名
********
********
2.权限设置
chmod 777 /etc/sudoers
vi /etc/sudoers
root ALL=(ALL) ALL
lw ALL=(ALL) ALL
wang ALL=(ALL) ALL
lw ALL=(ALL) ALL
%lw ALL=(ALL) ALL
lw ALL=(ALL) NOPASSWD:ALL
%lw ALL=(ALL) NOPAAAWD:ALL
第一行:允许用户lw执行sudo命令(需要输入密码)
第二行:允许用户组lw里面的用户执行sudo命令(需要输入密码)
第三行:允许用户lw执行sudo命令,不需要输入密码
第四行:允许用户组lw里面的用户执行sudo命令,不需要输入密码
三、文件权限管理
chmod +x ./wang
chmod -x ./wang
chmod +rwx./wang
- 因为rwx在Linux中用相邻的三个位来表示。如111代表rwx,101代表r-x。rwx总共有三个组,分别是用户权限、组权限和全部用户权限,也就是说111111111 9个1代表的是rwxrwxrwx,因为111的二进制是7,因此当需要一次性执行设置用户权限、组权限和所有用户权限的时候,我们常用数字表示。
chmod 777 ./wang
#设置rw-rw-rw-(110110110)->666
chomod 666 ./wang
chown bar ./foo
chown g.u ./foo
Linux遵循最小权限原则
1.每个用户掌握的权限足够小,每个组掌握的权限也足够小。实际生产过程中,最好管理员的权限可以拆分,互相牵制防止问题。 2.每个应用应当尽可能小的使用权限。最理想的是每个应用单独占一个容器(docker),这样就不存在互相影响的问题。 3.尽可能少的root。如果一个用户需要root能力,那么应当进行权限包围-----马上提升权限(sudo),处理后释放权限。 4.系统层面实现权限分级保护,将系统的权限分为一个个Ring,外层调用内层Ring时需要内存Ring进行权限验证。
|