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只對二進制文件生效!?。?br style="margin: 0px;padding: 0px;max-width: 100%"/>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.www58058.com/30602

(0)
sjfbjssjfbjs
上一篇 2016-08-08 16:13
下一篇 2016-08-08 16:14

相關推薦

  • BIND在生產環境中的創建

    一、實驗:BIND二級域的搭建(均以yum安裝bind),從實驗圖中可以看出需要五臺虛擬機進行測試 一、準備五臺虛擬機 二、配置root服務器 1、YUM安裝bind的程序 2、配置bind的主配置文件 3、配置區域文件 4、為了實驗的方便進行,把防火墻和SElinux關閉,并留意區域文件的屬主屬組 5、檢查named的主配置文件和區域文件是否語法錯誤,并啟…

    Linux干貨 2016-10-05
  • mysql基礎

      mysql基礎 數據模型: 數據模型:層次模型、網狀模型、關系模型、…… 關系模型: 二維關系:表     行:row, entity     列:colume, attribution 索引:數據結構,輔助完成數據查找;  &nbsp…

    Linux干貨 2016-11-01
  • LVS之nat&dr

    Evernote Export 負載均衡集群設計時的要點:        (1)session保持            session sticky(ip hash)            sess…

    Linux干貨 2016-12-01
  • 企業面試題

    要求: 將一下數據進行排序(字母部分已小到大排序) 101.37.8.249 wz417-419/wz119-125/wz7-16/wz571/wz544/wz1-6101.37.21.19 wz545/wz453-456/wz441-444116.62.4.21 wz106-118/wz514-516/wz581/wz190-199/wz572101.37…

    Linux干貨 2017-06-27
  • 文本處理(1)

    文本處理工具最全整理上半部

    Linux干貨 2018-03-15
  • 推薦-Nginx Rewrite的應用-根據訪問平臺做簡單跳轉

    Nginx Rewrite的應用-根據訪問平臺做簡單跳轉 Nginx Rewrite的應用-根據訪問平臺做簡單跳轉 Rewrite模塊簡介 Rewrite的配置 使用不同平臺進行測試 配置參數詳解 Rewrite模塊簡介    Rewrite最主要的作用就是對URL進行重寫,即重定向。舉個簡單的例子,我們用電腦打開淘寶顯示出的頁面與手機打開顯示出的頁面,或者…

    Linux干貨 2016-03-27
欧美性久久久久