SUID:
1、需要注意的是,只对二进制可执行程序有效,不能为普通文件
2、发起者对程序文件必须拥有执行权限
3、启动为进程之后,其进程的宿主为原程序文件的宿主
4、SUID设置在目录上毫无意义。
SGID:
可以应用在二进制文件和作用在文件夹下,当作用在二进制文件下时,作用和SUID相似,只不过SUID是把发起者临时变为文件的所有者,而SGID是把进程的发起者变成源程序文件的属组,默认情况下,用户创建文件时,其属组为此用户所属的主组,当SGID作用在目录下时,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录。
Sticky:
默认情况下用户可以删除具有写权限的目录中的任何文件,无论该文件的权限或拥有权,如果在目录设置Sticky位,只有文件的所有者或root**可以删除该文件,Sticky位是作用在文件夹的,设置在文件上毫无意义。
使用这个用户登录linux系统后的一般 *** 作(除sudo/su等 *** 作外)都是这个用户权限的 *** 作,包括 启动应用后,该应用具有的权限,也是和这个用户一致的 。Linux每个进程都是以某个用户身份运行, 进程的权限与该用户的权限一样,用户的权限越大,则进程拥有的权限就越大 。用户本身对系统的权限在创建用户时设置,也可后续更改(如不能登录等等)。
查看所有用户信息。
Linux权限授权,默认是授权给三种角色,分别是user、group、other。三种角色对目录的权限:chmod 设置数字权限4,2,1,分别对应的是r,w,x,即可读,可写,可执行。 对目录设置权限时,可以加-R递归参数。可以对文件的这三个角色进行目录读写可执行授权, 如图 。
以上图所示,第一组为文件所有者的权限,第二组为文件所属组的权限,第三组为其他人的权限。其表示的具体含义为:文件所有者具有对文件的读写权限,文件所属组的用户具有对文件读写的权限,而其他人只有读取文件的权限。
文件的所有者
文件的所有者一般是创建该文件的用户,对该文件具有完全的权限。在一台允许多个用户访问的 Linux 主机上,可以通过文件的所有者来区分一个文件属于某个用户。当然,一个用户也无权查看或更改其它用户的文件。
文件所属的组
假如有几个用户合作开发同一个项目,如果每个用户只能查看和修改自己创建的文件就太不方便了,也就谈不上什么合作了。所以需要一个机制允许一个用户查看和修改其它用户的文件,此时就用到组的概念的。我们可以创建一个组,然后把需要合作的用户都添加都这个组中。在设置文件的访问权限时,允许这个组中的用户对该文件进行读取和修改。
其他人
如果我想把一个文件共享给系统中的所有用户该怎么办?通过组的方式显然是不合适的,因为需要把系统中的所有用户都添加到一个组中。并且系统中添加了新用户该怎么办,每添加一个新用户就把他添加到这个组中吗?这个问题可以通过其他人的概念解决。在设置文件的访问权限时,允许其他人户对该文件进行读取和修改。
授权完各个角色的权限,那么怎么更改文件所属的角色。如下:
更改文件拥有者: chown 账号名称 文件或目录
更改文件所属用户组:chgrp 组 目录或文件名
web目录权限设置参考 。 注意Web服务器各自的运行用户如果要对web目录进行 *** 作,也必须得到web目录的rwx授权才可以。
linux里面如何让某个程序以某个用户来运行?比如让mysql程序用mysql用户去运行。让httpd用httpd用户去运行。
估计很多人都知道 rwx 三个权限,但是可能不知道 SUID, SGID, SBIT 这三个特殊权限,这里我就讲讲吧。有的时候,你想用 ACL ,或者在执行文件里检测执行者的ID,这些方法,来解决的问题,可以用这三个特殊权限解决
首先说 SUID 这个权限,仔细看,s 在什么位置?
估计很多人都知道 rwx 三个权限,但是可能不知道 SUID, SGID, SBIT 这三个特殊权限,这里我就讲讲吧。有的时候,你想用 ACL ,或者在执行文件里检测执行者的ID,这些方法,来解决的问题,可以用这三个特殊权限解决
首先说 SUID 这个权限,仔细看,s 在什么位置?
我们知道,rwx 这三个权限,是一个权限占一格,如果没有x的权限,就会变成一条横杠(rw-),而不是变成两个权限(rw)。
由此可以看出,这个 s 必然与 x (执行)有关。
先看下passwd这个程序,当你执行passwd的时候,你其实就是修改密码,但是,密码是存在 shadow 这个文件里的,权限 rw------- ,除了root ,谁能改这个文件里的内容?但是,实际情况是,任何用户都能通过 passwd 这个程序,修改自己的密码。
如果你想到,这个 s 与提权有关,恭喜你,猜对了!
这个s,全称Set UID。那么,这个 SUID 有什么作用呢?
就是使有 Set UID 权限的可执行文件的执行者,变成这个文件的 own 。比如说,前面说到的修改密码,就是通过执行者变成这个文件的own实现的。
不过,SUID 也有限制的!
首先,是仅对可执行文件有效。如果不是可执行文件,你给它 s 权限,也没有意义。
其次,运行者要对这个文件有执行权限。比如说,如果你把passwd这个bin的权限改成 rws------ ,那么,别的用户也是无法运行的。
最后,这个权限仅在运行具有s权限的可执行文件时有效,也就是你 passwd 里密码一改完,你又变会原来的用户了!
接下来,说第二个,SGID。
刚刚说的 SUID 是变成那个文件的 own ,这个就是变成那个文件的 Group 了!总的来说,对于可执行文件方面,与 SUID 几乎一样,只是 own 不变,group 变了。
有个特殊条件:
执行这个bin的用户要对其有执行权限的。
其实这个与上面的 SUID 是一样的。
但是,它与SUID不一样,它对目录有效。
如果一个用户要进入某个目录,需要对这个目录有两个权限,一个是 r ,一个是 x 。
那如果我进了一个有 SGID 权限的目录呢?
在这个目录里创建的文件的属主全部是那个目录的属主了(当然需要对目录有w权限)!这个非常适合团队开发。
这么做的意义在哪儿呢
防止用户修改其他用户的密码么
-----------------------------------------
举个例子,如果你有一台http服务器,你想使其以最低权限运行,怎么办呢?
其中,一个方案就是,开一个账户,比如说www,给它很小的权限,然后设置apache/nginx以这个用户跑。
但是!!!如果我以root这个用户运行 apache 或者 nginx ,它就会继承 root 权限,怎么才能避免呢?用SUID,设置apache/nginx的bin的属主为 www ,权限 rwsr--r-- ,不管谁启动这个bin,它都会以这个用户来跑。
回到你刚刚说到的问题,当你运行了passwd以后,其实是继承了你的身份在跑,一个在以 user:user 这个身份跑的程序,怎么修改 /etc/shadow 这个文件呢?就要给执行者提权,而且密码一改好,立刻回归普通用户的权限,即保证了密码能顺利改好,又能保证非root用户看不到 shadow 里的内容
你看,ps出来有两个passwd进程,因为 SUID 权限的存在,使得 passwd 的执行者变成了root,而下面的 grep 进程,依然是 fyyz 的。
这是第三个特殊权限,通常 /tmp 里可以体现。
tmp 目录是放临时文件的,可以近似地理解为内存里的文件,注意,是近似地理解,不是说它就是内存(虽然tmp可以挂到内存里去)!如果某个程序跑到一半,突然它的临时文件被删了,程序基本上就崩溃了。怎么办?就要用第三种特殊权限了,SBIT。
SBIT只对目录有效。
如果使用者对拥有SBIT权限的目录有读写权限时,能在这个目录里读写,文件的属主是自己。
但是!!仅有文件的属主与 root 才有权力删除SBIT权限下的目录里的文件。
你们自己试试看:
进入 /tmp 当中(不要以root身份)
touch test,并且更改 test 权限成为 777
通过su切换到另一个用户(别切换到root)
尝试删除 test 这个文件
你会发现,无法删除这个文件!
这三种高级权限,怎么设置呢?
首先,KDE 的 Dolphin 里可以在高级权限里设置
你看,这个高级权限窗口里的可以勾选的三个权限,就是我刚刚说的,SUID,SGID,SBIT。
如果是命令行里,怎么设置?
你或许看到有些软件里表示权限(一下子想不起来linux下有哪些软件,但是我记得winscp这个软件里就是这样),用的是 -755 这种样子,最前面的 - 是什么?就是特殊权限位!
SUID,SGID,SBIT 分别对应 4 2 1 ,如果你要给一个文件 SUID 权限,那就:
要注意的是,s 权限必须要有 x 作为铺垫,没有x的话。。。
s 就会大写,这就相当于一个报错。
现在,我来简单总结下。
SUID 就是让执行者的身份变成文件的own,只对bin有效。
SGID 就是让执行者的组变为文件的组,对bin有效;也可用于目录,目录里创建的所有文件的属组都是那个组。
SBIT 仅对目录有效,目录里创建的所有文件,只有文件的属主和root才能删除。
SUID,SGID,SBIT 分别对应 4 2 1,可以用 chmod 修改文件的权限。
转自 嘉为教育-rhce认证_rhce培训_linux培训_linux认证_linux考证
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)