LINUX的权限(摘抄自用)

LINUX权限,一般用八进制表示

r=4, w=2, x=1, -=0(这也就是用数字设置权限时为何是4代表读,2代表写,1代表执行)

关于第一位最高位的解释: 上面我们说到了权限表示中后九位的含义,剩下的第一位代表的是文件的类型,类型可以是下面几个中的一个:

d代表的是目录(directroy)
-代表的是文件(regular file)
s代表的是套字文件(socket)
p代表的管道文件(pipe)或命名管道文件(named pipe)
l代表的是符号链接文件(symbolic link)
b代表的是该文件是面向块的设备文件(block-oriented device file)
c代表的是该文件是面向字符的设备文件(charcter-oriented device file)


LINUX附加权限:

linux除了设置正常的读写操作权限外,还有关于一类设置也是涉及到权限,叫做Linxu附加权限。包括 SET位权限(suid,sgid)和粘滞位权限(sticky)。

SET位权限:

suid/sgid是为了使“没有取得特权用户要完成一项必须要有特权才可以执行的任务”而产生的。 一般用于给可执行的程序或脚本文件进行设置,其中SUID表示对属主用户增加SET位权限,SGID表示对属组内用户增加SET位权限。执行文件被设置了SUID、SGID权限后,任何用户执行该文件时,将获得该文件属主、属组账号对应的身份。在许多环境中,suid 和 sgid 很管用,但是不恰当地使用这些位可能使系统的安全遭到破坏。所以应该尽量避免使用SET位权限程序。(passwd 命令是为数不多的必须使用“suid”的命令之一)。

  • suid(set User ID,set UID)的意思是进程执行一个文件时通常保持进程拥有者的UID。然而,如果设置了可执行文件的suid位,进程就获得了该文件拥有者的UID。
  • sgid(set Group ID,set GID)意思也是一样,只是把上面的进程拥有者改成进程组就好了。

SET位权限表示形式(10位权限):

如果一个文件被设置了suid或sgid位,会分别表现在所有者或同组用户的权限的可执行位上;如果文件设置了suid还设置了x(执行)位,则相应的执行位表示为s(小写)。但是,如果没有设置x位,它将表示为S(大写)。如:

1、-rwsr-xr-x 表示设置了suid,且拥有者有可执行权限
2、-rwSr--r-- 表示suid被设置,但拥有者没有可执行权限
3、-rwxr-sr-x 表示sgid被设置,且群组用户有可执行权限
4、-rw-r-Sr-- 表示sgid被设置,但群组用户没有可执行权限

设置方式:

SET位权限可以通过chmod命令设置,给文件加suid和sgid的命令如下(类似于上面chmod赋予一般权限的命令):

chmod u+s filename 	设置suid位
chmod u-s filename 	去掉suid设置
chmod g+s filename 	设置sgid位
chmod g-s filename 	去掉sgid设置

粘滞位权限表示形式(10位权限):

一个文件或目录被设置了粘滞位权限,会表现在其他组用户的权限的可执行位上。如果文件设置了sticky还设置了x(执行)位,其他组用户的权限的可执行位为t(小写)。但是,如果没有设置x位,它将表示为T(大写)。如:

1、-rwsr-xr-t 表示设置了粘滞位且其他用户组有可执行权限
2、-rwSr--r-T 表示设置了粘滞位但其他用户组没有可执行权限

设置方式:

sticky权限同样可以通过chmod命令设置:

chmod +t <文件列表..>
  • suid 的八进制数字是4
  • sgid 的八进制数字代表数字是 2
  • sticky 位八进制数字代表数字是1


权限的掩码

umask是用来指定"目前用户在新建文件或者目录时候的权限默认值"。

在linux下我们查看的方式有两种,一种可以直接输入umask,就可以看到数字形态的权限设置分数,一种则是加-S(Symbolic)参数,就能以符号类型的方式来显示出权限了,如下图:

目录和文件的默认权限属性是不同的,因为对于一个目录来说它的x权限也就是执行权限是很重要的,进入目录等操作都是需要目录具有执行权限的,而对于文件来说,一般情况都是用于数据的记录操作,所以一般不需要执行权限。从而,在linux下默认的情况是这样的:

▶ 如果用户创建的是目录,则默认所有权限都开放,为777,默认为:drwxrwxrwx

▶ 如果创建的是文件,默认没有x权限,那么就只有r、w两项,最大值为666,默认为:-rw-rw-rw-

那么之前所说的拿走的权限就是这里这个默认值要减掉的权限,r、w、x分别是4、2、1,要拿掉读权限就输入4,拿掉写权限就输入2,以此类推。

再看上图,umask为022,也就是说,对于当前用户没有拿掉权限,group用户和other用户都被拿走了w权限,所以此时如果用户进行创建目录和文件的时候,默认权限是会进行如下的减法操作:

新建文件:666-022=644;

新建目录:777-022=755.

所以,目录的默认权限是rwxr-xr-x(755),文件的默认权限是-rw-r--r--(644)。

权限掩码的设置:Umask的设置只需要在umask命令后加想要拿掉的权限数字就行,Linux下的etc/profile和etc/bashrc中都有默认的umask设置,vim打开文件后,可以看到根据不同的uid设置了不同的umask,那如果实在etc/profile中修改,只有在重新登录用户的时候才会发生改变,而在etc/bashrc中修改的话要是切换目录就会发生改变,因为profile是在登录用户的时候调用的,而bashrc是在打开一个shell时候调用。

一般情况下,是不建议这么修改的,我们如果要设置的话就直接用umask命令做更改就行。


另外,在权限掩码方面关于root用户和普通用户的区别,我切换到普通用户查看一下umask,如下图:

可以看到确实和root用户下不一样,此时的umask是0002,也就是说默认拿掉的权限少了。这是linux系统基于安全的考虑,对于一般用户身份,保留了用户组的写权限,而root 用户下是拿掉了这项权限的。

上面在计算创建的文件和目录的默认权限的时候,我写的是这样的:666-022=644;777-022=755.,但这并不是做了对应数字的加减,刚刚看到数字相减的结果和最后验证的结果是一样的,但这只是巧合而已。

我们知道上面的每一个数字是代表着某一个用户对于文件或者目录有没有读、写、执行权限的衡量,比如6,代表了rw-,即只有读和写权限,是421中4+2的结果,所以并不是一个十进制数,我们在计算的时候并不能直接以十进制相减来计算。

我们只要知道421分别对应rwx,在计算的过程中用rwx来算就行了,或者就用八进制计算。

发布于 2019-10-06

文章被以下专栏收录