Linux的特殊权限sticky、sgid与数据安全

简介:

    Linux 系统中有一个特殊的目录 /tmp 称为临时目录,所有用户都可以在该目录里创建文件,那么就意味着 /tmp目录的权限是 rwxrwxrwx 那么,任何一个用户都可以删除该目录中任意一个文件,这是不允许的。Linux 使用特殊权限sticky: 沾滞位(冒险位),实现了不能删除属主不是自己(发起删除动作的用户)的文件。但是,由于普通用户的umask值为: 0002. 普通用户在 /tmp创建一个目录,并把自己的临时文件存放在该目录中就不安全了。Sticky 只能保证直属于 /tmp 目录中的文件的安全,并不能保证/tmp目录下的子目录的文件数据的安全。

wKioL1PKYG7BD6UlAABpuzco6sI791.jpg

1
2
[admin@Node1 ~]$  umask
0002

使用普通用户 system /tmp 目录下创建一个 mytest目录。

1
2
3
[system@Node1 tmp]$  mkdir  /tmp/mytest
[admin@Node1 tmp]$ ll -d mytest
drwxrwxr-x. 3 system system 4096 Jul  4 15:18 mytest

说明:

     由于,普通用户的umask 值为:0002,所以创建的目录权限表示为:rwxrwxr-x.

