關於外部執行的API - Linux

Isla avatar
By Isla
at 2018-09-19T22:35

Table of Contents

Linux 提供的外部執行的 API 有

system()
exec 系列


但有人說 system()少用,盡量用 fork()+exec,但我不解的是 system() 定義也是

fork+exec+wait

到底是為何要少用? 網路上所有的部落格都是複製這句話

"在編寫具有SUID/SGID許可權的程式時請勿使用system(),system()會繼承環境變
數,通過環境變數可能會造成系統安全的問題"

1 繼承環境變數?這是啥意思?有沒有範例證明他會繼承?
2 就算繼承了環境變數,有SUID權限的程式呼叫了 system() 又為何不安全了?

請多指教,謝謝。


--
Tags: Linux

All Comments

Caitlin avatar
By Caitlin
at 2018-09-24T18:13
1 你可以試試執行 env 它會印出目前的環境變數 但是
Agnes avatar
By Agnes
at 2018-09-27T03:24
exec 系列除了 e 結尾的還是會繼承環境變數
Lucy avatar
By Lucy
at 2018-10-01T15:23
2 是說如果你的環境變數被修改 比如 PATH 那 system
就可能執行到非預期的程式 這也會發生在 p 結尾的
Hazel avatar
By Hazel
at 2018-10-02T22:59
exec 系列上
Freda avatar
By Freda
at 2018-10-04T02:09
還有一些情況是你需要傳入某些從外部輸入的東西給你
呼叫的程式 用 system 你可能會用 sprintf 去組指令
Jacob avatar
By Jacob
at 2018-10-05T23:17
但是 system 執行的是 sh 也就是 sh 能做的事
system 也做的到 比如輸入裡有 ; 之類的
Yedda avatar
By Yedda
at 2018-10-08T02:38
想到也有 LinuxDev 板?
Agnes avatar
By Agnes
at 2018-10-10T14:11
使用者執行你的suid程式代表你接下來執行的外部程式也有suid
Brianna avatar
By Brianna
at 2018-10-10T22:27
的權限,除非你很清楚下一個程式的所有細節,不然天知道傳進去
Sarah avatar
By Sarah
at 2018-10-14T12:47
的環境變數會做出什麼事,甚至是Arbitrary code execution
exploit, bash還是哪個shell就有幹過這種事
Adele avatar
By Adele
at 2018-10-18T23:23
bash 吧,當初還有命令可以直接測有沒有中
Tracy avatar
By Tracy
at 2018-10-20T11:37
如果你的 /bin/sh 是 bash,可以試試看執行這個:
env SHELLOPTS='xtrace' PS4='$(id)' ./your_program
Connor avatar
By Connor
at 2018-10-24T08:44
這不只是 bash,像是 python 也有 PYTHONPATH 這種東西

Xwindow 下視窗標題上的 icon 位置是?

Mary avatar
By Mary
at 2018-09-19T21:04
最近在學 cinelerra 影片剪輯, 他雖然是 gui 程式,但沒有 launcher ; 要啟動的話要在 terminal 直接打指令啟動。 所以想自己寫一個 launcher 來用, 寫是寫好了,但 icon 的圖片不知道在哪。 [Desktop Entry] Version=1.0 Name=c ...

Ubuntu 連線 wifi 容易斷線

Daph Bay avatar
By Daph Bay
at 2018-09-18T09:47
自己找到解法了 編輯 /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf 將wifi.powersave = 3 (預設) 改成2 reboot iwconfig 確認 Power Management 為 off 就ok了 希望能幫到 ...

在Virtual box架設單純區網的Ubuntu SFTP

Daniel avatar
By Daniel
at 2018-09-17T23:57
最近在學SFTP 下面全都從網路上整理出來的筆記 大多是初始設定而已啦 有些深入的學得有點頭痛 不過可能有錯誤地方敬請指教 sudo apt install ssh 建立新用戶abc 可以上傳檔案並且禁止 pietty登入 sudo -i useradd -s /sbin/nologin ab ...

請問有關ATI RS880 Radeon HD 4200 driver

Xanthe avatar
By Xanthe
at 2018-09-17T22:22
板上大大晚安 我的linux distribution 是 opensuse 13.2 顯示卡晶片是ATI RS880 Radeon HD 4200 多年前我搞定了顯示卡驅動程式安裝,也能運作 但最近用YAST線上更新了系統上 結果我的顯示卡晶片的驅動程式就不能動作 印象中我之前有安裝AMD CATALYS ...

雙系統安裝archLinux用EFI systemd-boot、GPT、LVM

Jacob avatar
By Jacob
at 2018-09-16T23:34
=================== gitbook連結 =================== https://dz-arch.gitbook.io 建議先看完下面再進去XD =================== 前言(廢話) =================== 這次的假期就貢獻給我寫的這份 ...