特殊权限(了解):
SUID:rwsrwxrwx chmod u+s filename
·作用:让其他用户使用拥有SUID权限,可以使用所有者的权限。
#s:原来有x执行权限,才会变成s为生效,否则为S:不生效
SGID:所有组的x变成s,其他人以组权限执行命令。
chmod g+s filename
#SGID权限位
chmod 2755 filename
#SUID+SGID
chmod 6755 filename
chmod u+s,u+s filename
stickybit:粘滞位
#给共享目录设置为粘滞位,作用是只能在该目录中删除自己的文件,没有修改权限,不能修改不能移动
chmod o+t dir
chmod 1777 dir
三种特殊权限的区别:
特殊权限 |
说明 |
SUID |
当一个设置了SUID 位的可执行文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权。任意存取该文件拥有者能使用的全部系统资源。如果所有者是 root 的话,那么执行人就有超级用户的特权了。 |
SGID |
当一个设置了SGID 位的可执行文件运行时,该文件将具有所属组的特权,任意存取整个组所能使用的系统资源;若一个目录设置了SGID,则所有被复制到这个目录下的文件,其所属的组都会被重设为和这个目录一样,除非在复制文件时保留文件属性,才能保留原来所属的群组设置。 |
stickybit |
对一个文件设置了sticky-bit之后,尽管其他用户有写权限,也必须由属主执行删除、移动等操作;对一个目录设置了sticky-bit之后,存放在该目录的文件仅准许其属主执行删除、移动等操作。 |
什么是特殊权限?
Linux 除了基础的读(r)、写(w)、执行(x)权限外,还有三个特殊权限位,用于解决特定场景下的权限管理问题。
①、SUID(Set User ID):临时借身份
核心作用
让其他用户使用拥有SUID权限,可以使用所有者的权限。对可执行文件生效,用户执行该文件时,会临时获得文件所有者的权限(用完就还)。
生活化理解
比如你是普通用户,本来没权限改系统密码文件(只有 root 能改),但passwd命令默认设置了 SUID,你执行它时就临时变成 root,改完密码又变回自己。
怎么看?
权限显示:所有者的执行位(x)变成s(比如-rwsr-xr-x),如果是大写S,说明没实际执行权限,SUID 无效。
注意
只能给可执行文件用,给目录用没用。
别乱给bash这种程序设 SUID,不然普通用户能直接变 root,太危险!
②、SGID(Set Group ID):团队共享好帮手
核心作用
分两种情况:
对可执行文件:执行时临时获得文件所属组的权限(类似 SUID,但借的是组权限)。
对目录(更常用):目录里新建的文件 / 子目录,自动继承目录的所属组(而不是创建者自己的组)。
生活化理解
团队共享文件夹/team设了 SGID,不管谁在里面新建文件,都自动属于团队组,所有人都能查看修改,不用手动改权限。
权限显示:组的执行位(x)变成s(比如drwxr-sr-x),大写S表示无效。
③、Sticky Bit(粘滞位):公共区域的规矩
核心作用
只对目录有效,规定:目录里的文件,只有自己、目录主人或 root 能删,别人再有权限也不能动你的文件。
生活化理解
系统的/tmp目录是公共临时文件夹,谁都能放文件,但你只能删自己的,不能删别人的,避免误删。
权限显示:其他人的执行位(x)变成t(比如drwxrwxrwt),大写T表示无效。
简单总结表
权限名 |
作用对象 |
核心功能 |
符号特征 |
SUID |
可执行文件 |
执行时临时借文件主人的权限 |
所有者 x 位变s |
SGID |
目录 / 可执行文件 |
新建文件自动归目录的组;执行时借组权限 |
组 x 位变s |
Sticky Bit |
目录 |
只能删自己的文件,保护公共目录 |
其他人 x 位变t |
隐藏权限——ACL权限(了解):
可以限制root的权限操作。保护重要文件,保险作用。
lsattr:查看文件隐藏权限
chattr:修改文件隐藏权限
常用权限:直接+或-
A:文件或目录的atime不可被修改
S:硬盘I/O同步选项,功能类似sync。Linux默认为异步I/O。
a:只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。(强制保护,不能覆盖“>”,只能用“>>”追加内容)
d:(了解)文件不能成为dump程序的备份目标。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。锁定文件。(不能追加)
+:添加权限
-:删除权限
=:赋予权限
#buff:写入缓存,存放在内存中等待写入的缓存。sync命令可以写入磁盘。
#cache:读出缓存,从磁盘中预先加载的数据,等待被程序运行。
ACL权限(了解):
·三类用户:user所有者,group同组人员,other其他人。
ACL(访问控制列表):单独赋予某个用户对文件的rwx相关权限。
用法:
setfacl:
命令选项:
-m :设置acl
-x :指定删除,删除指定的acl
-b :删除所有的acl
# 获取文件的acl权限
getfacl filename
# 该用户设置acl权限
setfacl -m u:tom:rw- filename
#删除用户acl权限
setfacl -x u:tom filename
#删除文件所有acl权限
setfacl -b filename
#对目录设置acl权限
setfacl -m d:u:tom:rwx dir
42.chown:修改权限的所有者(修改属主)
用法:chown 属主.属组 文件
chown 属主.属组 -R 目录
改所有者:用 sudo chown 用户名 文件名。
改组:用 用户名:组名 组合方式。
改目录及子文件:加 -R 递归修改。
# 创建用户
useradd tom
useradd chen
# 给用户设置密码
passwd tom
passwd chen
# 切换用户
su tom # 在当前目录切换到该用户
su - tom #在切换用户时,自动cd用户家目录,加载用户配置
# 切换root用户
su root
su - root
su -
# root用户切换到其他用户不需要密码
# root可以修改所有用户的密码
# 普通用户只能修改自己的密码
# 普通用户切换到其他用户(包括root)都需要密码
# 退出当前用户,返回之前的用户或退出登录
exit
#chmod:修改文件权限
普通用户可以修改自己的文件,root可以修改所有的文件
#chown:修改文件的所有者(属主)
#root才能修改其他用户文件的属主和属组
43.chgrp:修改文件属组
组(group):默认组、附加组。可以把多个用户添加到同一个小组当中,用于批量权限管理。
# chgrp修改属组
chgrp root filename
#chmod可以改组权限
chmod g=rw filename
44.sudo:提权,提升权限,让普通用户临时使用root权限执行命令
# 使用root身份修改/etc/sudoers文件,将普通用户添加到该文件并进行设置。
vim /etc/sudoers
# 在第101行
zj ALL=(ALL) ALL
# 切换回普通用户
su - zj
# 使用sudo执行关机命令
sudo reboot
#限制用户的关机命令
%minsudev ALL=(ALL) NOPASSWD:ALL,!/usr/sbin/reboot
# 使用sudo修改root的密码
sudo passwd (任何人)
sudo权限免密码:%tom ALL=(ALL) NOPASSWD:ALL
可以重启的命令不止一个,我们添加命令:/sbin/reboot
%tom ALL=(ALL) NOPASSWD:ALL,!/usr/bin/reboot,!/sbin/reboot
给一个组添加sudo权限:%tom ALL=(ALL) ALL
给用户添加sudo权限:tom ALL=(ALL:ALL) ALL
#限制sudo用户提权为root用户
%tom ALL=(ALL) NOPASSWD:ALL,!/bin/su