SetUID
1) SetUID 是什么
SetUID 的功能可以这样理解:

  • 只有可以执行的二进制程序才能设定 SUID 权限
  • 命令执行者要对该程序拥有 x(执行)权限
  • 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
  • SetUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
[root@iZbp145axkc98giot5b448Z ~]# ll /etc/passwd
-rw-r--r-- 1 root root 1066 Apr  7 21:56 /etc/passwd
[root@iZbp145axkc98giot5b448Z ~]# ll /etc/shadow
---------- 1 root root 704 Apr  7 21:56 /etc/shadow

/usr/bin/passwd 命令拥有特殊权限 SetUID , 也就是在属主的权限位的执行权限上是 s。 可以这样来理解它: 当一个具有执行权限的文件设置 SetUID 权限后,用户执行这个文件时将以文件所有者的
身份执行。/usr/bin/passwd 命令具有 SetUID 权限,所有者为 root (Linux 中的命令默认所有者都是 root),也就是说当普通用户使用 passwd 更改自己密码的时候,那一瞬间突然灵魂附体了,实际是在用 passwd
命令所有者 root 的身份在执行 passwd 命令, root 当然可以将密码写入/etc/shadow 文件 ,所以普通用户也可以修改/etc/shadow 文件,命令执行完成后该身份也随之消失

如果取消 SetUID 权限,则普通用户就不能修改自己的密码了

4) 有几点建议:
关键目录应严格控制写权限。比如“/”、“/usr”等;
用户的密码设置要严格遵守密码三原则;
对系统中默认应该具有 SetUID 权限的文件作一列表,定时检查有没有这之外的文件被设置了 SetUID 权限。

[root@iZbp145axkc98giot5b448Z ~]# find / -perm -4000 -o -perm -2000
/usr/libexec/dbus-1/dbus-daemon-launch-helper
/usr/libexec/openssh/ssh-keysign
/usr/libexec/utempter/utempter
/usr/sbin/postdrop
/usr/sbin/usernetctl
/usr/sbin/netreport
/usr/sbin/pam_timestamp_check
/usr/sbin/postqueue
/usr/sbin/unix_chkpwd
/usr/bin/gpasswd
/usr/bin/write
/usr/bin/umount
/usr/bin/chsh
/usr/bin/at
/usr/bin/crontab
/usr/bin/mount
/usr/bin/chage
/usr/bin/sudo
/usr/bin/wall
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/su
/usr/bin/vim
/usr/bin/pkexec
/usr/bin/chfn
/usr/bin/ssh-agent
/usr/lib/polkit-1/polkit-agent-helper-1
/var/log/journal

SetGID
1)针对文件的作用
SGID 即可以针对文件生效, 也可以针对目录生效,这和 SUID 明显不同。如果针对文件, SGID 的含义如下:

  • 只有可执行的二进制程序才能设置 SGID 权限
  • 命令执行者要对该程序拥有 x(执行)权限
  • 命令执行在执行程序的时候,组身份升级为该程序文件的属组
  • SetGID 权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 1838850 1 月 20 04:29 /var/lib/mlocate/mlocate.db

发现属主权限是 rw,属组权限是 r,但是其他人权限是 0:

[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x 1 root slocate 35612 8 月 24 2010 /usr/bin/locate

当普通用户 user1 执行 locate 命令时,会发生如下事情:

  • /usr/bin/locate 是可执行二进制程序,可以赋予 SGID
  • 执行用户 user1 对/usr/bin/locate 命令拥有执行权限
  • 执 行 /usr/bin/locate 命 令 时 , 组 身 份 会 升 级 为 slocate 组 , 而 slocate 组 对/var/lib/mlocate/mlocate.db 数据库拥有 r 权限,所以普通用户可以使用 locate 命令查询mlocate.db 数据库命令结束, user1 用户的组身份返回为 user1 组

2)针对目录的作用

如果 SGID 针对目录设置,含义如下:

  • 普通用户必须对此目录拥有 r 和 x 权限,才能进入此目录
  • 普通用户在此目录中的有效组会变成此目录的属组
  • 若普通用户对此目录拥有 w 权限时,新建的文件的默认属组是这个目录的属组

这样写的实在太难看明白了,举个例子:

