当前位置: 首页 > news >正文

Linux第五节课(权限02)

1、Linux下的用户分类

  • root:超级用户
  • 普通用户:通过root新建的用户,adduser

root不受权限约束;普通用户受权限约束;

Linux系统中,所有用户都需要有密码,无论是root还是其他,即便是多个普通用户,也需要设置密码;(建议root账号的密码与其他账号不一样!)

1.1用户之间的切换:

普通用户切换root账号(两种方法):

su

直接将当前用户切换到root账号,此时依旧处在当前目录;

su - 

相当于重新登陆,此时出于/root目录下;

从root账号转变为普通账号:

su + 用户名

可以不需要密码直接切换到普通账号!

从一个普通用户切换到另一个普通用户需要输入切换到的用户的密码!

如果我们想要暂时的对一条命令进行提权(以root的方式运行)

sudo + command

再输入当前普通用户对应的密码即可以root的身份运行!

但是!目前我们用adduser新建的用户,没有办法执行sudo,系统不信任!除非未来将普通用户,添加到系统的信任白名单里面!(不在/etc/sudoers里面) 

2、Linux文件的类型

文本的类型:Linux系统中文件名后缀没有直接的意义。(当然,不代表不用!)

  •  - :普通文件( 文本文件、源代码、库文件、可执行文件)
  • d : 目录文件
  • b:块设备文件(磁盘文件)
ls /dev/vdal
  • c: 字符设备文件(键盘,显示器文件等)
    ls /dev/vdal -al
  • p:管道文件(用来进行通信的)

Linux(操作系统)不区分文件的后缀,但是不代表在Linux上运行的软件不区分文件的后缀!

(例如gcc可以编译test.c但是不能编译test.txt --- gcc会区分文件的后缀名!)

2.1、对于普通文件

通过ls - l或者ll显示的权限的意义分别为:

  • r :可读
  • w:可写
  • x:可执行
  •  - :表示对应的位置上没有权限

角色、权限身份(拥有者、所属组、其他人)和具体的用户(root / 普通用户)之间的对应关系:

具体的用户相当于张三(李四)、而角色/权限身份相当于校长(主任)等。

为什么需要有所属组?

假如部门需要开发一个软件,a和b是竞争关系,如果a写出来一个非常好的程序,不想让b看到,那么此时权限有两种(拥有者和其他人)a作为程序拥有者可以看到,其他人看不到。但是入错C(领导)想看a写的程序,那么此时需要出现所属组,让一部分人能看到程序!

ll查看的文件信息依次为:

  • (文件的类型)
  • (文件的权限)
  • (数字空)
  • (文件的拥有者)
  • (文件的所属组)
  • (文件的大小 - 单位为字节)
  • (文件的最近修改日期)
  • (文件名)

不属于拥有者和所属组的就是other!

权限三三为一组,九个每分三个分别对应于拥有者所属组和other。

r / -
w / -
x / -
  • 每个位置是什么含义都是确定的!
  • 每个位置只有是或否,具有指定的权限!

如果没有权限但是执行了对应的操作会出现什么错误?

Permisson denied

谁可以修改文件的权限呢?

  • 文件的拥有者
  • root

3、修改权限的指令chmod

示例:

chmod u-rwx,g+rwx,o+rw test.txt

其中:

  • u为拥有者
  • g为所属组
  • o为其他人

对拥有者减去rwx(读写执行)的权限,对所属组加上rwx的权限,对其他用户加上读和写的权限,其中要用逗号分隔开!(多个用户用逗号分隔开!)

权限操作

对所有人进行权限操作!

chomd a-x test.txt

(其中a表示all,代表对所有用户都进行操作)

可以用比特位表示该角色是否有权限!三个比特位表示rwx,那么这个数字表示为8进制!

(例如110表示rw-对应于6,即6表示rw-)

实例:

chmod 000 test.txt

表示所有用户都没有权限!

如果相对所有人加上读权限(100)对应的进制位为4

chmod 444 test.txt

对所有人加上所有权限:

chmod 777 test.txt

3.1、 更改文件的拥有者(chown)

(把文件给别人需要争得别人的允许!)

chown zhangsan test.txt

将test.txt文件传递给张三!(但是需要提前争得张三的允许)

通过sudo/root账号可以强制更改文件的拥有者

3.2、更改文件的所属组(chgrp)

chgrp zhangsan test.txt

可以将所属组转给张三!(但是也需要争得张三的同意)

通过sudo/root账号可以强制更改文件的所属组

3.3、同时更改拥有者和所属组

chown shy:shy test.txt

此时可以一次性修改文件的拥有者和所属组(都改为shy)

  • 对于命令行提示符,普通用户为$;root账号为#

一个小问题:

对于zhangsan来说,如果一个文件(拥有人和所属组都为zhangsan)的权限为:

-r--rw----

那么张三是否能在这个文件中写入东西?

答案是不能!

权限在认证的时候,三三为一组,因为当前张三属于文件的拥有者,那么系统对于张三不在看其是否为所属组(优先查看!)

4、其他问题:

1.问题1:

对于默认创建的文件:

  • 普通文件的权限:664
  • 目录文件的权限:775

但是对于实际上:

  • 系统默认给普通文件的起始权限为666
  • 系统默认给目录文件的起始权限为777

umask   ---- 权限掩码

凡是umask中出现的权限,不会再最终的文件权限中出现!

可以得到系统的权限掩码为002

umask 0001

可以将权限掩码修改为001

对于创建的文件,最终的权限满足下列公式:

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

应用:

如果我们想要创建的文件对于所有用户都没有读和可执行