用户能不能在一个目录中创建和删除文件,取决于该用户在该目录中有没有写(r)权限。我们也可以,这样理解:Linux的一个重要哲学思想之一是“一切皆文件”。目录也是文件中的一种。把目录看成一个文件。那么,用户往目录中创建文件,就相当于往该目录文件中添加数据行,删除该目录中的文件就相当于从目录文件中删除数据行。所以,用户要往该目录(目录文件)中创建文件或删除文件,得要有该目录的写权限才可以的。

     根据“权限匹配模型”只要发起创建文件(touch,vim或删除文件(rm)进程的用户的属组或附加组是system.那么该用户是可以删除或创建文件的。

下面来看看是不是跟分析的一样呢?

1、把用户:system 的基本组作为用户admin,hadoop 的附加组

这样用户:admin,hadoop就可以在mytest目录中创建文件了。

1
2
3
4
5
6
[root@Node1 tmp] # usermod -a -G systemadmin
[root@Node1 tmp] # usermod -a -G systemhadoop
[root@Node1 tmp] # id admin
uid=500(admin) gid=500(admin) groups =500(admin),501(system)
[root@Node1 tmp] # id hadoop
uid=4029(hadoop) gid=4029(hadoop) groups =4029(hadoop),501(system)

2、分别以admin  hadoop用户身份在/tmp/mytest目录中创建文件

1
2
[root@Node1 tmp] # su  – hadoop  -c  'touch/tmp/mytest/hadoop.txt'
[root@Node1 tmp] # su  - admin  –c  'touch /tmp/mytest/admin.txt'

3、查看是否能创建文件呢?

1
2
3
4
[root@Node1 tmp] # ll mytest
total 4
-rw-rw-r--. 1 admin  admin    0 Jul 17 16:51 admin.txt
-rw-rw-r--. 1 hadoop hadoop    0 Jul 17 16:51 hadoop.txt

分析:

    从【ls mytest】显示的结果,知道用户:admin,hadoop创建文件成功了。

4、再以 admin用户的身份删除属主为hadoop的文件和以hadoop用户的身份删除属主为admin的文件

删除前

1
2
3
4
5
[root@Node1 ~] # ll /tmp/mytest
total 4
-rw-rw-r--. 1 admin  admin    0 Jul 17 16:51 admin.txt
-rw-rw-r--. 1 hadoop hadoop    0 Jul 17 16:51 hadoop.txt
drwx------. 2 root   root  4096 Jul  4 15:18 skel

执行删除操作

1
2
[root@Node1 ~] # su - admin -c 'rm -r/tmp/mytest/hadoop.txt' 
[root@Node1 ~] # su - hadoop -c 'rm -r/tmp/mytest/admin.txt'

删除后的

1
2
3
[root@Node1 ~] # ll /tmp/mytest
total 4
drwx------. 2 root root 4096 Jul  4 15:18 skel

分析:

   从上述 ll /tmp/mytest】结果,得知。发起删除进程的用户 adminhadoop和被删除的文件所在目录的属组匹配的。它就可以删除

 

那么,看看管理员在 /tmp/mytest目录中创建的文件,普通用户是否可以删除呢?

以管理员的身份创建文件root.txt

1
2
3
4
5
[root@Node1 ~] # touch /tmp/mytest/root.txt
[root@Node1 ~] # ll /tmp/mytest
total 4
-rw-r--r--. 1 root root    0 Jul 19 15:50 root.txt
drwx------. 2 root root 4096 Jul  4 15:18 skel

以普通用户 admin 发起rm 进程去删除管理员创建的文件 root.txt

1
[root@Node1 ~] # su - admin -c 'rm -f/tmp/mytest/root.txt'

查看是否已经把文件删除掉

1
2
3
[root@Node1 ~] # ll /tmp/mytest
total 4
drwx------. 2 root root 4096 Jul  4 15:18 skel

分析:

    从【ll/tmp/mytest】显示的结果,知道。普通用户已经把属主是管理员(root)的且admin用户没有写(r)权限的root.txt文件删除了。再也再次证明:能否删除目录中的文件是取决于,发起删除进程的用户是否具有被删除文件所在的目录的写权限的。

 

从上面的实验结果得知:在/tmp/mytest 中创建的文件是没有任何安全性可言的。

普通用户的 umask = 0002。像上面的例子,admin用户的附加组为 systemhadoop用户的附加组也是systemSystem用户(它是属于system) /tmp创建的目录。该目录中的数据是非常不安全的。

如果,想要,发起删除进程的用户不能删除属主不是自己的文件,那就得给该目录添加特殊控制位 sticky(沾滞位)。添加方法如下:

1
增加 sticky 之前
1
2
[root@Node1 ~] # ll -d /tmp/mytest
drwxrwxr-x. 3 system system 4096 Jul 1916:01  /tmp/mytest

使用【chmod】命令添加 sticky 

1
[root@Node1 ~] # chmod o+t /tmp/mytest

添加 sticky 之后,目录的其它的权限就最后一位就变成了“t

1
2
[root@Node1 ~] # ll -d /tmp/mytest
drwxrwxr-t. 3 system system 4096 Jul 1916:01  /tmp/mytest

测试一下是否能够删除属主不是自己的文件呢?

/tmp/mytest目录中原有的文件

1
2
3
4
[root@Node1 ~] # ll /tmp/mytest
total 4
-rw-rw-r--. 1 hadoop hadoop    0 Jul 19 16:45 hadoop.txt
-rw-r--r--. 1 root   root     0 Jul 19 16:01 root.txt

 admin 用户身份发起rm进程删除属主为hadooproot用户的文件

1
2
3
4
[root@Node1 ~] # su - admin -c 'rm -f/tmp/mytest/hadoop.txt'
rm : cannot remove ` /tmp/mytest/hadoop .txt':Operation not permitted
[root@Node1 ~] # su - admin -c 'rm -f/tmp/mytest/root.txt'
rm : cannot remove ` /tmp/mytest/root .txt':Operation not permitted

    从结果:可以看得出不能删除属主不是自己的文件。使用sticky(沾滞位)保证了安全。

还是因为,普通用户的 umask = 0002, 那么用户创建的文件的权限是: rw-rw-r—

用户 adminhadoop的附加组为 system.所以,system 用户(属于system)/tmp

目录或在上面例子中的/tmp/mytest中创建的文件,用户 adminhadoop都可以修改的。

例子:

1
[root@Node1 ~] # su - system -c 'touch/tmp/system.txt'

admin用户的身份往属主为systemsystem.txt写数据

1
2
3
[admin@Node1 ~]$  echo  "I admin" >>  /tmp/system .txt
[admin@Node1 ~]$  cat  /tmp/system .txt
I admin

    加了,sticky 位显然不能删除属主不是自己的文件,但是还能修改属主不是自己的文件。这是由于我们创建文件时,文件的权限是根据“umask”的值来定的。所以不想让别的用户修改自己的文件,就把文件的属组和其它的写权限位去掉。

 

    由于用户adminhadoop的附加组为用户system的直接组systm.所以这两个用户都可以修改属主为system的文件。但是属主为admin的文件,用户hadoopsystem是无法修改的。

同样属主为hadoop用户的文件其它两个用户也是无法修改的。用户创建文件的时候,属主和属组就是创建用户的用户名和组名,和所在的目录没有关系。所以只有通过管理员去修改,属主为adminhadoop的文件的属组为system.这样就可以实现彼此间修改属主不是自己的文件了。那么可不可以通过某种方式,当用户一创建文件,该文件的属组就是文件所在目录的属组呢?这要通过“sgid”特殊权限来实现。

下面来看看是如何实现的:

1
2
3
4
5
6
7
8
9
10
11
12
[root@Node1 ~] # id system
uid=501(system) gid=501(system) groups =501(system)
[root@Node1 ~] # id admin
uid=500(admin) gid=500(admin) groups =500(admin),501(system)
[root@Node1 ~] # id hadoop
uid=4029(hadoop) gid=4029(hadoop) groups =4029(hadoop),501(system)
  
[root@Node1 ~] # ll /tmp/mytest
total 4
-rw-rw-r--. 1 admin  admin    0 Jul 19 17:15 admin.txt
-rw-rw-r--. 1 hadoop hadoop    0 Jul 19 16:45 hadoop.txt
-rw-rw-r--. 1 system system    0 Jul 19 16:52 system.txt

修改属主为hadoop的文件hadoop.txt,修改失败。

1
2
[admin@Node1 ~]$  echo  "I admin" /tmp/mytest/hadoop .txt
- bash /tmp/mytest/hadoop .txt: Permissiondenied

/tmp/mytest添加特殊权限 guid 后,看看是否能够彼此修改属主不是自己的文件?

添加特殊权限sgid 之前

1
2
[root@Node1 ~] # ll -d /tmp/mytest
drwxrwxr-t. 3 system system 4096 Jul 1917:15  /tmp/mytest

添加特殊权限 sgid

1
[root@Node1 ~] # chmod g+s /tmp/mytest

添加特殊权限 sgid 后,属组的第三位表示为“s

1
2
[root@Node1 ~] # ll -d /tmp/mytest
drwxrwsr-t. 3 system system 4096 Jul 1917:15  /tmp/mytest

看看添加 ugid之后创建文件,文件的属组有什么变化?

分别以不同的用户身份创建文件

1
2
3
[root@Node1 ~] # su - system -c 'touch/tmp/mytest/system.txt'
[root@Node1 ~] # su - admin -c 'touch/tmp/mytest/admin.txt'
[root@Node1 ~] # su - hadoop -c 'touch/tmp/mytest/hadoop.txt'

查看创建文件的结果,三个用户创建的文件的属组已经不再是创建文件用户的组名了,

而是文件所在目录的属组了。这样他们就可以彼此属主不是自己的文件了。

1
2
3
4
5
[root@Node1 ~] # ll /tmp/mytest
total 4
-rw-rw-r--. 1  admin   system   0 Jul 19 17:50 admin.txt
-rw-rw-r--. 1  hadoop  system    0 Jul 19 17:50 hadoop.txt
-rw-rw-r--. 1  system  system    0 Jul 19 17:50 system.txt

   根据“权限匹配模型”用户adminhadoop的附加为system.而文件的属组又是system.

且有读写权限。所以它们一定可以彼此修改属主不是自己的文件的,但不能删除属主不是自己的文件由于有 sticky 位。





     本文转自成长的小虫 51CTO博客,原文链接: http://blog.51cto.com/9528du/1440295 ,如需转载请自行联系原作者


相关文章
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
673 3
|
安全 Unix Linux
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
25000多字详细讲解,深度剖析权限管理核心。从基础权限到复杂的特殊权限,逐一拆解,无论你是零基础小白还是经验丰富的运维人员,都能在这里找到提升技能的关键知识,全面掌握 Linux 权限管理。还不快来看看?
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
|
安全 Linux 数据安全/隐私保护
【Linux】深入理解linux权限
本文深入解析Linux权限管理机制,涵盖权限概念、用户角色、文件属性及操作方法。文章分为前言、权限介绍、用户与角色、文件属性、权限修改及常见问题六大板块。详细说明了权限类型(r/w/x)、角色优先级、chmod/chown指令用法,以及目录权限、umask掩码、粘滞位等重点内容。掌握这些知识,可有效提升Linux系统安全性和灵活性,是管理员必备技能。喜欢的话别忘了点赞支持哦! ❤❤❤
895 6
|
安全 Linux 数据安全/隐私保护
Linux权限揭秘“Root与Sudo”
Root用户是Linux系统中的超级用户,拥有对系统的完全控制权。Root用户几乎可以执行任何命令,修改任何文件,甚至删除系统上的所有内容。因此,Root用户的使用需要非常谨慎,以避免潜在的安全风险。
825 6
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
563 1
linux特殊权限!!
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky
|
10月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1017 1
二、Linux文本处理与文件操作核心命令
|
10月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
640 137
|
10月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1593 58
|
9月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
1490 2