linux中文件的特殊許可權(SetUID/SetGID/SBIT)

来源:https://www.cnblogs.com/eternityz/archive/2020/02/29/12386469.html
-Advertisement-
Play Games

1.SetUID 一.SetUID的功能 SetUID主要是給命令提供一個root許可權,就是命令運行時擁有root用戶許可權,命令運行結束後root許可權消失 passwd cat 二.設定SetUID的方法 4代表SUID chmod 4755 文件名 chmod u+s 文件名 三.取消SetUID ...


1.SetUID

一.SetUID的功能

SetUID主要是給命令提供一個root許可權,就是命令運行時擁有root用戶許可權,命令運行結束後root許可權消失

1.只有執行的二進位程式才能設定SUID許可權

2.命令執行者要對該程式有用x(執行)許可權

3.命令執行者在執行該程式時獲得該程式文件屬主(所有者)的身份(在執行程式的過程中靈魂附體為文件的屬主)

4.SetUID許可權只在該程式執行過程中有效,也就是說身份改變只在程式執行過程中有效.

passwd

passwd命令擁有SetUID許可權,所以普通用戶可以修改自己的密碼
修改密碼是向/etc/shadow寫入數據的
但是/etc/shadow文件的許可權是---------,只有root用戶可以操作,普通用戶連看都不可以
[root@izm5e2q95pbpe1hh0kkwoiz ~]# ll /etc/shadow
---------- 1 root root 1097 Dec 10 17:02 /etc/shadow
所以passwd命令擁有SetUID許可權,讓普通用戶在修改自己密碼的時候,短暫擁有root許可權,
修改完密碼之後,root許可權也就沒有了
passwd命令中其他組擁有的許可權是r-x,普通用戶劃歸在其他組中,對應上面第2條,命令執行者要對該程式有用x(執行)許可權


