Linux权限

对于Linux权限的讲解,对于指令的运行原理、Shell命令和运行原理让我们体会到权限的作用,对于用户分类讨论(root/普通用户),通过ll指令展开文件属性,对于文件权限的认识,权限的修改chmod,改变文件所有组chgrp,改变文件所有者chown,最后由初始化文件权限,认识到umask(可以查看/修改文件掩码),原来文件的初始化是要经过文件掩码之后的数值,最后由共享目录引入粘滞位(-t)观念, -t 是特殊的-x可执行权限,有 -t 的目录不能删除非所有者的文件,保护的共享,保护了大家!!!

文章目录

  • Linux权限
    • 指令运行原理
    • Shell命令和运行原理
    • 用户类别
    • Linux权限管理
      • chmod(文件权限更改指令)
      • chown
      • chgrp
    • 起始权限
      • umask
    • file指令
    • 文件和目录权限对比
    • 粘滞位(t)
    • 权限总结

指令运行原理

对于前文基本的常用指令,我们应该熟悉使用,我们下面简单的理解一个概念,指令的运行原理是什么

指令运行原理

1.输入指令的过程,本质上是输入字符串

2.指令的本质,就是编译好的程序和脚本,在一定系统的特定路径下存放,如:/usr/bin

我们可以通过find/which/whereis指令查找到指令所在的文件位置

find不只是查找指令,主要是查找目录下指定的文件,将适合的文件输出

which专门查找指令所在路径位置的(从/usr/bin下查找),如 which ls,会显示出ls指令所在的位置

whereis是介于find和which之间的,可以查找指令加上相关的安装包、man信息等

alias指令(指定指令的别名)

为系统内置指令指定别名,如:alias ac='ls',那么输入ac,就会调用ls指令

所有指令实际上即使脚本或者可执行程序

Shell命令和运行原理

对于Linux来讲,这是一种操作系统,我们称为linux核心,但是对于我们这样的用户,不能直接使用核心,所以我们需要一定的凭借,牵线搭桥,让我们的想法指令来和linux的核心进行交互

为什么我们这些普通用户并不能直接使用核心呢?

这是因为,我们的所有指令最终是要在操作系统内部运行,但是操作系统使用的难度比较高,不适合我们直接和操作系统沟通,所以我们创建了一座桥 “ Shell” 来帮助我们和操作系统进行沟通

Shell定义

Shell是命令行解释器

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

过程如下

存在的意义

  • 对于命令行进行解释,使得操作系统能正确运行,且使得用户更为简便的使用Linux操作系统
  • 保护操作系统,对于用户的非法请求,可以通过Shell(命令行解释器)直接拦截

所以Shell方便了用户,也保护了操作系统(核心)

用户类别

Linux上只要两类用户,root(超级用户)和普通用户

权限区别

  • root用户:无所不能,绝大部分的指令都能运行,权力最大,对于文件的读写访问权限不限制root用户,限制普通用户
  • 普通用户:在使用文件or进入目录的时候,会被限制

创建方式

  • root用户:无需创建,系统自动生成,这是超级用户
  • 普通用户:使用adduser来创建(自己创建)(新建普通用户在/home目录下,会产生与用户名相同的目录)

用户切换方式

  • root→普通用户:su 用户名 (无需输入密码,直接切换到指定的普通用户)
  • 普通用户→root:su root (需要输入root的密码,因为root的权限大)

Linux下的所有用户,都要有密码,无论是root还是其他,即便是多个普通用户,也都要设置密码,但是建议root的密码要和普通用户密码不一样

提权

提权意思是,将普通用户的权限放大,使用类似root用户的权限来实现某些指令,比如安装git的时候

使用指令 yum install -y git 在普通用户下不能安装,我们需要提权,使用关键字sudo

sudo yum install -y git

Linux权限管理

权限:一件事情是否被允许去做

  • 权限认证的是身份
  • 权限也和事物的属性有关(比如文件的属性)

认识文件

Linux下一切皆文件,那么我们通过ll/ls -l指令显示的那些文件第一列的内容到底说明什么意思呢?

首先告诉你的是,这是文件的权限(读取、写入、访问等)

文件类型

  • d:文件夹
  • -:普通文件
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如硬盘、光驱等)
  • p:管道文件
  • c:字符设备文件(例如屏幕等串口设备)
  • s:套接口文件

目前阶段常遇到的是普通文件(-)和目录(d)

基本权限

  • 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  • 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • “ – ”:表示不具有该项权限

r=4,w=2, x=1 这是因为将rwx=111,这是对应的二进制的结果,我们为了更加方便使用这个权限,那么将二进制转换成八进制,使得rwx=7,r--=4诸如此类

chmod(文件权限更改指令)

chmod可以对于文件的权限进行更改,使用方法有两三种,但是都是离不开rwx

语法

chmod [ 选项 ] 权限 文件名

常用选项

R 递归修改目录文件的权限

只有文件的所有者和root用户才能改变文件的权限

