Linux:权限

Linux权限

Linux权限概念

Linux下有两种用户:超级用户(root)普通用户

超级用户:命令提示符是"#",可以再linux系统下做任何事情,不受限制 。普通用户:命令提示符是"$",在linux下做有限的事情。

在Linux基础指令中提到如何创建用户,创建一个用户user,用 ls /home 可以看到一台Linux机器有哪些用户。

touch myprogram.c 创建文件,在文件中写入如下代码。

gcc myprogram.c -o myprogram 生成可执行程序,最后输入指令./myprogram (表示当前目录下的myprogram,直接输入myprogram是不行的)即可运行程序,由于是死循环,可以用Ctrl + C 终止。

输入命令时,系统会去/usr/bin目录下搜索命令,我们可以把文件myprogram拷贝到该目录,root用户有这个的权限,但普通用户没有这个权限。从root用户到普通用户,可以用 exitCtrl + D 退出,再登录普通用户,从普通用户到root用户亦然。

su 用户名 切换用户。例如,要从root用户切换到普通用户user,则使用 su user。要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码。

切换到user,尝试把myprogram拷贝到/usr/bin,会报错。因为/usr/bin 属于系统目录,不允许普通用户修改。

切换到root,就可以把myprogram拷贝到/usr/bin,此时myprogram就能像命令一样被使用。

此时输入exit 又可以退回到user,命令su - 也可以切换到root,区别su - 让我们以超级用户的身份重新登录,所以当前所处的目录会改变,而su 切换用户不会改变当前所处目录。

sudo 能暂时提高普通用户的权限,例如安装软件需要管理员root权限,在安装软件的指令前加上sudo即可让普通用户在系统上安装软件。普通用户直接使用sudo会报错。

这里有类似白名单的东西,需要把普通用户user添加到 /etc/sudoersvim /etc/sudoers 打开此配置文件,参照下图红框的内容添加user,保存退出后就能正常使用sudo了。

权限首先限制的是角色(人),比如校长才能进校长办公室,张三是校长,张三能进校长办公室;权限要求目标必须具备对应的属性,如即使你是LeetCode的顶级会员,你也不能在LeetCode看电影,因为LeetCode不具有看电影的属性。所以,权限 = 角色 + 目标权限属性

Linux下一切皆文件,面对文件,无外乎是读、写、执行。

角色:拥有者所属组other。root、user是具体的人,如前文提到的张三,拥有者、所属组、other是角色,对应前文的校长。

不是拥有者、所属组就是other;所属组让身份角色更精细化,如user1属于A组,user2属于B组,使权限管理更精细化。

Linux文件有三种属性:读r、写w、可执行x。

第一列是文件类型,每一行剩下9个字符每3个 一组表示不同信息,分别是拥有者权限位、所属组权限位、other权限位。文件允许读/不允许读为 r/- ,允许写/不允许写为 w/- ,允许执行/不允许执行为 x/-

描述a.txt文件的权限信息:a.txt的拥有者是root,拥有者root能读文件、写文件,不能执行文件;所属组是root,能读文件,不能写文件和执行文件;other对该文件只能读。

Linux权限管理

chmod

chmod u-r my.txt 去掉拥有者对文件my.txt的读权限,拥有者、所属组、other分别对应 ugo ;去掉权限为 - ,增加权限为 +;对拥有者、所属组、other同时操作时,用逗号隔开;chmod a-/+权限 my.txt 可对三者同时去掉或增加权限。

  1. 用户只能更改自己的文件权限。
  2. 如果没有权限,系统会拒绝让我们访问。
  3. 确定权限信息时,系统会先确定用户是谁,是拥有者、所属组、还是other。在Centos,用户角色只确定一次,顺序为拥有者、所属组、other。
  4. root用户不受权限约束。
  5. 文件有可执行权限,不代表文件可以执行。如文件my.txt,chmod u+x my.txt 使拥有者具有执行my.txt的权限,但由于my.txt本身不是二进制可执行文件,所以会报错。

