UID SGID与chmod 777的一些问题

先来看问题

UID SGID与chmod 777的一些问题

问题来了:
echo的行为返回是对的还是vi是对的?

现场分析:

  1. vi 和 echo 都被设置为SGID权限。

  2. abc文件所在的父目录权限是777

  3. echo无法写abc文件,而vi是可以的

当时被问到这个问题时,我也是一征,怎么会这样。加之SUID,SGID在企业应用很少,如此这么久早忘了一干二净,只是赶紧去补课~,但经过30MIN后依然没有找到问题所在,不名有些尴尬。后来在群里和朋友们一起讨论下后发现了问题所在。我们这里一一道来。

一道:
因为该父目录权限是777,所以该目录是任何人可写,又因为该目录只是普通的777权限目录,没有ST保护,所以该目录下的文件是任何人可写可删可改的。正做简单演示:


    1. 先增加两个普通用户stanleytom

[root@app1 ~]# id stanley
uid=501(stanley) gid=501(stanley) groups=501(stanley)
[root@app1 ~]# id tom
uid=502(tom) gid=502(tom) groups=502(tom)

    1. 创建/root_test_dir 目录并赋权为777

[root@app1 ~]# mkdir /root_test_dir
[root@app1 ~]# chmod 777 /root_test_dir
[root@app1 ~]# ll /root_test_dir/

UID SGID与chmod 777的一些问题


    1. 分别登录 stanleytom用户,并在/root_test_dir目录下创建以自己姓名命名的文件stanley.txt 和 tom.txt,并分别编辑内容

###stanley用户
[stanley@app1 ~]$ cd /root_test_dir/
[stanley@app1 root_test_dir]$ touch stanley.txt
[stanley@app1 root_test_dir]$ echo -e "###Notice:\nThis is stanley's file" > stanley.txt
###tom用户
[tom@app1 ~]$ cd /root_test_dir/
[tom@app1 root_test_dir]$ touch tom.txt
[tom@app1 root_test_dir]$ echo -e "###Notice:\nThis is tom's file" > tom.txt 
###root用户
[root@app1 ~]# ll /root_test_dir/
[root@app1 ~]# cat /root_test_dir/{stanley.txt,tom.txt}


为方便实现,分别使用对应用户各自复制一份文件出来

###stanley用户
[stanley@app1 root_test_dir]$ cp stanley.txt stanley1.txt  
###tom用户
[tom@app1 root_test_dir]$ cp tom.txt tom1.txt



    1. 确认777目录权限。使用stanley编辑并保存tom的文件。
      UID SGID与chmod 777的一些问题

      不理它,继续编写
      UID SGID与chmod 777的一些问题

      提示要加强制保存。输入:wq!发现是可以强制保存的。同时文件的权限会被强制修改为stanley的文件。这个大家一定要留意!!!!!
      UID SGID与chmod 777的一些问题

/tmp目录之所以不会出现这样的问题是因为/tmp目录添加了ST粘贴位,所以不会出现这样的问题

UID SGID与chmod 777的一些问题


    1. 验证完前面的问题后,我们来模拟viecho 的SGID权限(同时这里也要声明的是SUID,SGID只对二进制文件生效!!)
      UID SGID与chmod 777的一些问题


    1. 用stanley分别使用echovi命令来编辑tom的文件来模拟图中的问题
      开始之前再来验证下用户属主属组是否有特殊权限,/root_test_dir权限是否被特殊设置,文件的权限都是ok的。一切ok模拟第一幅图中的问题。
      UID SGID与chmod 777的一些问题

      执行echo命令:

[stanley@app1 root_test_dir]$ echo 'stanley need tom1.txt file too!' >> tom1.txt

UID SGID与chmod 777的一些问题

执行vi命令:
vi tom1.txt文件后强制编辑后wq!强制保存。

大家可以看到问题确认是这样的。这是为什么呢?

最开始的时候,个人也纳闷了很久,折腾了30来分钟也没有搞定。但丝毫没有怀疑是Linux系统的问题。所以问题肯定还是出在权限的问题上。

几经折腾后,最终忽略了一个问题,同时对SUID,SGID的概念没有深入理解。

  • 问题1: vi是的工作原理是先写.swap临时文件再覆盖原文件的。因为父目录是777,所以任何用户都可以覆盖其它人的文件


  • 问题2:我们赋予了/bin/echo /bin/vi SGID权限,那为什么文件还是不能被重写呢?
    UID SGID与chmod 777的一些问题

SGID的权限赋予的是vi 和 echo两个命令,而且这两个命令也确实是被正常执行了。只是/root_test_dir目录下的文件没有权限被重写而已。

大家试下在/root_test_dir目录下,mv是可以被覆盖其它人的文件的。
UID SGID与chmod 777的一些问题

所以,这SUID,SGID和目录777权限的问题,大家应该清楚了吧。

原创文章,作者:sjfbjs,如若转载,请注明出处:http://www.178linux.com/30602

(0)
sjfbjssjfbjs
上一篇 2016-08-08
下一篇 2016-08-08

相关推荐

  • sed行编辑器与vim编辑器

    一、sed行编辑器   1、简介:sed的本身也是一个管道命令,可以分析标准输入,还可以将数据进行替换、删除、新增、选取特定行的功能   2、工作原理:sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着用sed命令处理缓冲区中的内容…

    Linux干货 2016-08-11
  • HAProxy 入门及基础负载应用

    A、首介 。。。         HAProxy——开放源代码软件,是一款代理服务器和伪4层的负载均衡软件解决方案。基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持高并发链接,它的工作模式可以将其简单而安全地整合到当前的服务架构中,同时可以保护你的WEB服务器不暴露到…

    Linux干货 2017-05-17
  • 前三天基础-Linux文件系统概论

    Linux之我见     在2016农历丙申年2016年猴年,对于小白的我来说接触到了江湖流传的武功秘籍之-Linux心法,第一次接触到命令行,知道在键盘上随便敲击命令就可以满屏跑数据,就像看过的美国大片里黑客帝国里面的画面,感觉学会好后可以装逼了,废话不多说了,允许在下斗胆介绍Linux文件系统。     &nbsp…

    Linux干货 2016-03-24
  • sed讲解与使用

            sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理…

    Linux干货 2016-08-15
  • Linux用户、组管理和正则表达式的基础命令

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何权限 [root@localhost skel]# cp -r /etc/skel /home/tuser1 [root@localhost skel]# ls -al /home/tuser1 total 12 drwxr-xr-x.…

    Linux干货 2017-07-20
  • 硬链接与软链接

    引言: 链接,一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。 Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。 Inode译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。 Block:存放档案内容数据的地方。 &n…

    Linux干货 2016-10-20