【Linux学习】(4)Linux权限
前言
- 了解shell命令及运行原理
- 理解Linux权限管理
一、shell命令及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
问题1:如何理解?为什么不能直接使用kernel?
我们所有的指令,最终都要在OS内部运行,但是OS使用难度比较高。所以我们用户不能直接和OS打交道,而是直接与图形化界面或命令行解释器(Linux的bash命令行)打交道。
tip:
- 帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。
问题2:命令行解释器存在的意义?
- 进行命令行解释(将使用者的命令翻译给核心(kernel)处理,同时,将核心的处理结果翻译给使用者。)
- 保护OS,对于用户的非法请求,直接拦截!
问题3:命令行解释器,bash/sh,shell?
- 命令行解释器是一个统称,在Linux下可以叫做命令行、bash、sh、shell;在Windows下叫做图形化界面。
- Linux下有各种命令行解释器,shell是所有符合命令行解释器性质的统称,bash/sh是具体的命令行解释器
- bash命令行:
二、Linux权限管理
1、认识Linux下用户的分类
Linux下的用户分为两类:
- root:超级用户,在Linux系统下可以做任何事情,不受权限的限制
- 普通用户:在Linux下做有限的事情,受权限的限制
tip:
- 普通用户是由我们root用户自己新建的
- 创建新的普通用户:adduser 用户名
- 设置用户密码:passwd 用户名(注:Linux下输入密码是不回显的)
- root的家目录:/root
- xxx普通用户的家目录:/home/xxx
- Centos系统中,所有的普通用户,用户账号都会统一放在/home
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
问题1:超级用户与普通用户两者之间差别是什么?
root基本不受权限的约束,普通用户是受权限约束的。
问题2:用户之间是如何切换的?
命令:su [用户名]
功能:切换用户
使用示例:
-
从普通用户user切换到root用户,则使用su root(root可以省略)或者使用su -
-
从root用户切换到普通用户user,则使用su user
-
exit/Ctrl+d退出用户的切换
-
从身份的切换我们也可以看出root不受权限的限制,普通用户受权限的限制的特点——root切换普通用户,不需要输入密码,普通用户切换其他用户,需要输入切换用户的正确密码
-
Linux中所有的用户,都要有密码,无论是root还是其他,即便是多个普通用户,也都要设置密码。(注:root账号的密码和普通账号的密码不要一样)
问题3:如何对一条命令暂时进行提权?
- 如果我们想暂时的对一条命令进行提权,则使用sudo command
- 注意:目前我们用adduser新建的普通用户,没有办法执行sudo,系统不信任你。除非将普通用户,添加到系统的信任白名单里面(/etc/sudoers)
2、什么叫做权限
权限:通俗的说,就是一件事情是否允许你去做!
- 权限认证的是身份(权限和“人”有关),例如腾讯视频有一些就需要你是会员的身份才能看。
- 权限也和事物的“属性”有关,例如书本的属性有可写,但是没有可吃的属性。
3、文件访问者的分类(人的身份)
- 拥有者:文件的所有者:u——User
- 所属组:文件的所有者所在的组的用户:g——Group
- 其他人:其它用户:o——Other
问题1:我们这里文件访问者与前面的用户是什么关系?
它们两者并没有冲突,是互补的。
理解:例如,我们一个人在不同的场景有不同的权限身份,在学校是学生等。
问题2:为什么还要有所属组?
理解:在同一台Linux机器中,有三个人,王五是组长,张三是A组打工人,李四是B组打工人。现在组长叫张三和李四做同一个任务,谁做得好用谁的。如果只有两个角色拥有者和其他人,张三写的代码好,不想让李四看到,就不让身份是其他人的用户有任何权限,但是这时组长王五想看张三的进度了,身份也是属于其他人看不到,所以Linux添加了一个所属组的身份,这时王五是所属组的身份就可以看了。
4、文件类型和访问权限(事物属性)
我们可以通过指令ll查看文件的详细属性:
问题1:前十个字符的含义?
第一个字符代表文件类型,剩下的代表文件的权限属性。
这十个字符,去掉第一个字符,剩下9个字符从左到右三三为一组,依次对应拥有者权限、所属组权限、other权限。
问题2:每一组权限位置含义?
- 位置是什么含义是确定的!
- 每一个位置具有指定的权限,只有有或者否两种选择(即对应权限位置,要么具有该指定权限,要么没有权限)
问题3:我们在文件属性看到了拥有者、所属组,那other呢?
任何一个人想要访问Linux中的文件,一定是需要先登陆的,只要登陆上了他就有自己的用户名。所以当他这个用户想去访问这个文件时,他只需要去和这个文件属性当中的拥有者和所属组对比,发现既不是拥有者又不是所属组,这个时候就为other了。
它是一套if……else的逻辑,对比你的身份是不是为拥有者、所属组,都不是就为other了。
问题4:当一个用户既为拥有者又为所属组时,它的身份是什么?
用户在进行认证的时候,只能选择一个角色进行认证!
在进行认证时先对比是不是为拥有者,不是再对比是不是所属组,既不是拥有者也不是所属组时就为other了。
问题5:在谈文件权限时需要注意什么?
需要注意以下三点:
- 你是谁
- 文件的拥有者、所属组是谁
- 拥有者、所属组、other分别对应的权限是什么
(1)文件类型
- d:目录文件
- -:普通文件(文本,可执行程序,库基本都属于普通文件)
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件(用来进行通信的)
- c:字符设备文件(键盘,显示器文件等)
- s:套接口文件
文件类型:Linux系统中文件名后缀没有直接的意义。例如可执行程序。
Linux的文件后缀名没有意义,不代表Linux系统上运行的其他软件不需要后缀。例如gcc编译器软件。
Linux中如何看待后缀,取决于用户的需求。(建议我们一般带后缀)
(2)基本权限
- 读(r):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- 写(w):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- 执行(x):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- “-”表示不具有该项权限
5、文件权限值的表示方法
- 字符表示方法
Linux表示 | 说明 | Linux表示 | 说明 |
---|---|---|---|
r - - | 只读 | - w - | 仅可写 |
- - x | 仅可执行 | rw - | 可读可写 |
- wx | 可写和可执行 | r - x | 可读和可执行 |
rwx | 可读可写可执行 | - - - | 无权限 |
- 8进制数值表示方法
权限符号(读写执行) | 八进制 | 二进制 |
---|---|---|
r | 4 | 100 |
w | 2 | 010 |
x | 1 | 001 |
rw | 6 | 110 |
rx | 5 | 101 |
wx | 3 | 011 |
rwx | 7 | 111 |
- - - | 0 | 000 |
因为每一组权限的每一个位置具有指定的权限,只有有或者否两种选择,所以可以用二进制来表示有或者否两种选择,1表示具有该指定权限,0表示没有权限。
八进制——000~111
6、权限的修改问题
(1)chmod
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
- R:递归修改目录文件的权限
- 说明:只有文件的拥有者和root(root不受权限的约束)才可以改变文件的权限
chmod命令权限值的格式有两种:
①用户表示符+/-/=权限字符
- 用户符号:
- u:拥有者
- g:所属组
- o:其它用户(other)
- a:所有用户
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
示例:
②三位8进制数字
示例:
(2)chown
功能: 修改文件的拥有者
格式: chown [参数] 用户名 文件名
说明: 把文件给别人,需要别人的同意才能完成,但是我们可以sudo提权或者root登录了chown修改文件的拥有者,这样就可以直接修改了,不需要别人的同意。
示例:
补充:同时修改文件的拥有者与所属组。
(3)chgrp
功能: 修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录的所属组
说明: 文件的拥有者可以修改文件的所属组,root不受权限约束也可以
示例:
(4)umask
预备:
- 新建文件夹默认权限=0666
- 新建目录默认权限=0777
问题:为什么我们创建的普通文件的默认权限为664,创建的目录文件的默认权限为775?
答:原因权限掩码——凡是在umask中出现的权限,不会在最终的文件权限中出现!
功能: 查看或修改文件掩码
格式: umask 权限值
说明:
- 创建文件或目录的时候要受到umask的影响。假设默认权限是mask,则实际创建出来的文件权限是:mask &(~umask)
- 超级用户默认掩码值为0022,普通用户默认为0002
实例:
7. 目录的权限
(1)目录权限
- 可执行权限:如果目录没有可执行权限,则无法cd到目录中
- 可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容
- 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件
(2)共享文件&粘滞位
问题1:需要共享的文件,建立在哪里?
普通用户自己的家目录权限是700,即我在我的家目录创建的文件,别人都看不到!
所以我们所建立的共享文件,不能在任何一个人的家目录下,而是将共享文件创建在根目录下的!
问题2:文件的删除由谁决定?
一个文件能否被删除,并不由文件本身决定,由这个文件所处的目录决定!
问题3:只要用户具有目录的写权限, 用户就可以删除目录中的文件,即使该文件不是我创建的,我们如何解决该问题?
如果我们去掉了共享目录的w权限可以吗——不可以,没有w权限,我们也同时无法创建文件了!共享目录的共享就不能体现了!
所以Linux引入了粘滞位。
粘滞位:给目录设置,一般是共享目录,大家可以在目录进行各自文件的增删改查,只允许文件拥有者或者root才能删除这个文件,其他人一概不允许,t是一种特殊的x权限!
小结:
- 家目录权限700,只有自己可以访问,所以共享文件创建在根目录下
- 因为/是root创建的,所以共享文件由root创建
- 设置粘滞位,保证文件只能被文件拥有者和root删除,不能被别人删
- 粘滞位格式:chmod o+t 目录
- Linux有一个自带的共享文件tmp