[root@iZbp145axkc98giot5b448Z tmp]# mkdir dtest
[root@iZbp145axkc98giot5b448Z tmp]# ll
total 6504
srwxr-xr-x 1 root     root           0 Apr  7 22:12 Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>
drwxr-xr-x 3 root     root        4096 Apr  7 21:38 aliyun_assist_cb6fdc57727f94b9206741570ae89832
-rw-r--r-- 1 root     root     6620890 Apr  7 21:38 aliyun_assist_cb6fdc57727f94b9206741570ae89832.zip
drwxr-xr-x 2 root     root        4096 Apr  8 14:03 dtest
drwx------ 3 elsearch elsearch    4096 Apr  7 22:32 elasticsearch.z6k2RXwo
drwxr-xr-x 2 elsearch elsearch    4096 Apr  7 22:32 hsperfdata_elsearch
drwxr-xr-x 2 root     root        4096 Apr  7 22:31 hsperfdata_root
drwx------ 3 root     root        4096 Apr  7 22:12 systemd-private-47ba1a30f74443359eee1235e77c3628-chronyd.service-CPTRMh
drwx------ 2 root     root        4096 Apr  7 21:52 tmp.PhvlqNXdZM
drwx------ 2 root     root        4096 Apr  7 21:45 tmp.QaZeCT0j34
drwx------ 2 root     root        4096 Apr  7 22:13 tmp.uD7vBpaEIG
[root@iZbp145axkc98giot5b448Z tmp]# chmod g+s dtest
[root@iZbp145axkc98giot5b448Z tmp]# ll
total 6504
srwxr-xr-x 1 root     root           0 Apr  7 22:12 Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>
drwxr-xr-x 3 root     root        4096 Apr  7 21:38 aliyun_assist_cb6fdc57727f94b9206741570ae89832
-rw-r--r-- 1 root     root     6620890 Apr  7 21:38 aliyun_assist_cb6fdc57727f94b9206741570ae89832.zip
drwxr-sr-x 2 root     root        4096 Apr  8 14:03 dtest
drwx------ 3 elsearch elsearch    4096 Apr  7 22:32 elasticsearch.z6k2RXwo
drwxr-xr-x 2 elsearch elsearch    4096 Apr  7 22:32 hsperfdata_elsearch
drwxr-xr-x 2 root     root        4096 Apr  7 22:31 hsperfdata_root
drwx------ 3 root     root        4096 Apr  7 22:12 systemd-private-47ba1a30f74443359eee1235e77c3628-chronyd.service-CPTRMh
drwx------ 2 root     root        4096 Apr  7 21:52 tmp.PhvlqNXdZM
drwx------ 2 root     root        4096 Apr  7 21:45 tmp.QaZeCT0j34
drwx------ 2 root     root        4096 Apr  7 22:13 tmp.uD7vBpaEIG
[root@iZbp145axkc98giot5b448Z tmp]# ll -d dtest/
drwxr-sr-x 2 root root 4096 Apr  8 14:03 dtest/
[root@iZbp145axkc98giot5b448Z tmp]# cd dtest/
[root@iZbp145axkc98giot5b448Z dtest]# ll
total 0
[root@iZbp145axkc98giot5b448Z dtest]# cd ..
[root@iZbp145axkc98giot5b448Z tmp]# chmod 777 dtest/
[root@iZbp145axkc98giot5b448Z tmp]# ll
total 6504
srwxr-xr-x 1 root     root           0 Apr  7 22:12 Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>
drwxr-xr-x 3 root     root        4096 Apr  7 21:38 aliyun_assist_cb6fdc57727f94b9206741570ae89832
-rw-r--r-- 1 root     root     6620890 Apr  7 21:38 aliyun_assist_cb6fdc57727f94b9206741570ae89832.zip
drwxrwsrwx 2 root     root        4096 Apr  8 14:03 dtest
drwx------ 3 elsearch elsearch    4096 Apr  7 22:32 elasticsearch.z6k2RXwo
drwxr-xr-x 2 elsearch elsearch    4096 Apr  7 22:32 hsperfdata_elsearch
drwxr-xr-x 2 root     root        4096 Apr  7 22:31 hsperfdata_root
drwx------ 3 root     root        4096 Apr  7 22:12 systemd-private-47ba1a30f74443359eee1235e77c3628-chronyd.service-CPTRMh
drwx------ 2 root     root        4096 Apr  7 21:52 tmp.PhvlqNXdZM
drwx------ 2 root     root        4096 Apr  7 21:45 tmp.QaZeCT0j34
drwx------ 2 root     root        4096 Apr  7 22:13 tmp.uD7vBpaEIG
[root@iZbp145axkc98giot5b448Z tmp]# useradd wgr
[root@iZbp145axkc98giot5b448Z tmp]# su - wgr
[wgr@iZbp145axkc98giot5b448Z ~]$ cd /tmp
[wgr@iZbp145axkc98giot5b448Z tmp]$ ll
total 6504
srwxr-xr-x 1 root     root           0 Apr  7 22:12 Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>
drwxr-xr-x 3 root     root        4096 Apr  7 21:38 aliyun_assist_cb6fdc57727f94b9206741570ae89832
-rw-r--r-- 1 root     root     6620890 Apr  7 21:38 aliyun_assist_cb6fdc57727f94b9206741570ae89832.zip
drwxrwsrwx 2 root     root        4096 Apr  8 14:03 dtest
drwx------ 3 elsearch elsearch    4096 Apr  7 22:32 elasticsearch.z6k2RXwo
drwxr-xr-x 2 elsearch elsearch    4096 Apr  7 22:32 hsperfdata_elsearch
drwxr-xr-x 2 root     root        4096 Apr  7 22:31 hsperfdata_root
drwx------ 3 root     root        4096 Apr  7 22:12 systemd-private-47ba1a30f74443359eee1235e77c3628-chronyd.service-CPTRMh
drwx------ 2 root     root        4096 Apr  7 21:52 tmp.PhvlqNXdZM
drwx------ 2 root     root        4096 Apr  7 21:45 tmp.QaZeCT0j34
drwx------ 2 root     root        4096 Apr  7 22:13 tmp.uD7vBpaEIG
[wgr@iZbp145axkc98giot5b448Z tmp]$ cd dtest
[wgr@iZbp145axkc98giot5b448Z dtest]$ ll
total 0
[wgr@iZbp145axkc98giot5b448Z dtest]$ touch abc
[wgr@iZbp145axkc98giot5b448Z dtest]$ ll
total 0
-rw-rw-r-- 1 wgr root 0 Apr  8 14:05 abc
[wgr@iZbp145axkc98giot5b448Z dtest]$

 Sticky BIT
