文章目录

  • shell命令以及运行原理
  • 如何开启当前用户的sudo命令
  • Linux权限管理
    • 1 Linux用户类别
    • 2 Linux的文件权限的理解
    • 3 Linux文件权限的修改
      • I chmod—修改拥有者、所属组、其他的rwx权限
      • II chown—更改文件的拥有者和所属组
      • III 权限rwx表示的八进制方案
      • IV 目录文件的rwx权限含义
    • 4 粘滞位
    • 5 默认权限与权限掩码

shell命令以及运行原理

  打开Xshell出现的字符交互界面:

  称为命令行。

  我们后面输入的字符代表的是命令+选项。

  我们的命令就是一些可执行程序,验证如下:

  广义上,Linux发行版 = Linux内核 + 外壳程序,如下图:

  通常我们是不能直接与操作系统内核进行沟通的,内核的使用成本很高,需要了解操作系统内核的知识,还有权限约束的问题,还有可能这件操作不允许用户进行或者存在错误,直接与操作系统内核沟通就很危险。

  所以我们要和外壳沟通,Linux下就是shell(命令行解释器),把用户的命令翻译给操作系统内核执行,操作系统内核执行后把结果翻译一下给用户看。另外,shell本身有一些缓存功能,可以对操作系统内核拒绝过的命令做出反应,降低操作系统内核的工作量。

  对有风险可能会终止shell进程的命令,shell程序会创建子进程为我们执行命令

  可以看出shell外壳的作用:

  • 传递请求指令,让OS执行命令
  • 保护内核

  那bash是什么呢?bash是一个具体的shell程序,shell是一类称为命令行解释器的程序,bash是一个具体的shell程序,Centos 7.6使用的shell就是bash。

  如何验证bash是一个进程呢?用指令ps axj | grep bash;(ps是一种查看当前进程信息的命令)

  我们再登陆一个用户,发现又创建了一个bash

  使用杀死进程指令kill -9 PID就把另一个bash进程干掉了:

如何开启当前用户的sudo命令

  有时候部分命令需要root权限,这时我们频繁切root是非常麻烦的,我们可以做如下配置,使得当前用户可以使用sudo 命令使后面的命令在root权限下运行,具体操作如下:

  首先su -切换为root用户,然后nano /etc/sudoers,就会打开一个文本文件:

  按下往下翻,就可以找到这样一行:

  然后把root开头那一行复制一下,粘到空的那一行,然后把root修改为对应的用户名,然后把缩进和第一行调成一行的就好了。

  然后ctrl x退出并保存就ok了。

Linux权限管理

1 Linux用户类别

  Linux把用户分为两类,Linux中,默认有两类用户:

  root:超级用户,具有非常高的权限,基本不受权限约束。

  普通用户:具有一般权限,需要受权限约束 (只能由超级用户创建用户)。

  root密码和普通用户的密码绝对不能相同,普通用户的密码可能经常使用,有暴露风险。

  普通用户切换为root用户,使用su -

exitctrl d可以回到原本的用户,不建议使用su -用户名,因为系统这样又要重新创建bash进程,验证如下:

  这里写错了,应该是下面的kill -9杀死的su Router创建的bash;

  kill -9 (su Router)创建的bash后,直接回到了root,然后使用回退,发现su -创建的-bash也回收了。

  root用户可以随意切换其他用户,执行su -用户名,那如果我需要root权限但是不想频繁切换用户怎么办呢?

  sudo可以临时权限提升,对后面的命令以root的身份运行。

  但是不配置是用不了sudo的,因为我们没有添加信任关系:

  具体配置方法我们在前面已经讲述。

