<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Antony 筆記：技術原理與實務經驗 – Process</title><link>https://blog.kubeantony.com/principles/linux/process/</link><description>Recent content in Process on Antony 筆記：技術原理與實務經驗</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><lastBuildDate>Tue, 09 Aug 2022 08:34:50 +0800</lastBuildDate><atom:link href="https://blog.kubeantony.com/principles/linux/process/index.xml" rel="self" type="application/rss+xml"/><item><title>Linux Process Part2</title><link>https://blog.kubeantony.com/principles/linux/process/linux-process-part2/</link><pubDate>Tue, 09 Aug 2022 08:34:50 +0800</pubDate><guid>https://blog.kubeantony.com/principles/linux/process/linux-process-part2/</guid><description>
&lt;h2&gt;程序執行權限&lt;span class="hx:absolute hx:-mt-20" id="程序執行權限"&gt;&lt;/span&gt;
&lt;a href="#%e7%a8%8b%e5%ba%8f%e5%9f%b7%e8%a1%8c%e6%ac%8a%e9%99%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;程序與程式 ( process &amp;amp; program )&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/DIOvX41.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;當我們在系統裡面執行程式，電腦會把程式載入記憶體，而這時候記憶體裡面會有程式的 PID 和執行者的權限屬性（UID 或 GID），還有程序的程式碼（machine code）和相關資料 (程式在執行時可能修改到的檔案、存取的硬體資源&amp;hellip;等)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PID&lt;/code&gt; = Process identify&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UID&lt;/code&gt; = User identify&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;程式在執行時所需要的資源(檔案目錄、網路、CPU、記憶體&amp;hellip;等)，會以執行者的身分 ( UID ) 取得&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Linux 程序執行權限&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 建立工作目錄
$ cd; mkdir setuid; cd setuid
# 編輯 GO 語言的程式
$ echo &amp;#39;package main
import (
&amp;#34;fmt&amp;#34;
&amp;#34;io/ioutil&amp;#34;
&amp;#34;os/exec&amp;#34;
)
func main() {
cmd := exec.Command(&amp;#34;sleep&amp;#34;, &amp;#34;60&amp;#34;)
cmd.Run()
err := ioutil.WriteFile(&amp;#34;/mulan.txt&amp;#34;, []byte(&amp;#34;Hello&amp;#34;), 0755)
if err != nil {
fmt.Printf(&amp;#34;Unable to write file: %v\n&amp;#34;, err)
} else {
fmt.Printf(&amp;#34;/mulan.txt created\n&amp;#34;)
}
} &amp;#39; &amp;gt; myfile.go
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a myfile.go
# 檢視執行檔有無編譯成功
$ dir myfile
-rwxrwxr-x 1 bigred bigred 2.0M Jul 26 05:13 myfile
# -d ，列出目錄本身的資訊，而不是目錄下的內容
# 根目錄權限，只有擁有者可以讀取、編輯和進入，群組與其他人只能讀取和進入
$ ls -ld /
drwxr-xr-x 23 root root 4096 Jul 22 20:16 /
# bigred 帳號沒有權限在 根目錄 (/) 產生檔案
$ ./myfile
Unable to write file: open /mulan.txt: permission denied
# 開啟一個新的終端機, 執行以下命令
# 選擇要看 user,pid,ruid,euid,cmd 這幾個欄位的資訊
$ ps -eo user,pid,ruid,euid,cmd | grep myfile
bigred 50775 1000 1000 ./myfile
bigred 50825 1000 1000 grep myfile&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;What is difference between RUID and EUID&lt;span class="hx:absolute hx:-mt-20" id="what-is-difference-between-ruid-and-euid"&gt;&lt;/span&gt;
&lt;a href="#what-is-difference-between-ruid-and-euid" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Real UserID&lt;/strong&gt; ，Real UserId 只是啟動它的用戶的 UserID。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Effective UserID&lt;/strong&gt; ，真正執行程式的 UID ，它通常與 Real UserID 相同&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/"target="_blank" rel="noopener"&gt;詳細介紹文章連結&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Setuid&lt;span class="hx:absolute hx:-mt-20" id="setuid"&gt;&lt;/span&gt;
&lt;a href="#setuid" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Linux 檔案進階設定 - setuid&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 回到原先終端機, 一定要先設定 owner, 才可設定 setuid
$ sudo chown root myfile; sudo chmod 4755 myfile
$ ls -al myfile
-rwsr-xr-x 1 root bigred 2.0M Jul 26 06:57 myfile
$ ./myfile
/mulan.txt created
# 在新啟動的終端機, 執行以下命令
# 可以看到 euid 變成 root 的 UID
$ ps -eo user,pid,ruid,euid,cmd | grep myfile
root 50886 1000 0 ./myfile
bigred 50898 1000 1000 grep myfile
# setuid 無法套用到 shell script
$ nano mkmoo.sh
#!/bin/bash
mkdir /moo
$ sudo chown root:root mkmoo.sh
$ sudo chmod 4755 mkmoo.sh
$ ls -al mkmoo.sh
-rwsr-xr-x 1 root root 25 Sep 27 17:33 mkmoo.sh
$ ./mkmoo.sh
mkdir: cannot create directory ‘/moo’: Permission denied
# 檢視 系統中有多少具有 setuid 功能的 命令
$ sudo find / -user root -perm -4000 2&amp;gt;/dev/null | grep -E &amp;#39;^/bin|^/usr/bin&amp;#39;
/usr/bin/sudo
/bin/mount
/bin/bbsuid
/bin/umount
/bin/ping
/bin/fusermount&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;setuid&lt;/code&gt; : 使用者在執行程式時，可以讓檔案擁有者代為執行檔案，因此在查看 EUID 時，會顯示出檔案擁有者的 UID 。&lt;/li&gt;
&lt;li&gt;目前所有的 Linux 作業系統，擁有 setuid 的功能應越少越好，Alpine 3.16.1 的版本目前剩 6 個&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;由以下命令得知 /etc/passwd 只能 root 讀寫, 為何 rbean 能自行重設密碼 ?&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo ls -al /etc/shadow
-rw-r----- 1 root shadow 1038 Aug 8 14:01 /etc/shadow&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;系統工程&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-系統工程"&gt;&lt;/span&gt;
&lt;a href="#tags-%e7%b3%bb%e7%b5%b1%e5%b7%a5%e7%a8%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item></channel></rss>