bosthhe1 / Linux

0 stars 0 forks source link

权限浅析 #2

Open bosthhe1 opened 2 years ago

bosthhe1 commented 2 years ago

66 EKGF`05V~JQ3R07(7%%3 _597AA_Y)R$3JD1(SM%0PNV

bosthhe1 commented 2 years ago

了解权限之前,需要知道权限是用来约束普通人的,而root用户是超级用户,不受权限约束,而普通用户代表文件所属人,文件所属组,和other。 我们首先看到文件中有两个我们的用户名,其中第一个代表文件所属人,第二个代表文件所属组,除了上面两个之外的其他用户都叫做other (root用户也叫做other)。 在图片开头可以看到第一张图片是以 ‘ - ’开头,而第二张图片是以d开头,其中 ‘ - ’ 代表的是文件类型,而d表示的是目录类型,Linux在运行的环境中,不以文件的后缀来区分文件,而是以首字母来区分,虽然Linux不以后缀区分,但是Linux下的软件,如gcc编译器,会以文件后缀区分 后面9个字母每三个字母为一个组,分别对应文件所属人,文件所属组,other,其中的r代表读权限,w代表写权限,x代表可执行权限,用 ‘ - ’代表的是,没有该权限,我们第一个文档就是文件所属人和文件所属组都具有读,写,可执行三个权限,而other具有读和可执行权限,没有写权限,我们可以通过一些指令修改权限,修改权限只能是文件所属人或者root chmod u(+/-)rwx a.out 给自己 加/减 上rwx的权限 chmod g(+/-)rwx a.out 给所属组 加/减 上rwx的权限 chmod o(+/-)rwx a.out 给other 加/减 上rwx的权限 chmod a(+/-)rwx a.out 给所有人都 加/减 上rwx的权限 sudo chown root a.out 将文件所有人交给root,需要权限提升 sudo chgrp root a.out 将文件所属组交给root,在上一条指令将a.out交给root后,文件就属于root,按照道理应该是无法对文件进行操作,但是这里应该是通过权限临时提升,将所属组交给root。 我们可以看到rwx有就会显示对应的字母,没有就会显示‘ - ’,那么就可以看作2进制,有就代表1没有就代表0 我们看第一张图片中rwxrwxr-x写成二进制为111 111 101,转化为八进制就为775,所有可以通过八进制来修改文件权限 chmod 0777 a.out 将所有人都加上读写可执行的权限 chmod 0000 a.out 将所有人都去掉读写可执行的权限 chmod o+t a.out 为other设置粘滞位(只能该other设置),other设置粘滞位后,只可在文件内部修改属于自己的文件,不能修改别人的文件 我们拥有r权限,才可以读文件,用于w权限,才可以写文件和删除文件,拥有x权限,才拥有可执行,可访问权限 为什么我们的权限一开始创建就是我们所看到的这样,是因为系统有一个默认权限和一个umask(掩码) 其实在我们文件和文档创建开始权限默认为777和666,但是有一个掩码转化,这个掩码编译器默认为0002,在创建文件后,文件权限会与掩码先计算,然后得出最终权限,计算方式为 掩码按位取反(需要注意的是按位取反会改变符号位),然后与默认权限按位与,最终就得到我们所看到的权限。 输入umask可查看默认掩码 默认掩码可修改 输入umask 0333 这个默认掩码必须为4位,每一位都是8进制,转化为八进制为0 011 011 011,与默认权限计算过后,权限为100 100 100 ,就为 r--r--r-- ,所有人都没有写和可执行权限

bosthhe1 commented 2 years ago

8KW04 X3H~`ZQ$AXLTRB6DQ 我们对比这张图片和以上图片最后一个位置,发现最后一个位置不是rwx,而是T(粘滞位),粘滞位是为了限制普通用户的权限的,当我们以other的身份去访问别人文件的时候,因为有w的权限,是可以创建和删除文件的,但是这个删除文件太广泛了,我们子在w权限的情况下,不仅能删除自己的文件,还能删除别人的文件,所以为了避免这种事情,设立了粘滞位,粘滞位的作用的缩小的权限,让我们只能是创建文件,只能删除自己的文件。(当然这个粘滞位只能是对目录才可以设立,对可执行程序不起设立) 粘滞位的设置:chmod +t newfile 对newfile文件设置粘滞位