Sticky BIT 粘着位,也简称为 SBIT。 SBIT 目前仅针对目录有效,它的作用如下:

  • 粘着位目前只对目录有效
  • 普通用户对该目录拥有 w 和 x 权限,即普通用户可以在此目录拥有写入权限
  • 如果没有粘着位,因为普通用户拥有 w 权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了 root 可以删除所有文件,普通用户就算拥有 w 权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
[test1@iZbp145axkc98giot5b448Z test]$ ll
total 0
-rw-r--r-- 1 root  root  0 Apr  8 14:22 aaa
-rw-r--r-- 1 root  root  0 Apr  8 14:22 bbb
-rw-rw-r-- 1 wgr   wgr   0 Apr  8 14:24 ccc
-rw-rw-r-- 1 wgr   wgr   0 Apr  8 14:24 ddd
-rw-rw-r-- 1 test1 test1 0 Apr  8 14:25 eee
-rw-rw-r-- 1 test1 test1 0 Apr  8 14:25 fff
[test1@iZbp145axkc98giot5b448Z test]$

[root@iZbp145axkc98giot5b448Z test]# rm -f ccc
[root@iZbp145axkc98giot5b448Z test]# ll
total 0
-rw-r--r-- 1 root  root  0 Apr  8 14:22 aaa
-rw-r--r-- 1 root  root  0 Apr  8 14:22 bbb
-rw-rw-r-- 1 wgr   wgr   0 Apr  8 14:24 ddd
-rw-rw-r-- 1 test1 test1 0 Apr  8 14:25 eee
-rw-rw-r-- 1 test1 test1 0 Apr  8 14:25 fff
[root@iZbp145axkc98giot5b448Z test]#

[wgr@iZbp145axkc98giot5b448Z test]$ touch ddd
[wgr@iZbp145axkc98giot5b448Z test]$ ll
total 0
-rw-r--r-- 1 root  root  0 Apr  8 14:22 aaa
-rw-r--r-- 1 root  root  0 Apr  8 14:22 bbb
-rw-rw-r-- 1 wgr   wgr   0 Apr  8 14:24 ddd
-rw-rw-r-- 1 test1 test1 0 Apr  8 14:25 eee
-rw-rw-r-- 1 test1 test1 0 Apr  8 14:25 fff
[wgr@iZbp145axkc98giot5b448Z test]$ rm -rf eee
rm: cannot remove ‘eee’: Operation not permitted
[wgr@iZbp145axkc98giot5b448Z test]$ touch qqq
[wgr@iZbp145axkc98giot5b448Z test]$

以上所有操作均提示Operation not permitted,表明Sticky权限已发挥作用.普通用户在设定了Sticky位的目录下创建的子目录不会继承这个Sticky权限,所以要注意设定好自己目录的权限.

