【Linux】权限管理
目录
一. Linux 用户
二. 权限概念
三. 权限修改
1. 权限属性 chmod
用户标识符 +-= 权限字符
3位八进制数字
2. 没有权限的现象
3. 拥有者 chown
4. 所属组 chgrp
四. 起始、最终权限问题
五. 目录权限
六. 粘滞位
一. Linux 用户
root:超级用户。命令行提示符 '#'。基本不受权限约束
普通用户:我们新建的用户 adduser。命令行提示符 '$'。受权限约束
Linux 所有用户,都要有密码
如何登录 root 账号?
1. ssh root@公网IP
2. 普通用户切换 root:
(1) su 指令
只是做了身份变化,身份变成 root;但路径不变,仍处于上一个目录
退回普通用户:输入 exit 或 Ctrl + D
(2) su - 指令(下面也通用)
路径也变了
3. root 切换普通用户
不用输入密码
4. 普通用户切换普通用户
要输入想切换用户的密码
想暂时对一条命令进行提权:sudo 指令
sudo:让后面的指令以 root 的身份执行
要输入当前用户的密码。输入后,一段时间内不用再次输入
想执行高权限的操作的2种方法:1. 切换 root 身份 2. sudo 提权
eg:Linux 安装软件用 yum
安装:把文件拷贝到系统的某些路径下。普通用户不允许
问:切换 root 身份要输入 root 密码;sudo 提权却只输自己的密码,不荒谬吗?
答:目前我们adduser新建的用户,无法执行sudo,系统不信任你。除非将普通用户添加到系统的新人白名单里
你不在 /etc/sudoers
二. 权限概念
一件事情是否允许被你做
1. 权限认证的是身份(权限和“人”有关)
2. 权限也和事物的“属性”有关
文件类型 权限属性 连接数 拥有者 所属组 所占字节大小 最近创建/修改时间 文件名
文件类型
-:普通文件 文本、可执行程序、基本库都属于普通文件
d:目录文件
b:块设备文件 磁盘文件
c:字符设备文件 键盘、显示器文件等
p:管道文件 用来进行通讯的
l:软连接 类似Windows的快捷方式
s:套接口文件
Windows 根据文件名后缀区分类型
Linux 文件名后缀没有直接意义(不代表不用)Linux系统上运行的其他软件要识别后缀
Linux中如何看待后缀?看用户需求
gcc 是一款编译器,软件
权限属性
r:可读
w:可写
x:可执行
-:对应位置没有的权限
除了文件类型,剩下的9个符号,33为一组,分别对应
拥有者权限 所属组权限 other权限
每组的3个位置,什么含义是确定的;每一位置只有是或否,具有指定的权限
所属组:
由于刺激战场和全军出击是竞争关系,所以qtw的代码不能给gyl看,但要给主管看
就把主管、组友放在所属组,只给读的权限;不把gyl放在所属组,gyl就看不了qtw的代码
其他人:
任何用户访问 Linux中 文件要先登录,登录就有用户名。想访问某个文件时,和文件属性中的拥有者和所属组对比:发现既不是拥有者,也不是所属组,就只能是其他人(if else if else的逻辑)
所以不用将其他人写到文件属性中
在进行身份认证时,只能被认定为一种身份
qtw优先被认定为拥有者,没有写权限。即使 qtw 作为所属组有写权限,但系统只认 qtw 为拥有者,不认 qtw 为所属组
三. 权限修改
1. 权限属性 chmod
用户标识符 +-= 权限字符
chmod 选项 权限 文件名
只有文件的 拥有者和root 才能改权限属性
选项:
-R:修改目录的访问权限
用户标识符:
u:拥有者 g:所属组 o:其他人 a:所有人
此时,test.txt 虽然被改成可执行属性,但事实上能不能执行是另外一回事
3位八进制数字
三个位置分别表示 读、写、执行。1表示是;0表示否
二进制111 = 7:rwx
二进制110 = 6:rw-
二进制000 = 0:---
八进制的数字范围是0-7,所以可以用3位八进制数字分别表示拥有者、所属组、其他人的权限
2. 没有权限的现象
Permission denied:权限被拒绝
root 不受权限限制
制定规则的人不受规则限制
3. 拥有者 chown
chown 选项 想改成的用户名 文件
选项:
-R:修改目录的拥有者
把拥有者从 qtw 改成 gyl:
操作不被允许
可以 sudo 提权:sudo chown gyl test.txt(这里就不展示了)
也可以在 root 下
此时 qtw 对这个文件来说,就变成所属组了
qtw 就不能改权限属性了,得在 root 或 gyl 那里改
4. 所属组 chgrp
chgrp 选项 想改成的用户名 文件
选项:
-R:修改目录的拥有者
把所属组从 qtw 改成 gyl:
在 qtw 下同上要 sudo 提权,不展示了。在 root 下进行
此时, qtw 对这个文件来说,就变成 other 了
所属组可以添加用户,addgrp 把某个用户添加到某个组里
所属组用的并不多,就不展示了
一次把 拥有者、所属组 都改成 qtw:
root 账号下:
四. 起始、最终权限问题
创建2个普通文件(- 开头)和2个目录(d 开头)
问: 为什么普通文件默认权限是 rw-rw-r--(664)?
为什么目录文件默认权限是 rwxrwxr-x(775)?
为什么我们创建的文件默认权限是我们看到的样子?
其实:
默认给普通文件的起始权限是666
默认给目录文件的起始权限是777(为什么是777后面说)
这个问题的根本原因是:Linux 中存在权限掩码 umask
权限掩码 umask 概念:凡是在 umask 中出现的权限,不会在最终文件权限中出现
查看文件权限掩码输入 umask
八进制的权限掩码是3位,查出来是4位:第一个0不看
umask 像漏斗,我们把起始权限给 umask 通过某种计算,把 umask 中出现的权限,从起始权限中去掉才是最终权限。
最终权限 = 起始权限 & ( ~ umask )
可以用 umask 限制创建出文件的最终权限
eg:创建的文件、目录:只给拥有者、所属组读权限;给其他人读写权限
只读权限 r--:100;umask 出现的权限最终权限不会出现,所以 umask:011:3
读写权限 rw-:110;所以 umask:001:1
所以要把 umask 改为:0331 修改 umask:umask 想改成的内容
五. 目录权限
目录文件的
r :是否允许我们查看指定目录下的文件内容 ls
w:是否允许我们在当前目录下创建、更改、删除 mkdir、mv、rm
x :是否允许用户进入对应的目录 cd
现在就能解释:
普通文件起始权限666(没有x):普通文件不需要可执行,也不能给系统中植入大量可执行文件。想让他可执行,自己 chmod
目录文件起始权限777(umask 后光其他人没有 w):所有目录基本都要能进入,必须要有 x
六. 粘滞位
普通用户自己的家目录权限是700,别人看不到自己家目录下的文件
但有时多个用户想进行文件数据共享,就要创建共享文件
共享文件显然不能创建在任何一个人的家目录( /home/XXX/ )下
以 root根目录 下创建的共享文件演示:
一些代码没截
创建出来的 shared 共享目录,任何一个普通用户可以以 other 的身份访问
把 shared 对 other 的权限打开
qtw 在共享目录下创建了 test.txt,qtw 可读可写
gyl 作为 other 对这个文件可读不可写
如果有一天,qtw 把 test.txt 的 other 权限全关了
一个文件能否被删除,并不是由这个文件决定,而是由文件所处目录的权限决定
刚才在 root 下把 shared 的 other 所有权限都打开了
gyl 生气了,你 qtw 不让我看?那你也别看了。gyl 就把 qtw创建的test.txt 删了
这显然不合理,怎么规避?
在 root 下把 shared共享目录的 other 的 w 权限关掉。gyl 就无法删除 qtw创建的文件了
但此时,用户也无法在 shared 里创建新文件了!共享目录的意义何在呢?不能这么干
想要的效果:
任意用户在共享目录下能 创建、删除自己的、修改自己,大家都能看所有人写入的文件。受 共享目other权限的约束,也受目录内文件权限的约束
任意用户在共享目录下不能删除别人的文件
粘滞位:给目录设置,一般是共享目录。用户可以在共享目录下进行各自文件的增删查改,只允许文件拥有者、root 能删、改这个文件,其他人一概不允许,t 是一种特殊的 x 权限!
qtw 再在共享目录里创建了 test.txt
root 在此不受任何权限约束!即使 root 把 share 目录自己的权限全关了,仍不受权限约束
根目录是 root 创建的。用户是 other,没有 w 权限,无法在根目录下创建文件
根目录下所有文件都是 root 创建的。尽管根目录权限里 root 没有 w 权限
未来想创建共享文件只能以 root 身份在根目录下创建
Linux 下不用自己创建共享文件,有 tmp:唯一一个带粘滞位的
tmp 是装机时自己创建好的,未来所有用户想通信时可以把文件临时放在 tmp 目录下
本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。
小编会以自己学习过程中遇到的问题为素材,持续为您推送文章