一个角色的三个权限 r/- 、w/- 、x/- ,如果具有某个权限为1,不具有为0,则可用三位二进制表示,即用一个8进制数字表示权限。如chmod 777 my.txt ,拥有者的权限为rwx,所属组的权限为rwx,other的权限为rwx。

chown/chgrp

chown 用户名 文件名 更改文件拥有者,chgrp 用户名 文件名 更改所属组。如果是普通用户使用chown/chgrp,需要sudo提权或用su切换为root。

chown 用户名:用户名 文件名 同时更改文件的拥有者和所属组。

目录权限

默认情况下,创建一个新目录,rwx权限都要有。

如果对目录没有权限r,就不能查看目录里的文件。如other对目录test有r权限,用chmod去掉other的r权限后,切换成user就无法查看test里面的文件。

如果对目录没有w权限,则无法在指定目录内部新建文件。如对于目录test,other没有w权限,所以user不能在test新建文件。

切换成root,给other加上w权限,user即可在test创建文件。

如果对目录没有x权限,则无法进入目录。

Linux多用户之间是相互隔离的,如下图,任何一个用户只对自己有rwx权限,无法进入其他用户的家目录。

umask

对于普通文件,起始权限为666,即默认不带x;对于目录文件,起始权限为777,即都带rwx。但是新建的普通文件和目录不是这样的,系统存在一个权限掩码,umask 可查看权限掩码。

新建普通文件和目录的权限 = 起始权限 & (~umask) 。

新建普通文件root.txt,其权限如图,即 110 100 100 。普通文件的起始权限为666,即 110 110 110 ,umask只看后三位,即 000 010 010 ,位运算得110 100 100 。

umask的目的是希望凡是在umask中出现的权限,都不应该在最终权限出现。

为什么要有umask?

  1. 默认权限,由OS自主决定,无法在创建文件前修改,这样就写死了权限。有umask,可以配置权限,灵活满足需要。
  2. 特殊情况下,配置umask,可以控制文件的默认权限,让我们的代码都是可控的。

umask也可以修改,当umask为0777时,新建文件的所有权限都被关闭。

umask是写在内存中的,退出后重新打开XShell,umask还是0022。

粘滞位

一个文件能否被删除,与文件本身的rwx权限无关,如果该文件所处目录对角色开放w权限,如目录对other开放w权限,那么普通用户能删除该文件,因为这本质是利用w权限对目录进行写。

共享类文件,不想让非文件拥有者能删除对应文件 。所以,我们的需求是任何人都能在一个共享目录里新建文件,但是非文件拥有者不能删除文件,共享目录一般放在根目录下。

引入一个权限标志位 t ,即粘滞位 ,根目录下的tmp 目录也带粘滞位。粘滞位目录下的文件只能被root、目录拥有者、文件拥有者删除。只能给需要共享的目录添加粘滞位。chmod +t 目录 添加粘滞位。

user、user1在目录temp_Backup分别创建两个文件。

user删除2.txt,user1删除1.txt,会报错,此时非文件拥有者就不能删除文件了。

相关推荐
‎ദ്ദിᵔ.˛.ᵔ₎1 小时前
Linux 权限
linux
ole ' ola1 小时前
Linux DDR内存使用情况
linux·运维·服务器
Kingairy1 小时前
Linux 机器信任关系
linux·运维·服务器
流浪0012 小时前
Linux系统篇(一):从零入门操作系统:冯诺依曼体系到进程的完整理解
linux·运维·服务器
mounter6252 小时前
破局与守正:eBPF 在 Linux 内存管理中的应用、演进与重构构想
linux·服务器·网络·mmu·ebpf·linux kernel
法雅特吉他3 小时前
入门吉他选购指南:桶型、材质、工艺对吉他性能的影响
经验分享·新媒体运营·学习方法·业界资讯·流量运营·材质·内容运营
老鱼说AI3 小时前
统计学习方法第七章:支持向量机精讲(超硬核长文深入预警!)
人工智能·深度学习·神经网络·算法·机器学习·支持向量机·学习方法
STDD3 小时前
Linux Namespace:容器隔离的底层原理,PID、网络、挂载隔离实战
linux·运维·网络
Demon1_Coder3 小时前
智能体的自定义工具
java·linux·前端