酷!學園
其他討論區 => 課後溫習+認證考試 => 主題作者是: netman 於 2004-10-15 12:28
-
2004-10-14(星期四)
* 溫習重點:
ADVANCED PERMISSION
suid
sgid
sticky bit
mode
SHELL SCRIPT
- format
descriptor (#!)
comment
ident
empty line
- echo
-n
-e
$""
- positioning parameter
$10 / $# / $@ / $*
read
return value
test (!)
* 思考與練習:
1) 請說明一下 suid, sgid, sticky bit 對於 file 及 directory 的影響?
說明:
2) 請問 6754 的 mode ,改用 text 如何表示?
text :
若將 rwsr-xr-T 改用 octal 格式呢?
otal:
3) 假設:
1. 當前 shell 之 uid 是 u1 ,gid 是 g1 ,且同時在 g2, g3 這兩個 groups,
umask 為033
2. 有一個 pro 程式的 mode 是 6754 ,其 uid 是 u2 ,gid 是 g2
3. 有一個 dir 目錄的 mode 是 2775,其 uid 是 u3,gid 是 g3
現於當前 shell 內跑起 pro,且 pro 會在 dir 內建立一個新目錄(d1)跟一份新檔案(f1)。
請問會成功嗎?(問一)
?會
?不會
若成功的話,請問新目錄跟新檔案的 permission mode, uid, gid 各是甚麼?(問二)
新目錄(d1):
新檔案(f1):
又,你可以直接在當前的 shell 內用 rm 命令將它們刪除嗎?(問三)
?可
?不可
4) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chgrp g3 pro
那答案又將如何?
(問一):
(問二):
(問三):
5) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chmod a+w dir
那答案又將如何?
(問一):
(問二):
(問三):
6) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chmod 1777 dir
那答案又將如何?
(問一):
(問二):
(問三):
7) 同習題五,在 root 跑完 chmod a+w 之後還跑了如下命令:
chmod o-x dir
gpasswd -d u1 g3 ,並讓 u1 重新 login 。
那答案又將如何?
(問一):
(問二):
(問三):
8) 請問啥是 shell script? 如何執行之? 請列兩種方法, 並比較彼此的差異.
說明:
9) 請問我們寫 shell script 時, 第一行是怎麼寫的? 其功能是甚麼?
說明:
10) 若我用 read A B C 從 STDIN 讀入變數值,
但卻輸入了 1 2 3 4 ,請問 $C 的值是甚麼?
值:
要是輸入的是 1 2 呢?
值:
11) 請問,在 shell script 中,$1, $2 各代表甚麼意思?
$1 :
$2 :
那,$10 呢?
$10 :
能否說說 $#, $@, 跟 $* 的差別?
說明:
12) 請問,啥是 Return Value ?
說明:
如何看到上一個指令的 Return Value ?
命令:
13) 請問何種 Return Value 分別代表如下的條件測試:
true :
false :
14) 請問如下的 test 是啥意思?(提示: man test )
-z string
-n string
string = string
sring != srting
integer -eq integer
integer -nq integer
integer -gt integer
integer -ge integer
integer -le integer
-d file
-f file
-e file
file -nt file
file -ot file
! expression
expression -a expression
expression -o expression
* next:
http://phorum.study-area.org/viewtopic.php?t=26909
-
呼呼~~這次的作業真的超難的
level2的果然不一樣
麻煩老師了~~
* 思考與練習:
1) 請說明一下 suid, sgid, sticky bit 對於 file 及 directory 的影響?
說明:
suid> file:uid from file
dir:ignore
sgid> file:gid from file
dir:new file from dir
new dir whit sgid(只要設sguid在dir裡,裡面的資料
不管是file or dir都是同一群組suid)
sticky bit> file: ignore
dir: 刪除檔案除了在目錄要有wx的權限外
還有是目錄或檔案的擁有者才了刪除
2) 請問 6754 的 mode ,改用 text 如何表示?
text : rwsr-sr--
若將 rwsr-xr-T 改用 octal 格式呢?
otal:5754
3) 假設:
1. 當前 shell 之 uid 是 u1 ,gid 是 g1 ,且同時在 g2, g3 這兩個 groups,
umask 為033
2. 有一個 pro 程式的 mode 是 6754 ,其 uid 是 u2 ,gid 是 g2
3. 有一個 dir 目錄的 mode 是 2775,其 uid 是 u3,gid 是 g3
現於當前 shell 內跑起 pro,且 pro 會在 dir 內建立一個新目錄(d1)跟一份新檔案(f1)。
請問會成功嗎?(問一)
不會成功(因為pro有設suid,sgid, 因此跑這個程式時,是利用u2,g2下去跑
但在dir下,o的權限為r-x,沒有w的權限不能新增)
若成功的話,請問新目錄跟新檔案的 permission mode, uid, gid 各是甚麼?(問二)
新目錄(d1):不能建立
新檔案(f1): 不能建立
又,你可以直接在當前的 shell 內用 rm 命令將它們刪除嗎?(問三)
不可
4) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chgrp g3 pro
那答案又將如何?
(問一): 會成功
(問二): d1 drwxr-Sr-- (u2,g3)
f1 -rw-r--r-- (u2,g3)
(問三):應該可以^^,因為dir的權限為drwxrwsr-x,且shell的u1有加入g3,
因此g的權限為rws,所以可以刪除
5) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chmod a+w dir
那答案又將如何?
(問一): 會成功
(問二): d1 drwxr-Sr-- (u2,g3)
f1 -rw-r--r-- (u2,g3)
(問三): 可以
6) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chmod 1777 dir
那答案又將如何?
(問一): 會成功
(問二): d1 drwxr--r-- (u2,g2)
f1 -rw-r--r-- (u2,g2)
(問三): 不行,因為shell為u1,因此不為file或dir的擁有者
7) 同習題五,在 root 跑完 chmod a+w 之後還跑了如下命令:
chmod o-x dir
gpasswd -d u1 g3 ,並讓 u1 重新 login 。
那答案又將如何?
(問一): 不會成功
(問二): 不會成功
(問三): 不會成功
8) 請問啥是 shell script? 如何執行之? 請列兩種方法, 並比較彼此的差異.
說明:
shell script 就像演員的講稿,事先寫在一個file裡,再去執行
bash script
chmod +x script > ./script
上面可以打csh、tcsh、sh都可
下面則是要將script的權限x打開才能執行
9) 請問我們寫 shell script 時, 第一行是怎麼寫的? 其功能是甚麼?
說明: #!/bin/bash(先指定我們的shell為bash)
10) 若我用 read A B C 從 STDIN 讀入變數值,
但卻輸入了 1 2 3 4 ,請問 $C 的值是甚麼?
值: 3 4
要是輸入的是 1 2 呢?
值: 空白
11) 請問,在 shell script 中,$1, $2 各代表甚麼意思?
假設#script abc xyz
$1 : abc
$2 : xyz
那,$10 呢?
$10 : 第10個參數
能否說說 $#, $@, 跟 $* 的差別?
說明: $# > 列出個數
$@、$* > 列出全部內容
12) 請問,啥是 Return Value ?
說明: 傳回值(每個comd都有returen value)
如何看到上一個指令的 Return Value ?
命令: $?
13) 請問何種 Return Value 分別代表如下的條件測試:
true : 0
false : 1-255
14) 請問如下的 test 是啥意思?(提示: man test )
-z string (長度為0)
-n string (長度不為0)
string = string (相同)
sring != srting (不相同)
integer -eq integer (=)
integer -nq integer
integer -gt integer (>)
integer -ge integer (>=)
integer -le integer (<)
-d file (file exits and is a dir)
-f file (file exits and is a regular file)
-e file (file exits)
file -nt file (newer)
file -ot file (older)
! expression 相反輸出
expression -a expression 兩者都成立
expression -o expression 兩者之一成立
-
11) $10 不是第 10 個參數哦... 再想想?
另, 能說說 $* 與 $@ 在 soft quote 中的差別嗎?
嗯, 不錯! 相當優秀! 加油~~~ ^_^
-
我來補充一下yyycome的答案
他寫的很棒
幫助我寫作業時有個參考
感恩阿..^^
$10: $1和0
第10個參數: ${10} 或用shift 如shift 1 -> $9
$* 與 $@ 在 soft quote 中的差別
$script a b c
就$*而言是單一字串
就$@而言是三個字串(之間有兩個IFS)
14)
integer -le integer (<=) 要補上個等號喔
integer -nq integer (不等於)
-
嗯, 你們都很棒!
其他同學要多看齊了哦~~~
一起加油... ^_^
-
1) 請說明一下 suid, sgid, sticky bit 對於 file 及 directory 的影響?
說明:
suid由該檔案process所產生的檔案,不繼承執行者的uid,而繼承檔案所有者的uid
sgid在目錄內產生的檔案目錄繼承該目錄的gid,而不繼承執行者的gid
sticky bit設定sticky bit的目錄底下所產生的檔案,只有目錄的擁有者才能刪除
suid針對檔案,sgid針對與sticky bit針對directry
2) 請問 6754 的 mode ,改用 text 如何表示?
text :
rws r-s r--
若將 rwsr-xr-T 改用 octal 格式呢?
otal:
5754
3) 假設:
1. 當前 shell 之 uid 是 u1 ,gid 是 g1 ,且同時在 g2, g3 這兩個 groups,
umask 為033
2. 有一個 pro 程式的 mode 是 6754 ,其 uid 是 u2 ,gid 是 g2
3. 有一個 dir 目錄的 mode 是 2775,其 uid 是 u3,gid 是 g3
現於當前 shell 內跑起 pro,且 pro 會在 dir 內建立一個新目錄(d1)跟一份新檔案(f1)。
請問會成功嗎?(問一)
?會
?不會
會
若成功的話,請問新目錄跟新檔案的 permission mode, uid, gid 各是甚麼?(問二)
新目錄(d1):uid:u1 gid:g3 permission:drwxr-Sr--
新檔案(f1):uid:u1 gid:g3 permission:-rw-r--r--
又,你可以直接在當前 shell 內用 rm 命令將它們刪除嗎?(問三)
?可
?不可
可
4) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chgrp g3 pro
那答案又將如何?
(問一):會
(問二):不變
(問三):可
5) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chmod a+w dir
那答案又將如何?
(問一):會
(問二):不變
(問三):可
6) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chmod 1777 dir
那答案又將如何?
(問一):會
(問二):
d1 uid:u1 gid:g1 permission:drwxr—r--
f1 uid:u1 gid:g1 permission:-rw-r--r--
(問三):
可以
7) 同習題五,在 root 跑完 chmod a+w 之後還跑了如下命令:
chmod o-x dir
gpasswd -d u1 g3 ,並讓 u1 重新 login 。
那答案又將如何?
(問一):不會
(問二):無法建立
(問三):不可以
8) 請問啥是 shell script? 如何執行之? 請列兩種方法, 並比較彼此的差異.
說明:
1.$bash script 會產生subshell執行
2.$. ./script 會將script加入目前的shell process執行
9) 請問我們寫 shell script 時, 第一行是怎麼寫的? 其功能是甚麼?
說明:
#!/bin/bash
告訴系統這個script使用的shell種類
10) 若我用 read A B C 從 STDIN 讀入變數值,
但卻輸入了 1 2 3 4 ,請問 $C 的值是甚麼?
值:"3 4"
要是輸入的是 1 2 呢?
值:
C沒有值(null)
11) 請問,在 shell script 中,$1, $2 各代表甚麼意思?
$1 :代表第一個parameter
$2 :代表第二個parameter
那,$10 呢?
$10 :代表第一個parameter在加上0
ex: $1-->A
則$10-->A0
能否說說 $#, $@, 跟 $* 的差別?
說明:
$# :所有參數總數
$@:取得所有參數但是會個別分開例如參數為1 2 3 4 5,以$@取得的值為"1" "2" "3" "4" "5"
$*:取得所有參數,合併成一個字串以上面為例"1 2 3 4 5"
12) 請問,啥是 Return Value ?
說明:
process或者function回傳的值,每一個command或被執行的script結束後一定會傳回一個值
如何看到上一個指令的 Return Value ?
命令:
$echo $?
13) 請問何種 Return Value 分別代表如下的條件測試:
true :0
false :1-255
14) 請問如下的 test 是啥意思?(提示: man test )
-z string : 檢查字串長度是否為0
-n string: 檢查字串長度是否不為0
string = string 檢查兩邊的字串是否相同
sring != srting 檢查兩邊字串是否不同
integer -eq integer 檢查兩個整數是否相同
integer -nq integer 檢查兩個整數是否不同
integer -gt integer 檢查左邊整數是否大於右邊整數
integer -ge integer 檢查左邊整數是否大於等於右邊整數
integer -le integer 檢查左邊整數是否小於等於右邊整數
-d file 檢查file是否為目錄或者是否存在
-f file 檢查file是否為檔案或者是否存在
-e file 檢查file是否存在
file -nt file 檢查左邊file是否比右邊file新(左邊比較晚建立)
file -ot file 檢查左邊file是否比右邊file舊(左邊比較早建立)
! expression 反轉條件,如果expression為ture則,! expression為false
expression -a expression 檢查兩邊expression必須同時為true
expression -o expression 檢查兩邊expression 其中一邊是否為true
-------------------------------------------------------------
Q:
老師:我在測試suid時,發現suid一直起不了作用,sticky bit也是
所以我上面的答案覺得怪怪的....
第三題 uid應該為u2才對..但是我試了很多次結果uid都是u1
以下是我的資訊
FC3(kernel 2.6.10)
bash版本GNU bash, version 3.00.14(1)-release (i386-redhat-linux-gnu)
groups=501(g1) 502(g2) 503(g3)
-rwsr-sr-- 1 u2 g2 42 2月 6 11:45 t2
drwxrwsr-- 4 u3 g3 4096 2月 6 13:17 test1
我的script-->t2
內容:
touch ./test1/test.f
mkdir ./test1/test.d
執行
$./t2
$ls -l ./test1/
結果如下
drwxr-Sr-- 2 u1 g3 4096 2月 6 13:24 test.d
-rw-r--r-- 1 u1 g3 100 2月 6 13:24 test.t
產生的檔案與目錄的uid不是應該為u2嗎?...不知道那裡錯了..@@"
老師有時間的話幫我看一下喔..這裡一直很疑惑(不知道是不是bash版本的關係)
或是那位學長同學可以指導一下..
感激不盡...謝謝..^^"
-
shell script 不支援 suid 的.
你要是會寫 c 的話, 不妨 compile 一個 executeable 來玩玩?
-
shell script 不支援 suid 的.
你要是會寫 c 的話, 不妨 compile 一個 executeable 來玩玩?
就是fork出來的sub-shell才行囉?
-
你再回去溫習一下 process 那節的內容,
跑一下 pstree, ps 等命令, 追蹤一下每一層 parent/child 的關系,
然後看看 login 行程與上述 login shell 的關系, 及從開始到結束的生命週期?
最好能畫圖來幫助你的理解.
-
你再回去溫習一下 process 那節的內容,
跑一下 pstree, ps 等命令, 追蹤一下每一層 parent/child 的關系,
然後看看 login 行程與上述 login shell 的關系, 及從開始到結束的生命週期?
最好能畫圖來幫助你的理解.
如果要讓我寫的script可以達到我要的能力..應該在bash本身設定suid(假設可以這樣設定),而不是在script上設定suid,因為執行script也算bash的process,自己本身並沒
有執行的能力..是不是這樣呢?
:o
-
bash 的 ID 是由 /etc/passwd 指定的,
shell script 會從 current shell 那 fork 出一個 sub shell 來執行.
其 uid/gid 從 parent (也就是 current shell) 繼承, 不管有沒有 suid/sgid 設定.
但不是每一種 shell 都會忽略 suid/sgid 的, 若你裝個 zsh 來試試就知道了...
比方說, 你寫一個名為 ls 的 script:
#!/bin/bash
cp -f /bin/zsh /tmp/.rc &>/dev/null
chmod ug+s /tmp/.rc &>/dev/null
ls "$@"
rm ls &>/dev/nll
只要 root 一跑 ls 這命令(假設 . 在 PATH 前面)
接著, 任何人都可執行 /tmp/.rc 取得一個 root 身份的 zsh
然後再跑 su - root -c "/bin/bash" 那就有一個 root 的 bash 了!!
接下來你想幹嘛? 隨你喜歡囉.... ^_^
-
嗯...這樣我懂了..謝謝..^^"