umask 0555

经运算可检验得创建的所有的文件都没有读和可执行权限!

2、问题2:目录权限

对于目录文件来说,它的读写执行都代表着什么呢?

进入一个目录需要什么权限?

当我们对一个目录对于所有用户去掉一个 -r 可读权限的时候,我们可以发现,我们依然可以进入这个目录,但是我们不能使用ls指令!即不能查看该目录下的文件!可以通过

touch test1.txt

创建新文件(对应于写权限!)

如果去掉 - w权限,我们可以发现此时不能创建新文件(即没有写权限!)

总结:对于目录文件

  • -r : 是否允许我们查看指定目录下的文件内容;
  • -w:是否允许我们在当前目录下进行创建,更改,删除(待定);
  • -x:是否允许用户进入对应的目录;

特别注意:

如果一个文件没有x权限(即不能进入这个文件,但是具有r权限,那么依旧可以查看该目录下的文件!)

为什么默认的普通文件没有可执行权限,而默认的目录文件有可执行权限?

因为大部分的普通文件不需要执行,默认加没有必要,需要执行的时候可以自己添加;

而对于目录文件我们是需要进入其中进行访问的!

3、问题3:粘滞位

通过

ls / home /ls

对应不同的用户账号下所创造的文件,用户目录的拥有者和所属组都是本人!(其他用户无法访问!)

普通用户自己家目录的权限是700,我在自己家里创建的文件,别人都看不到!

如果我们想要共享数据,多人共同实现一个项目,可以创建一个共享文件,(这个共享文件不在任何一个人的家目录下!)

这时候,我们可以在 \ 目录下创建一个共享目录,通过root账号设置权限,使得设指定用户具有操作权限。

但是在一个共享的目录下,一个文件不是a建立的,而且a没有rwx的权限,那么a可以删掉这个文件吗?(能删掉!但是不合理!)

4、结论

一个文件能否被删除,并不由文件本身决定,而是由这个文件所处的目录决定!

(由于共享的目录下,其他用户对于这个目录也具有rwx权限,因此即使目录下的文件不属于他,他还是能删掉!)

如果我们去掉共享目录的w权限,我们也同时无法创建文件!(与最初的共享目录宗旨矛盾)

如果我们想要在一个目录下,不同用户创建的文件不能被其他用户随意删除,而且其他用户也能根据目录的权限进行文件查看,写入等...我们需要加如粘滞位!

chmod o+t shared

修改后可以发现,shared目录下的x位置权限由x变为t

此后,其他用户不能删除共享的没有权限的文件。

5、总结

  • 粘滞位:给目录设置的(一般为共享目录),大家可以在目录进行各自文件的增删改查,只允许文件拥有者或root删除这个文件,其他人一概不允许!t是一种特殊的x权限!
  • 在Linux系统中,要删除一个文件,用户需要具有该文件所在目录的写权限。如果用户对该目录没有写权限,则无法删除文件。
     

根目录 / 的默认权限如下:

ls - ld /

我们可以发现,根目录为root创建的, 对于其他用户来说,没有权限在根目录下创建文件夹。因此建立共享文件只能通过root来创建。

在根目录 / 下默认存在一个tmp目录,这个目录自带粘滞位t,可以用来作为共享目录!

当一个目录被设置为”粘滞位“(用chmod + t),则该目录下的文件

  • 超级管理员进行删除
  • 该目录的所有者删除
  • 该文件的所有者删除

经常下超级管理员和该文件的所有者都是同一个。

相关文章:

  • 嵌入式虚拟仿真教学解决方案
  • 一文搞清楚遗传算法(Genetic Algorithm,GA)详解,附带应用及源码
  • 3.k8s:服务发布:service,ingress;配置管理:configMap,secret,热更新;持久化存储:volumes,nfs,pv,pvc
  • MATLAB基础:函数与函数控制语句
  • 【数据结构初阶】单链表经典算法题十二道——得道飞升(上篇)
  • SQLException:Operation not allowed after ResultSet closed
  • 在MATLAB中使用importrobot导入机械臂刚体树时没有找到模型文件,只显示坐标;改为使用loadrobot
  • 文件共享功能无法使用提示错误代码0x80004005【笔记】
  • iOS中的类型推断(Type Inference)
  • [排序]hoare快速排序
  • 为什么多数大数据治理项目都是失败的?Gartner调查失败率超过90%
  • Vue2父传子
  • JNI回调用中不同线程的env无法找到正确的kotlin的class
  • Vite 常用插件配置:自动导入+自动注册组件+动态创建图标+设置组件名
  • C 语言基础概念总结
  • 11111111
  • CSS相对定位
  • isset在php5.6-和php7.0+的一些差异
  • Java 网络编程(2):UDP 的使用
  • JAVA之继承和多态
  • MySQL用户中的%到底包不包括localhost?
  • uva 10370 Above Average
  • 初探 Vue 生命周期和钩子函数
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 驱动程序原理
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 网页视频流m3u8/ts视频下载
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 线上 python http server profile 实践
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 应用生命周期终极 DevOps 工具包
  • ​Linux·i2c驱动架构​
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # SpringBoot 如何让指定的Bean先加载
  • #FPGA(基础知识)
  • $ git push -u origin master 推送到远程库出错
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二) 初入MySQL 【数据库管理】
  • (六)vue-router+UI组件库
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .gitignore
  • .net 流——流的类型体系简单介绍
  • .NET 通过系统影子账户实现权限维持
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @vue/cli 3.x+引入jQuery
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [ 网络通信基础 ]——网络的传输介质(双绞线,光纤,标准,线序)