Linux基础-0002-linux特殊权限

来源:互联网 发布:禁止windows自动更新 编辑:程序博客网 时间:2024/06/09 19:48

一、Linux特殊权限

Linux特殊权限,是有背景的:

文件和目录都是有属主和属组的。当一个文件被执行之前,他是有相关权限的(user,group,other)。用户想执行文件时,必须有相关权限才能执行。

程序也是有属主数组的。

[root@centos ~]# ll /usr/bin/tail-rwxr-xr-x 1 root root 57160 May 23  2013 /usr/bin/tail

tail这个命令权限上,一个名为elk的用户,属组不属于root这个属组,则该用户对于tail这个命令的权限即为r_x,用户不具备对这个命令的写权限。但是当这个命令被elk用户执行后,该命令运行后成为了一个程序,此时这个程序的属主属组是elk这个用户对应的属主属组,和tail这个命令的属主属组没有关系。

再次强调:

执行文件的用户与文件本身的权限,他们之间的关系是:

1.当用户执行文件时,系统会去检查用户与文件的关系,将用户与文件相应权限进行挂钩,如elk用户对tail的权限是other权限r_x;

2.当用户成功执行文件(如成为了一个程序)后,文件本身的权限与用户不再有关系,程序的属主属组只与用户有关;

任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限。

启动为进程后,其进程的属主为进程的发起者,属组为发起者所属的组。

用户elk的属主是elk,属组也是elk

tail文件的属主是root,属组是root

当用户elk执行tail这个可执行程序文件,当文件执行成功成为一个程序后,程序的属主是elk这个发起者的属主elk,属组是发起者elk的属组elk


实际案例理解:

在elk用户下执行以下命令

tail -f /var/log/messages

这个命令的执行过程是:

1.检查用户elk是否具备对tail这个二进制可执行文件的访问权限;

2.检查用户elk是否具备对/var/log/messages的访问权限;

只有这两个权限检查都通过了才能成功执行命令。


总结:进程运行中的安全上下文法则

进程访问文件时的权限,取决于进程的发起者,elk用户发起tail -f /var/log/messages这个命令,即为发起对messages这个文件的访问,取决于用户elk是否具备对messages文件的权限,分为几种情形:

1>:进程的发起者与文件是同一个属主,则应用文件属主权限;

2>:进程的发起者与文件是同一个属组,则应用文件属组权限;

3>:否则,应用文件其他权限。


1.SUID

Linux中程序安全上下文规则中明确:

(1)任何一个可执行程序文件能否启动,取决于发起者对程序文件是否拥有可执行权限;

(2)文件启动为进程后,其进程的属主为发起者,进程的属组为发起者所属的组。

这样子就会存在一个疑问:

正常情况下来说,用户自身相关的账号信息是存储在/etc/passwd这个文件中的,该文件的权限是:

[elk@centos ~]$ ll /etc/passwd-rw-r--r-- 1 root root 1253 Dec  2 08:37 /etc/passwd
我们通过passwd去修改用户自身账号相关信息,修改的是passwd这个文件,但是从权限上看,只有root用户才能修改该文件,但是我们不用root账号都能修改自己的密码,不是违背了程序安全上下文法则中的“文件启动为进程后,进程的属主是发起者,进程的属组是发起者所属的组”,因为elk这个用户是不具备对文件passwd的写权限的。等于打破了安全上下文法则中的第二条。这是怎么实现的呢?

[elk@centos rott]$ ll /usr/bin/passwd -rwsr-xr-x 1 root root 30768 Feb 22  2012 /usr/bin/passwd

属主中的x位置的权限为s。这个s即为SUID

何为SUID?

SUID即为SET UID。对于SUID这个特殊权限的特殊地方在于:

(1)任何一个可执行文件能否启动,取决于发起者对程序文件是否拥有可执行权限。这个法则对于SUID特殊权限一样管用,如果用户elk都不具备执行passwd命令的权限,则无法修改自己的用户信息。

(2)SUID打破了安全上下文法则中的第二条,在SUID中,可执行文件启动为进程后,其进程的属主为原程序文件属主。

如用户elk 通过passwd命令修改自己的用户信息,实际上是通过passwd命令修改/etc/psswd文件,按照正常的Linux安全上下文法则:

用户elk具备对passwd这个命令的可执行权限,满足了法则中的第一条法则;

用户elk执行可执行文件后,进程启动成功, 此时进程的权限是发起者即为elk的权限(属主属组都是elk)。

这种情况下,用户是没办法对/etc/passwd文件进行写操作的,因为elk用户不具备对/etc/passwd的写权限


SUID的存在打破了法则中的第二条法则:

当用户elk执行passwd命令修改/etc/passwd文件时,passwd命令的属主中的x权限是s权限,则此时启动的进程的属主是原程序文件passwd的属主,即为elk用户暂时以root的身份修改/etc/passwd文件。




2.SGID

3.SBIT

原创粉丝点击