Linux 檔案特殊權限 - suid

Share on:

常常看到某個檔案明明可以執行, 但是執行下去之後卻看到 Permission denied

但是我明明具有 x 的權限阿!? 若有此問題, 看看這篇吧!!

Prerequest

這邊使用 go 語言, 撰寫一支非常鳥的程式碼, 功能就是, 把一個檔案寫入 /run/f1

 1package main
 2
 3import (
 4        "fmt"
 5        "io/ioutil"
 6        "os/user"
 7)
 8
 9func main() {
10        d1 := []byte("Hello\n")
11        err := ioutil.WriteFile("/run/f1", d1, 0644)
12        user, err := user.Current()
13        if err != nil {
14                fmt.Println("我是 " + user.Name + ". 資料寫入到 /run/f1 發生錯誤!!")
15        } else {
16                fmt.Println("我是 " + user.Name + ". 資料已寫入 /run/f1")
17        }
18}

把腳本編譯之後, 丟到 /bin/write_file_to_run

或者

可以直接下載此腳本

Start

我們先來看看 /run 這個地方, 基本上他只是目前記憶體裡的資料罷了... 隨意搞破壞吧

這邊就不囉嗦, 直接看

1$ ls -ld /run
2drwxr-xr-x. 47 root root 1400 Nov 30 02:54 /run
3#       ↑ 其他使用者不具備 w 權限

現在來執行看看

1(root) $ /bin/write_file_to_run
2我是 root. 資料已寫入 /run/f1
3
4(root) $ ls -l /run/f1
5-rw-r--r--. 1 root root 6 Nov 30 03:21 /run/f1

但如果你切換成其他使用者...

1(tony) $ /bin/write_file_to_run
2我是 tony. 資料寫入 /run/f1 發生錯誤!!

原因就是 /run 雖說阿貓阿狗們都可以進來, 但是並不代表大家可以在裡面 新增/修改 檔案

所以有必要做一些權限上的調整~ 好讓 執行此程式的人, 資格都晉升成檔案擁有者的地位

 1(root) $ chmod u+s /bin/write_file_to_run
 2(root) $ ls -l /bin/write_file_to_run
 3-rwsr-xr-x. 1 root root 2099213 Nov 30 03:36 /bin/write_file_to_run
 4#  ↑     ↑     ↑
 5#  |     雖然擁有者是 root, 但是其他人可以執行
 6#  |
 7#  一旦執行之後, 目前使用者 晉升為此 檔案擁有者 的地位
 8
 9# 如此一來, 就可以正常執行了~
10(tony) $ /bin/write_file_to_run
11我是 tony. 資料已寫入 /run/f1

比較特別的就是那個 s 了.

這邊不多做介紹, 相信鳥哥已經寫得相當清楚了, 有興趣的人再去拜讀吧.

Reference

comments powered by Disqus