[root@izm5e2q95pbpe1hh0kkwoiz ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

上面所有者的許可權是rws
s許可權代表的就是SetUID功能

cat

cat命令沒有SetUID許可權,所以普通用戶不能查看/etc/shadow文件內容

[eternity@izm5e2q95pbpe1hh0kkwoiz ~]$ ll /bin/cat
-rwxr-xr-x. 1 root root 54080 Nov  6  2016 /bin/cat
[eternity@izm5e2q95pbpe1hh0kkwoiz ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

二.設定SetUID的方法

4代表SUID

  • chmod 4755 文件名
  • chmod u+s 文件名
4代表給所有者設定SUID許可權

# 創建文件abc,許可權為644
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll abc
-rw-r--r-- 1 root root 0 Dec 13 10:06 abc
# 賦予文件abc SUID許可權
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# chmod u+s abc
# 此時顯示一個大寫的S,這是報錯的標識
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll abc
-rwSr--r-- 1 root root 0 Dec 13 10:06 abc

為什麼會報錯呢?
2.命令執行者要對該程式有用x(執行)許可權
第2條要求就是,命令執行者對程式擁有執行許可權,此時除了root之外其他人對命令都沒有執行許可權
所以就會報錯

怎麼解決???
    許可權需要設置為755,也就是rwxr-xr-x
    此時所有人都有x執行許可權
    
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll abc
-rwSr--r-- 1 root root 0 Dec 13 10:06 abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# chmod u-s abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll abc
-rw-r--r-- 1 root root 0 Dec 13 10:06 abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# chmod 755 abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# chmod u+s abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll abc
-rwsr-xr-x 1 root root 0 Dec 13 10:06 abc

三.取消SetUID的方法

  • chmod 755 文件名
  • chmod u-s 文件名

四.危險的SetUID

1.關鍵目錄應嚴格控制寫許可權.比如"/","/usr"等

2.用戶的密碼設置要嚴格遵守密碼三原則

3.對系統中預設應該具有SetUID許可權的文件作一個列表,定時檢查有沒有這個之外的文件被設置了SetUID許可權(通過shell腳本去查看)
假如對vim設定了SetUID許可權,則普通用戶就可以使用vim編輯任何的文件,造成系統問題

2.SetGID

一.SetGID針對文件的作用

對文件常用,對目錄不常用.對文件主要也就是二進位程式,主要是提升程式執行者的所屬組,使程式執行者擁有較高的許可權,跟SetUID類似.

1.只有可執行的二進位程式才能設置SGID許可權

2.命令執行者要對該程式擁有x(執行)許可權

3.命令執行在執行程式的時候,組身份升級為該程式文件的屬組

4.SetGID許可權同樣只在該程式執行過程中有效,也就是說組身份改變只在程式執行過程中有效.

locate

[root@izm5e2q95pbpe1hh0kkwoiz tmp]# whereis locate
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
# locate擁有SetGID許可權,用戶對locate有x執行許可權,
# 運行locate命令的時候用戶當前組可以切locate的所屬組slocate
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll /usr/bin/locate
-rwx--s--x 1 root slocate 40520 Apr 11  2018 /usr/bin/locate

# locate查詢時,查詢的文件是mlocate.db文件
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 7489360 Dec 13 03:07 /var/lib/mlocate/mlocate.db

# mlocate.db文件對其他人的許可權時---,沒有任何許可權

# 但是使用locate的時候,因為locate擁有SetGID許可權,
# 用戶在使用locate命令時可以使組用戶的當前組轉換為locate的組slocate,
# 而mlocate.db的所屬組也是slocate,slocate組對mlocate.db文件擁有r讀許可權,
# 所以此時用戶的所屬組為slocate,擁有了對mlocate.db的讀許可權

二.SetGID針對目錄的作用

1.普通用戶必須對此目錄擁有r和x許可權,才能進入此目錄

2.普通用戶在此目錄中的有效組會變成此目錄的屬組

3.若普通用戶對此目錄擁有w許可權時,新建的文件的預設屬組是這個目錄的屬組.
# 在/tmp文件夾下創建test文件夾
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# mkdir test
# 創建的預設許可權
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll -d test
drwxr-xr-x 2 root root 4096 Dec 13 10:55 test
# 給test目錄修改許可權為777,並增加SetGID許可權
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# chmod 2777 test
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll -d test
drwxrwsrwx 2 root root 4096 Dec 13 10:55 test
# 切換到eternity普通用戶
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# su - eternity
Last login: Fri Dec 13 09:51:16 CST 2019 on pts/0
# 進入/tmp文件夾
[eternity@izm5e2q95pbpe1hh0kkwoiz test]$ cd /tmp
# 在/tmp文件夾下創建aaa文件
[eternity@izm5e2q95pbpe1hh0kkwoiz tmp]$ touch aaa
# aaa文件的所屬組為eternity
[eternity@izm5e2q95pbpe1hh0kkwoiz tmp]$ ll aaa
-rw-rw-r-- 1 eternity eternity 0 Dec 13 10:56 aaa
# 進入/tmp/test文件夾
[eternity@izm5e2q95pbpe1hh0kkwoiz tmp]$ cd /tmp/test
# 創建bbb文件
[eternity@izm5e2q95pbpe1hh0kkwoiz test]$ touch bbb
# 此時bbb文件的所屬組為root組
# test文件夾有SetGID許可權,他的創建者所屬組為root
# 普通用戶在test文件夾下創建文件的時候,
# 文件的所屬組會預設的切換為創建test文件夾的用戶的所屬組,
# 此時是root用戶創建的test文件夾,root的組為root組,
# 所以新建的文件的組預設為root組
[eternity@izm5e2q95pbpe1hh0kkwoiz test]$ ll bbb
-rw-rw-r-- 1 eternity root 0 Dec 13 10:57 bbb

三.設定SetGID

  • chmod 2755 文件/文件名
  • chmod g+s 文件/文件名

四.取消SetGID

  • chmod 755 文件/文件名
  • chmod g-s 文件/文件名

3.Sticky BIT

一.SBIT粘著位作用

針對普通用戶,在有粘著位的文件夾下,每個用戶只能創建刪除自己的文件,不能刪除其他用戶的文件

1.粘著位目前只對目錄有效

2.普通用戶對該用戶有用w和x許可權,即普通用戶可以在此目錄擁有寫入全新啊

3.如果沒有粘著位,因為普通用戶擁有w許可權,則可以刪除此目錄下所有文件,包括其他用戶建立的文件.
一旦賦予了粘著位,
除了root可以刪除所有文件,普通用戶就算擁有w許可權,
也只能刪除自己建立的文件,但是不能刪除其他用戶建立的文件.

二.設置和取消粘著位

設置粘著位

  • chmod 1755 目錄名
  • chmod o+t 目錄名

    取消粘著位

  • chmod 777 目錄名
  • chmod o-t 目錄名

總結

SetUID只對文件生效
SetGID對文件和目錄生效
Sticky BIT只對目錄生效

擁有SetUID許可權顯示

rwsr-xr-x

即所有者的執行許可權x替換為了s

擁有SetGID許可權

rwxr-sr-x

即所屬組的執行許可權x替換為了s

擁有Sticky BIT許可權

rwxrwxrwt

即其他人的執行許可權x替換為了t

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C#中實現文件拖放打開的方法 設置Form屬性 AllowDrop = True; 在Form事件中 private void Form1_DragDrop(object sender, DragEventArgs e) { string localFilePath = ((System.Array ...
  • 修改註冊表,雙擊文件直接打開 string strProject = "Exec"; string p_FileTypeName =".cdb";//文件尾碼 string fileName = System.Windows.Forms.Application.ExecutablePath;// 獲 ...
  • 作者: 魔法軟糖 日期: 2020-02-27 引言 ************************************* .ini 文件是Initialization File的縮寫,即配置文件 。是windows的系統配置文件所採用的存儲格式。 它具有方便易用的特點,和註冊表的鍵值有著類似 ...
  • 最近開始試著玩Unity3D,要為場景中的物體編輯腳本。Unity3D推薦的腳本語言是C#,在Unity打開C#就會使用Visual Studio來進行編輯。 啟動Visual Studio之後註意到,Unity類和方法名都沒有代碼補全,而且Unity似乎也編譯不過: 在網上找了一圈,發現並沒有人遇 ...
  • 在 C 中 Object 是所有類的基類,所有的結構和類都直接或間接的派生自它。前面這段話可以說所有的 C 開發人員都知道,但是我相信其中有一部分程式員並不清楚甚至不知道我們常用的 ToString 、 Equals 和 GetHashCode 虛方法都來自於 Object 類,並且我們可以對它們進 ...
  • 前言 今天這篇博客是接我的上一篇博客 https://www.cnblogs.com/y-yp/p/12191258.html,繼續介紹一下MMF在Linux上的用法 ps:本來本地調試完case,想放到伺服器上跑跑看,結果竟然報"PlatformNotSupportedException",然後仔 ...
  • selinux概念 由美國國家安全局(NSA)和SCC聯合開發的,強制訪問控制的安全模塊。2000年以GPL開源,linux2.6內核後集成在內核里。 不啟用selinux時,訪問模式叫:DAC(discretionary access control)自由訪問控制 在DAC模式下的進程能夠訪問哪些 ...
  • 出現這個錯誤時,這多半是你所編譯的項目是在64位機器上生成32位的項目,你需要安裝對應的gcc 32位的庫;此時檢查gcc一定有-m32的存在; 你系統中gcc沒有安裝multilib 庫;使用這個庫可以在64位的機器上產生32位的程式或者庫文件; 你可以選擇:apt install gcc-mul ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...