2 Linux的文件权限的理解

  什么是权限:一件事情是否允许被特定的人做。

  首先,权限约束的是人,文件本身具有天然的权限属性:r(读)+w(写)+x(执行),所以对具体的用户,文件的这三个属性是否允许具体的用户执行,使得文件天然存在权限约束。

  所以权限信息主要有文件属性(不同的人是否可读等)以及修改人和这个文件的关系。

  先认识一下“人”的信息,看一下ll的具体信息:

  拥有者和其他都好理解,所属组是什么意思呢?

  假如有这样一个需求:我写了一份代码,想让自己能看到,同工作小组的人也可以看,不想给其他人看到,但是公司的同一个部门又是都在同一台Linux服务器上做开发的。

  这一份需求就引出了所属组,所属组存在的目的是为了组内协同。

  other并不会展示给我们,因为你不是拥有者也不是所属组,那么全集减去拥有者和所属组剩下的就是other咯。

  补充一下前面的问题,前面不是说Linux下用户类别只有root用户和其他用户吗?拥有者,所属组,other是什么?

  root 和普通用户指的是每一个具体的用户;拥有者,所属组,other指的是一种用户的角色身份;

  第一列的含义:

  第一个字符:Linux系统不以后缀区分文件,以属性的第一列的第一个字符作为标识符区分文件类型。

  • -:普通文件[文本,各种动静态库,可执行程序,源程序

  • d:目录文件

  • c:字符设备文件,最典型的如键盘和显示器驱动程序。

  • b:块设备文件,磁盘驱动。

    补充:v的意思是虚拟出来的,查看磁盘容量:df -h

  • s:套接字,网络中的socket

  • p:管道文件,通信时经常出现

  • l:链接文件,软链接。

  怎么键盘显示器、磁盘这些都是文件啊,因为Linux的设计哲学就是Linux下一切皆文件。

  不过gcc仍然以后缀识别文件,因为它不是系统文件,是应用程序。

  了解一下第一列的后9个字符:

  根据文件对每个用户的权限,9个字符中的每一组(以3个为1组)这三个字符分别代表r(是否具有读)w(是否具有写)x(是否具有写)

  r 具有读权限 ;- 无读权限

  w 具有写权限 ;-没有写权限

  x具有可执行权限 ;-没有执行权限

  这里的属性 3个为一组,对应拥有者权限、所属组权限、其他人权限,每个字符对应这个人是否拥有这项权限,就完成了文件的权限管理。

  使用chmod u-r test.c更改拥有者的读权限:

  更改权限后就如果没有对应权限就会发生权限拒绝。

3 Linux文件权限的修改

  如何对应权限的修改?——chmod chown/chgrp

I chmod—修改拥有者、所属组、其他的rwx权限

  拥有者chmod u+(-)x file.txt.

  是永久修改。

  所属组:chmod g+(-)x file.txt

  其他人(o):chmod o+(-) rwx

  一起改:chmod u+rwx,g+rwx,o+rwxchmod a+(-rwx),a是all的意思。

  普通文件普通用户限制情况:

  测试一下root会受限制吗?

  我们把所有的rwx权限全部删掉,root仍可以读写文件:

  验证得root基本上不受权限限制。

  文件没有实际的可执行权限时,root也无法执行文件,就算加上了x权限,但是一般还是不能执行,因为可能里头的命令找不到,而且可能有一些风险,一般是否为可执行是系统给的,你硬加可能也无法执行。

II chown—更改文件的拥有者和所属组

  更改文件的拥有者:

  直接把文件给root,发现被拒绝。

  

  现实中给别人东西都要别人同意,你把文件给root当然也要root同意.

  一般解决方案是sudo提升权限后给或者切root账号给,更改拥有者:chown 用户名 文件名

  更改文件的所属组:chgrp 组名 文件名,同样的,直接给的话需要root权限

  如果此时这个文件属于你,但是这个文件所属组不是你,你可以直接chgrp直接改回来

  susu -,su切超级用户当前路径不变,su -会回到root的工作路径.

  一次性改拥有者和所属组chown 拥有者名:所属组名 文件名

III 权限rwx表示的八进制方案

  前9列的权限符号表明权限位置是明确的且是两态的,可以用1表示有权限,0表示无无权限,如file.txt的权限rw- --- --x可以改为110 000 001,再转化为八进制数据:6 0 1.,这就是权限表述的八进制方案,修改权限也可以这样改。

  语法:chmod 八进制方案 文件名

  文件的创建者最终不一定是文件的拥有者,可以用chown修改拥有者。

IV 目录文件的rwx权限含义

  对目录文件来说,rwx权限是什么意思呢?

  r权限:查看目录中内容的权限:

  同样的root不受权限约束。

  w权限:考虑目录是一个多叉树结构,在目录中添加文件,作为父节点的目录,需要添加子节点的地址,这就是写权限。

  进入目录需要什么权限呢?进入目录其实就相当于更改用户当前路径,是一种执行操作,需要的就是x权限,目录文件的可执行权限就是进入目录的权限。

  按常理来说,要查看一个目录中的文件,你要进入这个目录才能查看。

  但是下面的实验表明:我们去掉目录的x权限仍然可以看目录中的文件名,只是不能看详细信息了.

  这可能说明目录中的文件名是记录在目录中的(就像孩子指针),但是详细信息还是记录在每个文件中的,如果你进入不了这个目录那肯定也看不到文件的详细信息。

4 粘滞位

  下面的测试会表明,在一个文件夹test中,我和其他用户一起使用这个文件夹,我能看到别人的文件存在,但是看不到别人的文件内容(被其他的r权限限制),但是我居然可以删掉别人的文件:

  本质原因是因为我们对test目录有写权限,改掉就不行了。

  如果目录对other有w权限,则other可以删掉任何目录中的文件;如果目录对other没有w权限,那么other不可以删掉目录中任何文件,但是同时other没有了w权限,它也不能在目录中增加自己的文件了:

  需求:other可以在特定的目录下创建文件并对文件(目录具有w)有写入权限(文件有w),但是不想让other有权利删掉这个目录中的其他文件(这就要求other不能拥有目录的写权限)。

  Linux下能否做到这种限定性的约束呢?这就引出了粘滞位。

  语法chmod o+t test,这个加的t权限会加在w位置上。

  粘滞位只能对目录设置,一般都是给other设置的。同组一般不用设置,要么你别给同组的人放开w权限,要么直接组内就那么几个人能查到,但是对于一个工作集群来说,other身份人很多,一般给other设置一个粘滞位。

  对文件设置了粘滞位后,该目录下,只能文件的拥有者和root才能删除文件,其他人无法删除文件。

在操作系统临时数据中的应用:

  有时候,存在多个用户,或者系统中存在临时数据,系统会将所有的临时文件放在/tmp目录下,这个目录的拥有者和所属组毫无以为是root,又因为所有用户的临时数据都要放在这里,所以要把这里tmp目录对o的读、写、执行权限放开,才能让别人把自己的临时文件写到tmp目录下,并且可以删除。

  但是这样全放开每个用户却不仅可以删除自己的文件,还可以删除别人的文件。

  我们想收回一部分权限,让每个用户在tmp目录下只能删除自己拥有的文件,不可以删除别人拥有的文件,这就需要给tmp目录权限设置粘滞位。

  当一个目录设置粘滞位时,只有以下三个用户可以删除里面的文件:

  • 文件的所有者(只能删除所拥有的文件)
  • 目录的所有者(能删除所有的文件)
  • 超级用户root(能删除所有的文件)

  一般我们把需要粘滞位的目录都是用root创建的,这样也符合root超级用户的权限性质。

5 默认权限与权限掩码

  为什么系统中的文件,创建出来的默认权限是下面我们看到的样子呢?

  起始权限:

  • 普通文件:起始权限 666
  • 目录文件:起始权限 777

  那为什么我们看到的创建目录和文件的权限不是起始权限呢?因为系统中有umask,权限掩码。

  后三位,凡是在掩码中出现过的权限,默认创建出来的文件都不准有这个权限。(这个最前面的0也是有用的,以后再议)

  002 = 000 000 010

  掩码的目的就是过滤掉掩码中的某些内容。

  然后我们看普通文件的起始权限:110 110 110,干掉掩码中是1的位后,变为110 110 100,即664

  这个干掉掩码中是1的位的操作是:default = default & (~umask).

  某一个比特位&上1,可以保持原来的模样,某一个比特位&上0,,这一位必然变成0。

  111 111 111 & ~(000 000 010) = 111 111 101 = 7 7 5.

  怎么修改umask呢?umask 权限掩码

  权限掩码的修改只在这次会话有效,所以不用担心忘了改回去,如果要修改全局的默认权限掩码,可以去修改权限文件。

Linux学习笔记3—Linux权限的初步认识(rwx、sudo、粘滞位、umask)相关推荐

  1. Linux中常用的文件目录,Linux学习笔记2——Linux中常用文件目录操作命令

    ls 显示文件和目录列表 -l 列出文件的详细信息 -a 列出当前目录所有文件,包含隐藏文件 mkdir 创建目录 -p 父目录不存在情况下先生成父目录 cd 切换目录 touch 生成一个空文件 e ...

  2. 【Linux学习笔记】Linux服务器:配置与管理samba服务器

    Linux系列文章目录 一.[linux学习笔记]红帽Linux 7.8系统在虚拟机上的安装 二.[Linux学习笔记]Linux系统的基本操作 三.[Linux学习笔记]管理Linux操作系统:用户 ...

  3. 【黑马程序员新版Linux学习笔记】Linux系统实用操作命令——操作演示

    [黑马程序员新版Linux学习笔记]Linux 零基础快速入门: (一)Linux基本命令--操作演示 (二)Linux用户和权限 -- 操作演示 (三)Linux 小技巧快捷键 (四)Linux系统 ...

  4. Linux学习笔记:Linux常用命令总结

    文章目录 前言 Linux学习笔记:Linux常用命令总结 1. 目录命令 1.1 Linux目录结构 1.2 cd命令 切换工作目录 1.3 ls命令 显示目录下文件 1.4 mkdir命令 创建目 ...

  5. Linux学习笔记之——Linux系统内部相关介绍

    Linux学习笔记之--Linux系统内部相关介绍 摘要:主要记录一些比较有用的能够帮助理解和使用Linux的知识.比如一些相关概念.没兴趣的看看就好.知道有这么个东西.注意事项.和一些常用目录的作用 ...

  6. 【linux】三种权限的使用和更改、粘滞位和yum的使用

    目录 1.权限问题 ①什么是权限? ②小问题 ③默认权限 ④如何更改"人"的权限呢? ⑤更改权限的八进制方案 ⑥强制改权限里的"人"(权限=人+文件属性) 2. ...

  7. Linux权限:权限的概念及管理、粘滞位

    目录 Linux权限的概念 Linux权限管理 文件权限值的表示方法 文件访问权限的相关设置方法 目录的权限 粘滞位 Linux权限的概念 Linux下有两种用户:超级用户(root).普通用户 超级 ...

  8. 【Linux学习笔记】Linux获取CPU使用率,内存使用率和磁盘使用率

    实现目标: 在Linux上使用shell脚本回显系统当前的CPU使用率.内存使用率和磁盘空间使用率 1.CPU使用率: 使用top命令能够实时显示系统中各个进程的资源占用状况,所以这边可以使用top命 ...

  9. 【嵌入式Linux学习笔记】Linux驱动开发

    Linux系统构建完成后,就可以基于该环境方便地进行开发了,相关的开发流程与MCU类似,但是引入了设备树的概念,编写应用代码要相对复杂一点.但是省去了很多配置工作. 学习视频地址:[正点原子]STM3 ...

最新文章

  1. 寿光农商行计算机机房,寿光农商银行 举办2021年新员工入职仪式
  2. MATLAB可视化实战系列(二十四)-三维可视化如何利用圆锥图显示向量场?
  3. Appium Desktop介绍-xcodebuild failed with code 65 问题解决
  4. ejb 2.1 jboss_JBoss AS 8中的Java EE 7和EJB 3.2支持
  5. web前端开发之div+css教程精华收集二
  6. 直接写和放在函数中不同的R语言用法
  7. cas-client 使用(6)
  8. .net Core 2.*使用autofac注入
  9. docker学习笔记一:基本安装和设置容器静态ip
  10. linux c如何判断字符串是否为空
  11. 幻灯片母板_如何在Microsoft PowerPoint中创建幻灯片母版
  12. 推荐3个干净、资源多的看剧网站给大家
  13. FFmpeg命令(七)、 音频与视频合并成视频
  14. 首次登陆系统强制修改密码
  15. 深入浅出再谈Unity内存泄漏
  16. PHP文案馆头像壁纸小程序源码独立后台
  17. SAP MIGO生产订单入库校验BADI增强MB_MIGO_BADI
  18. 原来PWM这么简单!通过锯齿波作为载波和调制波经过比较,产生相应的PWM输出波形
  19. 交通灯控制系统设计左转倒计时protues仿真的c语言程序,交通灯控制系统设计
  20. 七巧板复原之匹配算法之代码实现

热门文章

  1. Maven发布自己项目到maven中央仓库
  2. 高性能动画组件VAP开源啦!
  3. 程序员看什么?阿里、百度大牛强推书籍
  4. 服务器安装虚拟交换机,为 Hyper-V 虚拟机创建虚拟交换机
  5. 深度学习公式推导(1):神经元的数学公式
  6. unity3d循环滑动_Unity3D中如何用代码实现物体的左右循环移动?
  7. JQuery Mobile优秀网站及资源
  8. Linux 搭建 MariaDB Galera Cluster 高可用集群
  9. CSS HACK收集:在IE6下hack的方法详解
  10. 视频【解码】原理(播放器原理),音视频同步等