- A+
文件权限管理之特殊命令
一:特殊权限
昨天所学的Linux基本权限为为9个;分别是rwx rwx rwx。但有时会发现系统中会有一些特殊的权限位符号;
例如:
Linux系统一共有12个特殊权限符:
rwx | rwx | rwx | suid | guid | sbit |
---|---|---|---|---|---|
属主 | 属组 | 其他人 | 用户位 | 用户组 | 其他用户 |
特殊权限对照表:
类别 | suid | guid | sbit |
---|---|---|---|
字符表示 | S(大写) | S(大写) | T(大写) |
出现位置 | 用户权限为x | 用户权限位x | 其他用户权限位 |
基本权限为有x权限 | s(小写) | s(小写) | t(小写) |
代表数字 | 4 | 2 | 1 |
八进制表示 | 4000 | 2000 | 1000 |
生效对象 | 用户位 | 用户组位 | 其它用户 |
二:特殊权限命令
1.suid基础原理:
1.suid通过S字符标识,存在于用户权限位的x对应权限位置 2.若某文件本身的用户权限位就有x权限,则设置suid权限时,则会以s(小写)表示 3.给文件设置s权限对应的数字表示为4;在八进制数下可以用4000表示 4.suid同样也可以使用chmod命令设置权限,可以使用字符或数字表示
注意:
-
suid仅适用于可执行的文件
-
功能:只要用户对设有uid的文件有执行权限,那么当用户执行此文件时,就会以该文件属主的用户身份去执行此文件;当执行文件后,身份的切换也会随之消失
-
例:当用户执行passwd时;执行的是/usr/bin/passwd这个可执行文件;执行时会以root用户身份执行,可以在执行时修改一连串的文件(连锁反应),当该passwd二进制文件执行后,用户身份也就会变为本身了
-
设想;当/usr/bin/passwd二进制可执行文件没有了s权限,会发生怎样的情况
(当普通用户使用passwd命令时,会修改一系列的相关文件{/etc/passwd,shadow文件};而这些文件的属主组都不是属于普通用户,所以就会有suid权限;当普通用户使用该二进制命令文件时,就会使用该文件的属主身份进行操作。)
当删除掉passwd文件的s执行权限:
查看普通用户是否可以执行该二进制文件
这就表示虽然普通用户有权限使用passwd;但无法向该文件连锁执行的文件做出修改,就会提示用户身份令牌错误;普通用户就不能自己修改自己的密码了。
恢复/usr/bin/passwd二进制文件的suid权限
使用普通用户使用passw修改自己的密码;看看是否成功
-
以上述为例:如何让用户本身禁止修改密码??
可以修改/usr/bin/passwd文件的s权限,去掉该权限;让普通用户虽然可以执行passwd;但是无法修改与passwd命令相关变动的/etc/shadow用户密码文件;这样就可以让用户不能修改密码了
-
使用find命令搜索系统上所有的s权限位文件
参数解释: -perm:利用权限进制搜索 -type:指定文件类型(l:软连接类型;d:文件夹类型;f:文件类型) -ls:搜索的数据进行格式化输出 -delete:对匹配的数据进行删除
总结:
当有suid权限的文件被执行时,该文件将以所有者的身份去运行,就相当于普通用户执行这个文件时,就会拥有该文件属主的权限了;若属主为root,那么执行者就会在执行文件时拥有root用户的权限!!
1.suid权限是针对二进制可执行文件设置的,不能用在shell脚本上(非常危险!!)
2.suid权限位在user位的x权限位上,当设置该文件有s权限后;若显示为S,则说明x权限位本身就没有x权限;若显示s(小写),则说明该文件权限位本身就有x权限
3.suid的作用就是让执行者拥有文件属主的全部权限;以文件所有者的身份去运行该文件
4.suid权限会对系统有一定的危险!一般使用sudo命令代替suid权限执行相应的操作;当对Linux系统优化时,会尽量去除所有设置的suid命令
2.sgid 权限位
-
对于二进制文件命令说,sgid与suid的作用、使用方法大致相同;不同的是suid是设置文件属主的权限;sgid是设置文件属组的权限
-
suid主要作用于二进制文件;sgid主要作用于文件夹:当为某个文件夹设置sgid权限后,在改文件夹中创建的文件,都会以改文件夹的属组权限为准,而不属于创建该文件的用户权限。
-
sgid对于文件、文件夹有不同的作用:
文件:
- sgid只对二进制文件命令生效,且需改文件本身具有x权限
- 当执行具有sgid权限的二进制文件命令时,就会获得该命令在执行期间所属组的身份与权限(就相当于执行具有suid权限的文件一样)
文件夹:
-
- 当设置了sgid权限的文件夹,会保证在该文件夹下创建的所有文件或文件夹都会保持同样的属组权限属性(就相当于创建的文件或目录都会保持与上一级目录相同的属组)
-
实践操作:
1.创建一个共享目录/home/admins
2.要求该目录属组是adminuser,adminuser组内成员对该目录的权限是,可读,可写,可执行
3.其他用户均无任何权限(root特例)
4.进入/home/admins创建的文件,自动继承adminuser组的权限。
(如何在创建文件或目录时,保持与上一级文件具有相同的属组权限)
使用普通用户在该文件夹下创建文件或文件夹:
恢复文件夹的其它用户权限
创建文件与文件夹
3.sbit 粘滞位
在o的权限为上
sbit特殊点:
当一个目录有了粘滞位,这个目录除了root用户外,任何用户都只能删除、移动自己创建的文件或目录不会影响到其他用户文件或目录
若文件夹没有设置粘滞位,并且文件夹权限的rwx权限很大;任何具有该目录写和执行权限的用户都可以删除和移动体重的任何文件!!
拓展
1.查看系统所有的环境变量
set命令
2.查看用户的环境变量
env命令
3.命令提示符的变量
PS1
4.若用户的家目录出现损坏,咋办?
- 直接拷贝/etc/skel文件中的所有文件到该用户的家目录
-r:递归拷贝