1.使用ugoa

上文可知,u表示的是user(所有者),g表示的是group(所有组),o表示的是(其他成员)a表示的是所有成员

chmod u+r,g+w,o-x test.txt

chmod u=rwx test.txt(连续的ugo的使用需要加上逗号)

使得test.txt文件的权限改变,所有者加上了可读,所有组加上了可写,其他用户加上了可执行权限

2.使用八进制

我们知道对应权限的八进制的大小,所以可以通过八进制来表示所有者、所有组、其他用户对于该文件的权限

chmod 777 test.txt

---------- 1 root root 1492 May 15 18:25 test.txt

-rwxrwxrwx 1 root root 1492 May 15 18:25 test.txt

如果本身就有这个权限了,再加上还是那个权限,不会发生变换。如rw- 加上 r 还是rw-

对于目录,我们如果想让里面的文件和该目录都成一样的权限

chmod -R 777 test

chown

功能:更改文件的所有者

语法格式:chwon [ 选项 ] 用户名 文件名

常见选项:

-R 对于目录以及里面的文件进行递归修改所有者

chown -R user1 test 将test目录下的所有文件以及该目录的所有者更改为user1

常见用法:

chown user1 test

chgrp

功能:修改文件或者目录所在的组

**语法格式:chgrp [ 选项 ] 用户组名 文件名 **

常用选项:

-R 递归修改文件或者目录所在的所有组

chgrp group1 test

chgrp -R group1 test

起始权限

我们创建一个文件or目录的时候,有没有注意到,都是一样的初始权限

  • 对于一个普通文件,我们需要的基本权限是可读可写(可执行程序有可执行权限),所以我们创建一个普通文件的时候,一般都是rw- ,这样看来应该是rw-rw-rw-,但是实际上显示的是rw-rw-r—
  • 对于一个目录来讲,可读使得我们可以查看目录里面的内容,可写使得我们可以在目录中创建or删除文件,可执行使得我们能进入文件,所以初始目录权限应该为rwxrwxrwx,但是实际为rwxrwxr-x

假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

umask

umask可以查看或者修改文件掩码

语法:

umask 755 设置权限值

umask 查看掩码值

新建文件默认权限0666

新建目录默认权限0777

& 位运算,有0则为0

超级用户默认掩码值为0022,普通用户默认为0002

计算过程:

//如果是创建文件 且是普通用户0002----000 000 010110 110 110 666 111 111 101 (反码)------------------110 110 100 664//超级用户 0022 换成八进制,也就是 000 010 010去掉第一位0 然后后面三位是分别对应所有者、所有组、其他成员110 110 110 666111 101 101 (反码)------------------110 100 100 644

权限掩码:凡是在umask中出现的权限,不会再最终的文件权限中出现

最终权限=起始权限 &(~umask)

实际上将对应位置的数字进行相减就可以 如普通文件的0666 减去0002 自然就是0664 其中的664就是初始文件权限

file指令

功能: 辨别文件类型

语法:file [ 选项 ] 文件or目录

  • -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
  • -z 尝试去解读压缩文件的内容

文件和目录权限对比

目录中的rwx和文件的rwx在某些方面上是有区别的

文件权限

文件

r就是可以读取文件中的内容,w是可以在文件中写入和删除一些文本,x是可以打开这个文件

目录权限

  • 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
  • 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
  • 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.

我们知道我们的家目录权限为700,也就是说,只允许自己和root用户进入,那么我在自己家目录下创建的文件别人看不到

在工作中,为了多人使用同一个目录,想要多个用户进行文件数据的共享,我们创建的共享文件,不能在任何一个人的家目录下

可能又人说了,我们直接改变家目录的权限不久可以了吗?

实际上,我们是作为普通用户是无法改变家目录的权限的,只有root用户可以

解决共享方法:自行创建一个目录,但是这个目录会将其他用户拉进去这一个组中,因为共享,所以都要有rwx权限

上述方法,有一个缺陷,如果说我自己写了一个文件,别人某一天误触(bushi)删除了这个文件,我很生气,干了一架。为了避免这样的事情发生,我们有一下的解决措施(想法)

想法

  1. 我们将其他用户的w权限关闭 (但是关闭之后,那就不是共享了,失去了共享目录的意义)
  2. 能不能有一种方式既能保护这个文件又可以共享呢?

粘滞位(t)

针对于上述问题,系统推出了粘滞位这一概念,作用为,保护了创建文件,又可以防止别人删除自己创建的文件(但是别人可以进入查看编辑)

功能:给目录设置,一般是共享目录,大家可以通过在目录进行各自文件的增删查改,只允许文件拥有者/root用户能删除这个文件,其他人一概不允许,-t是一种特殊的x权限

加上粘滞位

chmod +t 指定目录(共享目录)

有粘滞位的目录的特点

  • 有粘滞位的目录中文件能被root删除
  • 能被所有者删除

权限总结

  • 目录的可执行权限是表示你可否在目录下执行命令。
  • 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  • 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。