前言
Linux系统中往往是多用户进行开发工作如何对多个用户进行管理呢?因此便有了今天的文章,此文章将对文件权限和用户权限进行部分讲解.
下面进入正题:
Linux下用户分为两种—普通用户和超级用户(root)
- 普通用户会受到权限限制.
- 超级用户不会受到任何权限的限制,可以做任何事
- 超级用户的命令提示符时 ‘#’ 普通用户的命令提示符是‘$’
可以使用su
命令来切换用户
如要root切换到user就使用su user.
普通用户切换为root就可以su root(root可省略)但是要输入对应的口令.再输入口令时Linux是不显示的.
Linux权限管理
Linux对文件的使用者进行了分类,共分为了三类
- 文件和文件目录的所有者: u —user
- 文件和文件目录的所有者所在的组的用户: g—group
- 其他用户: o—others(只要不是上面用户的都是其他用户)
文件类型及访问权限介绍
我们来看看上面内容的性质.(我通过画图软件把部分内容放大方便理解)
文件类型
第一个 -
就是我们的文件类型 -
表示普通文件
文件类型共有以下几种
d: 文件夹
-: 普通文件
l: 软连接(类似windows的快捷方式)
b: 快设备文件(如硬盘等)
p: 管道文件
c: 字符设备文件(屏幕等串口设备)
s: 套接口文件
其中文件夹和普通文件是我们所常用的.(注:再Linux下一切皆文件,文件夹也是一种形式的文件.)
权限
我们权限的共有r w x(r w x顺序是不变的)三个如果没有那部分权限就会用-
来代替对应部分.
- r: Read对文件来说就是读取文件内容的权限 ;对目录来说,具有浏览该目录信息的权限.
- w: Write对文件来说就是写入修改文件的权限; 对目录来说就是删除移动目录文件内文件的权限.
- x : execute对文件而言,具有执行文件的权限; 对目录而说,具有进入目录的权限.
- -: 表示不具有特定位置的权限
注意上面的文件和目录是我们理解的文件和目录,对于Linux来说都是文件.毕竟在Linux上是一切皆文件
当然有些文件虽然有着执行的权限但是没有执行功能也是正常的.
文件访问权限的设置
chmod
功能: 设置文件(包括目录)的访问权限
格式: chmod [参数] 权限 文件名
常用选择:
- R 递归修改目录的文件权限
注: 只有文件的拥有者和root才可以改变文件的权限.
我们对使用格式在细致一些讨论一下
首先: 参数是可以省略的.
而权限的格式是——用户标识符 +/-/= 权限字符
有点难理解哈,看一下实例应该就可以理解一些了.
上面的是省略了参数然后权限部分中: u
是用户表示符-
是减号x
是权限字符,这个例子就是表示u这个用户对test.cpp文件的x权限被删去了(u-x都会在下面进行讲解)
用户符号
u: 拥有者
g: 拥有者同组
o: 其他用户
+: 对权限范围增加权限代号所表示的权限
-
: 对权限范围减去权限代号所表示的权限=: 对权限范围赋予权限代号所表示的权限
r w x都是权限字符在[权限](# 权限)进行了讲解这里就不赘述了.
更多的实例演示
通过:
变成:
同理:
chmod的八进制方式修改
用于一下子修改三个用户的权限.
因为我们在修改的时候rwx的位置是不变的所以我们也可以用二进制的方式表示rwx的位置是否存在.
比如: r - x 就可以表示成 1 0 1
及存在的部分可以使用1表示其位置存在不存在的权限部分可以使用0表示其不存在.
所以我们把二进制用8进制来表示这些二进制.
如八进制的7二进制就是111也就是rwx都有了的情况.
同理八进制0123456也是会被转换成二进制然后使用.
实例:
权限掩码
通过命令umask
调用出来
这个权限掩码是啥东西有啥用呢?
上面我们用八进制方式修改用八进制表示权限的还记的吧,这个权限掩码也是用八进制来进行权限的掩盖的.
我们只关注后三位的权限掩码第一位不关注
及0022.
所以他到底有啥用呢?
我们来创建几个新文件让大家看看就知道了.
可以看见我创建了4个文件他们的权限都是一样的.
转换成八进制就是: 644
而目录呢?
我们同样创建4个目录看看
ok(从创建时间可以看出我写文章写着写着跑去摸了一段时间的鱼🤣🤣)
我们可以看出他们的权限也是相同,转换成8进制就是755
其实这里我们的权限掩码就发挥了作用了.
正常我们生成的文件和目录的权限都不是644 或者755 的.
而是普通文件是 666 而目录的权限是777
我们来改变一下权限的掩码就可以看到了.
通过 umask 000 来将umask的值变成000
这时我们再创建文件或目录时就可以看到他们本来的权限默认值了.
其实权限掩码的作用就是: 凡是在权限掩码中出现的权限都不应该在最终权限中出现
当然这个可不是减.
而是掩盖.
比如我们设置umask的值为111时.
普通文件还是666 而目录文件也将是666
如下图
这样就证明了他不是通过减法来进行除去的.
而是通过掩盖,及在umask位置上有1时如果默认权限对应位置有1则去掉如果没有就无视.
这也就是权限掩码的作用了.
目录权限的介绍
- 可执行权限: 如果目录没有可执行权限,则无法cd到目录中
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
- 可写权限: 如果目录没有可写权限,则无法在目录中创建文件, 也无法在目录中删除文件.
chgrp/chown
chown
功能: 修改文件的拥有者
格式: chown [参数] 用户名 文件名
实例: chown (参数被省略了) user1(用户名) f1(文件名)
chgrp
功能: 修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选择: -R 递归修改文件或目录的所在属组
粘滞位
我们Linux系统在root部分里开辟的有一个可以让公共共同使用的一个空间tmp
我们系统中的所有用户都可以,通过other的身份访问这个文件夹.
因为我们在这个公共文件夹的身份相同,所以我们可以任意的删除对方文件.
如下是案例
我们ssw用户在看到test用户创建的文件时一生气想把test1给删除了.
于是
就出现了权限不够的情况,为什么呢?
因为我们/tmp文件夹是有着粘滞位的
可以看到原本是x的位置变成了t,这个就是粘滞位.
有了粘滞位的文件夹就可以做到只有拥有者本人和root用户可以删除文件夹里的内容.其他人都不可以.
如何给文件夹加上粘滞位呢?
如下: