atexit函數和兩種特殊文件許可權位

来源:http://www.cnblogs.com/lenomirei/archive/2016/06/20/5587721.html
-Advertisement-
Play Games

atexit函數 atexit函數的原型如下 void atexit(void (*func)(void)) 它是一個參數為返回值和參數均為空的函數指針的函數,含義是當前進程結束之前執行參數函數指針所指向的函數,使用的時候要在main中註冊,一次可以註冊很多函數,函數的執行順序與註冊的先後有關,關係 ...


  • atexit函數

atexit函數的原型如下 void atexit(void (*func)(void)) 它是一個參數為返回值和參數均為空的函數指針的函數,含義是當前進程結束之前執行參數函數指針所指向的函數,使用的時候要在main中註冊,一次可以註冊很多函數,函數的執行順序與註冊的先後有關,關係恰好相反,第一個註冊的函數反而是最後一個執行。下麵是執行實例。

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 
 5 void func1()
 6 {
 7   printf("this is func1\n");
 8 }
 9 
10 void func4()
11 {
12   printf("this is func4\n");
13 
14 }
15 
16 
17 void func3()
18 {
19   printf("this is func3\n");
20 }
21 
22 
23 void func2()
24 {
25   printf("this is func2\n");
26 }
27 
28 void func0()
29 {
30   printf("this is func0\n");
31 }
32 void func6()
33 {
34   printf("this is func6\n");
35 }
36 void a()
37 {
38   printf("this is a\n");
39 }
40 void z()
41 {
42   printf("this is z\n");
43 }
44 
45 
46 int main()
47 {
48   atexit(func3);
49   atexit(func1);
50   atexit(func2);
51   
52   atexit(func4);
53   atexit(func0);
54   atexit(func6);
55   atexit(a);
56   atexit(z);
57   return 0;
58 }

 

這是執行結果

 

  • uid,euid,suid

使用ps -l命令就可以看見一些信息,PID和PPID就不詳細說了分別是該進程和父進程的ID號,這次詳細講的是UID和相關的EUID和SUID,分別代表什麼呢

UID:代表實際用戶ID,下圖中也有顯示,當前我是用的是ROOT用戶顯示的UID就是0,如果是普通用戶一般會比0大,我的一般用戶UID是1000

EUID:代表有效用戶ID,一般uid和euid都是一樣的。。。

 

SUID:代表設置用戶id(只能使用在可執行程式上,因為使用之後許可權的x位會變為s),不一樣的時候來了!當你設置了該位之後,執行該文件時你的euid會提升到該文件的持有者。使用這一功能的例子有passwd這條命令,按理說只有root有許可權更改用戶密碼,但是普通用戶也可以使用passwd更改密碼,就是使用了設置用戶id。

實現方法如下首先建立一個什麼許可權都不提供的log文件

很顯然,訪問它是非法的,更不可能往裡面寫東西,現在我企圖用文件指針打開他,往裡面寫入東西

 1  #include<stdio.h>
 2   
 3 
 4  #include<string.h>
 5  
 6                                                                              
 7  int main()
 8  {
 9    FILE *fp;
10    printf("uid:%d   euid:%d",getuid(),geteuid());
11    fp=fopen("log","w");
12    if(fp==NULL)
13    {
14      printf("fopen error");
15    }
16    char *buffer="hello world";
17   
18    fwrite(buffer,1,strlen(buffer),fp);
19   
20    return 0;
21  }

使用普通用戶執行該程式

直接報告段錯誤,被拒絕了

設置用戶id

再次執行,成功寫入,我們發現這時候列印出來的uid和euid不同,雖然實際用戶身份是普通用戶,但是當前有效用戶身份是root!這樣euid的用處就好理解了,只是個身份而已,並不能代表實際人物,就像一個假的名字

  • 粘滯位(sticky)

文件的粘滯位是什麼?有什麼作用?

普通文件的粘滯位會被操作系統內核無視,目錄文件被設置後表示這個目錄裡面的文件只能被擁有者和root刪除,粘滯位出現在可執行的位置上,用t表示,設置了該位之後,用戶就不能刪除不屬於他的目錄和文件。

例如tmp目錄,就被設置了粘滯位,我在/tmp目錄內部創建了子目錄文件

看!tmp目錄文件設置了粘滯位

創建了一個test普通文件和dirtest目錄文件,執行刪除

請求被拒絕。。。嘗試使用-rf強制刪除

同樣被拒絕,設置粘滯位的命令

chmod 777 dirtest
chmod +t dirtest

這個也可以

chmod 1777 dirtest

對普通文件設置粘滯位並沒有什麼卵用,變成T了,最後被無視


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

-Advertisement-
Play Games
更多相關文章
  • 在Linux系統中,如何找到用戶創建的時間呢? 其實是沒有標準方法查找用戶創建時間。下麵再搜索了一些資料後,自己驗證並測試了一下這些方法,僅供參考: 1:如果創建的用戶有家目錄,那麼可以ls -l /home//.bash_logout 來找到用戶的創建時間。 [root@DB-Server ~]#... ...
  • 全新的windows10系統帶來了不少新的特性和改變,其中win10的計算器位置就發生了很多的變化,導致很多網友們都以為win10計算器不見了,那麼,win10計算器在哪裡?如何打開?針對此問題,本文就為大家進行解答 http://hovertree.com/menu/windows/ 七月底,微軟 ...
  • 創建 取消 縮寫使用 insert模式下輸入縮寫,Enter鍵獲得pharse。 ...
  • 一、簡單文件系統操作 : df ( h) 查看磁碟容量; rootfs作為系統啟動時內核載入記憶體之後,在掛載真正的磁碟之前的一個臨時文件系統; /dev/sda2 對應主機硬碟的分區,後面的a表示第幾塊硬碟,2表示分區; du查看目錄的容量, h更易讀的方式展示(預設以blocks的大小展示), d ...
  • linux系統通過setup命令可以調用圖形界面來配置網路,該命令只要centos等版本才有。 ...
  • 游標控制 文件操作 :w 寫文件 :w! 寫文件,忽略警告信息:wq 寫文件之後退出編輯:q 退出編輯器:q! 強制退出編輯器ZZ 退出編輯器,如果文件有改動,則保存再退出:x 退出編輯器,如果文件有改動,則保存再退出:e! 重新從磁碟載入文件:n 編輯地下一行:n! 編輯地下一行(忽略警告) 內容 ...
  • 目前我知道的方法有四種 1.awk 'END {print}' 2.sed -n '$p' 3.sed '$!N;$!D' 4.awk '{b=a"\n"$0;a=$0}END{print b}' ...
  • MSP430 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...