SUID
Set Uid
当我我们使用 ls 看passwd与shadow的权限时,会发现shadow文件只有root用户具有所有权限,其余所有都没哟任何权限,shadow文件是保存各个用户密码相关的数据,但是那么试想,虽然passwd命令可以允许普通用户执行,但是shadow确实不能被普通用户写入啊,当我们非root用户是如何修个自己的密码的?
当我们用zkncn这个普通用户执行passwd这个命令时,此时SUID权限就起作用啦,用于这个权限,普通用户在执行这个命令时,就暂时取得了该程序所有者的权限,即root用户的权限,当用就可以对shadow这个文件操作咯
SUID的基本作用及说明:
只对二进制可执行文件设置起作用更。对其他类型文件或目录都是没有作用的
该权限只能在该可执行文件的执行过程中起作用。比如我们用zkuncn用户使用可以执行passwd命令修改自己密码,但用 cat 读取 /etc/shadow 文件是没有权限的
执行的用户需要对该可执行文件具有执行权限,即 x 权限。因为有了 x 权限才能执行该程序
该权限用在该程序所有者权限组中的 x 权限位置用 s 表示,由于该权限只有在具有 x 权限时才有意思,所以 s 与 x 权限合并写在 x 权限位置上,当是大写的 S 时表示无效的SUID,例如用户对该程序没有 x 权限,却设置了 s 权限
SGID
在SUID是临时取得程序所有者的权限,顾名思义 SGID,就是临时取得该程序的所有组的权限,但是SGID可以对可执行二进制程序或者目录都起作用,该权限在组 x 权限位置用 s 表示,同样需要 x 权限,若没有 x 权限,怎表示无效的 SGID 权限,用大写 S 表示
当对象是目录是:
若用户进入具有SGID权限的目录,则此时该用户在此目录下的群组将变为该目录的群组
若该用户能创建目录及文件,那么目录和文件的群组即是该目录的群
例如:在第二行我们可以看出,testfile 文件的属于 zkunc 用户,群组属于 zkuncn 群组,此时我用用户 zkuncn1 在 testfile文件下创建一个hello的文件,再用 ls 看下,可以看出 hello 文件的群组却是 zkuncn ,因为 testfile 目录具有 SGID 权限,正常情况下 hello 的群组应该是zkuncn1
若对象是可执行程序:
具有 x 权限的二进制可执行程序
执行的用户在执行的过程中具有该程序群组的权限
Sticty Bit
该权限只对目录有效,对文件没有作用,该权限用 t 表示,若一个目录设置了 t 权限,那么各用户可以在该目录下创建和新增文件或目录,但是各用户只能删除属于自己用户的文件或目录,不能删除别人的文件和目录,即使该文件或目录具有 777 的权限。同样,t 权限在其他用户 x 权限位置用 t 表示, t 权限也需要 x 权限,若没有 x 权限,则表示无效,用大 T 表示。
简单的就是 tmp 目录
在 tmp 目录中,我们用zkuncn用户创建一个文件 zkuncndir, 此时切换到 zkuncn1 用户,去删除zkuncndir 文件夹,尽管这个文件夹的权限是 777 但是由于 t 这个权限,还是不能删除的