Linux的文件特殊权限相关推荐

  1. linux更改文件夹权限_Linux 一些重点知识,整理的很全面,有必要收藏

    我们都知道Linux是一个多用户,多任务的系统.这也是它的最优秀的特性,也就是说,可能有很多人同时在系统上工作,因此请不要强行关机. 同时,为了保护每个人的隐私和工作环境,对于某个文档(文件,目录), ...

  2. 【Linux】文件特殊权限 SUID/SGID/Sticky Bit

    linux中除了常见的读(r).写(w).执行(x)权限以外,还有3个特殊的权限,分别是setuid.setgid和stick bit 1.setuid.setgid 先看个实例,查看你的/usr/b ...

  3. linux web文件夹权限设置,WEB文件目录权限设置与修改方法

    烈火网(LieHuo.Net)教程 很多web程序大多数在上传完程序并准备执行安装脚本的时候都需要修改部分目录和文件的权限,比如安装和升级 Discuz! 需要修改 ./attachments../f ...

  4. Linux关于文件的权限笔记

    1.调整文件的权限命令:chmod Linux的每个文件都定义了文件的拥有者:u(user).拥有组:g(group).其他人:o(others)权限,对应的权限用rwx的组合来定义.使用chmod命 ...

  5. linux域文件夹权限设置密码,如何配置Linux 文件权限(经典详细版本: rwxst)

    在Linux中,Linux文件权限一共分为三种.本文将向读者展示如何正确配置Linux文件权限. 三种特殊权限简介 SUID 当一个设置了SUID 位的可执行文件被执行时,该文件将以所有者的身份运行, ...

  6. linux mysql 文件夹权限_Linux 中文件和文件夹获取 MySQL 权限(SELinux)

    今天在 Linux 系统上移动 MySQL 的数据库目录 配置如下: /etc/my.cnf [mysqld] datadir=/home/mysql socket=/var/lib/mysql/my ...

  7. linux哪个文件夹不能乱改,Linux的文件夹权限如何更改

    支持通配符. 参数: - R 递归式地改变指定目录及其下的所有子目录和文件的拥有者. - v 显示chown命令所做的工作. 例1:把文件shiyan.c的所有者改为wang. $ chown wan ...

  8. Linux更改文件的权限

    Linux下一切皆文件,对文件的权限管理是Linux安全的一个重要特性,那么修改文件的权限是一个必要的技能了. 一.命令chown(change owner)-更改文件的所有者 语法:chown [- ...

  9. Linux目录文件的权限,默认权限,隐藏权限

    Linux系统的文件权限,规定了拥有者(owner),所属组成员(group )以及其他成员(others) 三种身份群体的权限--读(r)写(w)执行(x) Linux权限 文件和目录的权限 文件属 ...

  10. 【Linux】文件的权限

    权限笼统分为两种一种是人的权限,一种是文件的访问权限.而root(管理员)具有Linux最高的权限,最多只有一个.而普通用户可以有多个,要受到权限的约束. 一.切换root权限 既然root是最大的权 ...

最新文章

  1. 【r语言】如何将直方图和一条曲线画在一起(叠在一张图上)
  2. CI下载与安装_基础配置_MVC
  3. 看我打脸Message Pack
  4. Java jxl在excel模板中动态加入数据,及前端下载excel的例子
  5. bzoj 1597: [Usaco2008 Mar]土地购买【斜率优化】
  6. python用一行代码编写一个回声程序_Python源码分析2 - 一个简单的Python程序的执行...
  7. Tcpdump 超级详细的用法
  8. Java基础面试题:常见的异常类有哪些?
  9. linux创建线程pthread_create函数
  10. Funcode-黄金矿工
  11. python spss_SPSS python教程:[5]SpssClient简介
  12. QQ飞车手游设计分析
  13. JMeter JDBC Request(实现往mysql批量造数)
  14. 如何用计算机放出音乐,怎么在电脑上播放音乐
  15. osg学习(四十八)Windows Error #2000
  16. 完全卸载Myeclipse
  17. FHE学习笔记 #1 部分抽象代数名词
  18. C语言库函数strstr查找字符串失败问题
  19. ROS导航小车经验总结
  20. Python 生成8位必含数字、大小写字母的字符串(密码)

热门文章

  1. flex布局——flex布局
  2. laravel没有vendor文件夹的解决方法
  3. 学堂在线-清华大学-操作系统实验Lab1【练习1-2】
  4. clamp.js 使用
  5. MySQL for mac傻瓜式教程
  6. LiteOS学习(一)任务
  7. 敏捷个人-认识自我,管理自我 v0.8.pdf 下载
  8. 中国首富许家印入局FF 贾跃亭造车这事儿要成?
  9. 奥利给!2020 年必看的100 条忠告
  10. 基础不牢靠,何以争朝夕?Java基础面试82道详细解析(更新中)