作者 主題: [最佳]我也出幾題考考大家  (閱讀 31425 次)

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

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 於: 2003-07-12 13:11 »
效法 abel 兄,我也出幾題考考大家的 Linux 基礎:

1) 假設當前目錄下只有 d1 這個目錄及 f1 這份檔案。
請問你要如何將 d1 複制出 d2 目錄?
   命令:

當成功複制後,再跑一次該命令,
請問其結果與上一次執行結果有何不同?
   說明:

2) 請問 cp 與 mv 有何不同?
   說明:
又,mv 的 source 與 target 都在同一個  partition 跟在不同的 partition ,有何差異?
   說明:

3) 假設:
   1. 當前 shell 之 uid 是 u1 ,gid 是 g1 ,且同時在 g2, g3 這兩個 groups,umask 為 033
   2. 有一個 pro 程式的 mode 是 6755 ,其 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 先跑了如下命令:
   chmod a+w dir
那答案又將如何?
(問一):
(問二):
(問三):

5) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
   gpasswd -d u1 g3
那答案又將如何?
(問一):
(問二):
(問三):

6) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
   chmod 1777 dir
那答案又將如何?
(問一):
(問二):
(問三):

axa

  • 憂鬱的高中生
  • ***
  • 文章數: 99
    • 檢視個人資料
Re: 我也出幾題考考大家
« 回覆 #1 於: 2003-07-12 13:23 »
:D  只會第一題

   

引述: "netman"
效法 abel 兄,我也出幾題考考大家的 Linux 基礎:

1) 假設當前目錄下只有 d1 這個目錄及 f1 這份檔案。
請問你要如何將 d1 複制出 d2 目錄?
   命令:
rsync -avP ./d1 --exclude "f1" ./d2


當成功複制後,再跑一次該命令,
請問其結果與上一次執行結果有何不同?
   說明:
rsync 會比對...有的檔案就不sync了
building file list ...
1 file to consider
wrote 41 bytes  read 20 bytes  122.00 bytes/sec
total size is 0  speedup is 0.00



rust & Unique ...

audiman

  • 活潑的大學生
  • ***
  • 文章數: 249
    • 檢視個人資料
Re: 我也出幾題考考大家
« 回覆 #2 於: 2003-07-12 13:55 »
引述: "netman"
效法 abel 兄,我也出幾題考考大家的 Linux 基礎:
2) 請問 cp 與 mv 有何不同?
   說明:
又,mv 的 source 與 target 都在同一個  partition 跟在不同的 partition ,有何差異?
   說明:


第一:CP為複製檔案或是目錄
           MV為搬移檔案或是目錄
第二:MV的另一各功能就是更改檔名
  就是說在同一個PARTITION下為更改檔案或是目錄名稱
  不同PARTITION下則為移動
呵呵~~~不知道解釋的對不對

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 回覆 #3 於: 2003-07-12 16:35 »
第一題的 f1 是固意擾亂視聽的,可一不理它...  ^_^
關鍵是 target dir 是否存在的差別。這題應該不難。

第二題,cp 跟 mv 除了 permission, time-stamp, umask 等差異外,
還差在對 source file 的處理...
最好從 directory content, inode, block 三者的關係去理解,
然後,對於 mv 是否跨 partition 的差異就能理解。這題稍難。

第三題及以後數題,則比教難,牽涉的概念很多,如:
* account
* process
* umask
* permission
* suid/sgid/sticky_bit
事實上,若搞懂 directory 與 file 的差異及 process envrionment 的話,
應該也不難....

來,再 try try 看﹗

日京三子

  • 全區板主
  • 俺是博士!
  • *****
  • 文章數: 8829
    • 檢視個人資料
    • http://www.24online.cjb.net
[最佳]我也出幾題考考大家
« 回覆 #4 於: 2003-07-12 18:43 »
CP & MV 還有一點不同, 非常特殊.....

當你不是該群組也不是成員的時候, 檔案的擁有者變更(那一個會變更?) 非擁有者時, 執行某指令會被拒絕, 因為權限不足(哪一個會拒絕你? )
哈克不愛的多合一輸入平台----->新香草口味
過去的時間不斷流逝,抹去的眼淚已成追憶;
乾枯的雙手無力阻止,再會了我遠去的曾經。

paulso

  • 俺是博士!
  • *****
  • 文章數: 1966
    • 檢視個人資料
[最佳]我也出幾題考考大家
« 回覆 #5 於: 2003-07-12 19:13 »
在沒看其他人的回答下:

1.
#cp d1 d2 -R
若以這 cmd 再跑一次,它會問是否 overwrite 已有的檔案,不想答以 -f 這參數

2. mv d1 d2 = cp d1 d2 -R ; rm -rf d1  <== 對嗎 :\
partition,不知道有什麼分別 :{

3. 不懂 6755 的 6,看了 man page 還不明白 :[

4. 若最少是 222 的話,我看應該所有人也能改吧… 亂猜的…  :oops:

之後的不答了…  :cry:

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 回覆 #6 於: 2003-07-12 21:05 »
1 與 2 最好動手做一下,自然會更清楚...
$ mkdir dir
$ cd dir
$ touch f1
$ mkdir d1
$ cp -r d1 d2
$ ls d2
$ cp -r d1 d2
$ ls d2
-----> 留意上兩個 cp 有何不同?
$ ls -li
$ su
# chown root.root f1
# chmod 777 f1
# exit
$ umask
----> 推斷一下 new file 將會是甚麼 permission mode ?
$ cp f1 f2
$ ls -li
----> 請留意 inode 與 mode, owner, group ... 等變化
$ mv f1 f3
----> any error?? why not?
----> tips: ls -l ./  # 要是還不懂,那你的 permission 還不及格...
$ ls -li
----> 請留意 inode 與 mode, owner, group ... 等變化
 
再 mount 另一個 partition ,再做 mv 到別的 partition,再看 inode ....
若找一個 1G 大的檔案來實作同 partitioin 與不同 partition 的 mv 差異,
將更能體會。

等 1 跟 2 解決了(來龍去脈),然後再看 3,4,5,6 不遲...

Keanu

  • 可愛的小學生
  • *
  • 文章數: 13
    • 檢視個人資料
Re: 我也出幾題考考大家
« 回覆 #7 於: 2003-07-13 05:00 »
大概算一下,不知對否?

引述: "netman"
效法 abel 兄,我也出幾題考考大家的 Linux 基礎:

3) 假設:
   1. 當前 shell 之 uid 是 u1 ,gid 是 g1 ,且同時在 g2, g3 這兩個 groups,umask 為 033
   2. 有一個 pro 程式的 mode 是 6755 ,其 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 命令將它們刪除嗎?(問三)
   ?可
   ?不可


問一:會
問二:
新目錄(d1): mode=0722, uid=u2, gid=g3
新檔案(f1): mode=0611, uid=u2, gid=g3
問三:可

先算第三題,對的話我再繼續往下做,要不然錯了就不好看...  :lol:

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
Re: 我也出幾題考考大家
« 回覆 #8 於: 2003-07-13 20:48 »
引述: "Keanu"
問一:會
問二:
新目錄(d1): mode=0722, uid=u2, gid=g3
新檔案(f1): mode=0611, uid=u2, gid=g3
問三:可

先算第三題,對的話我再繼續往下做,要不然錯了就不好看...  :lol:

第三題答案是:
問一:不會
問二與問三:既然問一不成立,那就沒意義了。

分析:
關鍵是 pro 有 suid/sgid 設定,
因此 process 的 uid/gid 從 pro 繼成,而不是 shell ,也就是 u2/g2 了。
因為 u2/g2 對 dir 沒有 w 權限,因此寫不入。

godeagle

  • 憂鬱的高中生
  • ***
  • 文章數: 96
  • 性別: 男
    • 檢視個人資料
[最佳]我也出幾題考考大家
« 回覆 #9 於: 2003-07-14 09:46 »
第四題:
問一:會
問二:目錄 744 u2/g3 , 檔案 644 u2/g3
問三:不可

第五題:
問一:不會

第六題:
問一:會
問二:目錄 744 u2/g3 , 檔案 644 u2/g3
問三:不可

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 回覆 #10 於: 2003-07-15 01:19 »
引述: "godeagle"
第四題:
問一:會
問二:目錄 744 u2/g3 , 檔案 644 u2/g3
問三:不可

1. 對﹗因為 dir 對 ugo 都有 w ,因此任何人都能建檔。
2. 差一點: f1 對了,d1 的 uid/gid 也對,但 mode 差一點點...
因為 dir 有設 sgid ,因此 d1 的 mode 會繼也會繼成 gid ,
所以 d1 應是 2744 。
3. 再想想?如過你對 dir 有 w 權限,而 dir 也沒設 sticky_bit ,
是否可以 delete 任何 file (就算你對 file 沒有 w )??

引述: "godeagle"
第五題:
問一:不會

哈,你是對的﹗
這題主要還是考 pro 的 suid/sgid ...
不管 shell 的 uid/sgid 如何變化,
pro 所建的 file ,都是從 pro 的 uid/gid 繼承...

不過,假如第五題要是改為跑 chgrp g3 pro 命令,
那答案又將如何?
(問一):
(問二):
(問三):
請繼續作答...  pls...  ^_^

引述: "godeagle"
第六題:
問一:會
問二:目錄 744 u2/g3 , 檔案 644 u2/g3
問三:不可

基本上,第六題跟第四題差在問三而已,問一與問二是一樣的...
主要是考  sticky bit ...
在沒有 stick_bit 的情形下,只要你對一個 dir 有 w ,就可砍裡面的  file ,而不必理會那個 file 的 permission 是甚麼。
但要是 dir 帶 sticky_bit 的情況下,
除了 w 權限,還得再加上如下兩個條件之一:
* uid 與 dir 的 uid 一致
* uid 與 file 的 uid 一致
由於 pro 的 suid 影響,它產生的 d1 與 f1 的 uid 都不是 u1 ,
因此在 shell 上不能直接砍掉 f1 與 d1 ...

godeagle

  • 憂鬱的高中生
  • ***
  • 文章數: 96
  • 性別: 男
    • 檢視個人資料
[最佳]我也出幾題考考大家
« 回覆 #11 於: 2003-07-15 11:15 »
第四題:
2.唉呀...竟然忘了GUID...真是...還要再磨練磨練...
3.我剛剛去實測,結果可以delete耶!而且可以修改內容...Why?

第五題(續):
1.可
2.d1:2744 u2/g3
  f1:644 u2/g3
3.可

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 回覆 #12 於: 2003-07-15 16:10 »
引述: "godeagle"
第四題:
2.唉呀...竟然忘了GUID...真是...還要再磨練磨練...
3.我剛剛去實測,結果可以delete耶!而且可以修改內容...Why?

這就是 directory content 與 file content 的差異了,
找一下前幾天大家所討論的 inode, block, directory 相關的討論,
應該更明白:
http://phorum.study-area.org/viewtopic.php?t=12235
http://phorum.study-area.org/viewtopic.php?t=17506
簡單而言:
directory 的 content 就是其下的 file list ,
每個 file 佔一行 entry ,共分 4 個欄位。
若你能對 directory 有 w ,就可修改 directory 的 content ,
那麼,刪除一個 file 就是將 directory 的其中一行刪掉(或 rename)。
至於  inode 與 block 是否也會刪除(釋放),則看 link count 。

不過你說可以改 file 的 content ?
得看你對 file (而不是 dir) 是否有 w 了...

引述: "godeagle"
第五題(續):
1.可
2.d1:2744 u2/g3
  f1:644 u2/g3
3.可

1、2 對了,
但 3 再想想?
u1/g1 對 dir 有 w 嗎?
有就可以砍,沒就不能砍...

godeagle

  • 憂鬱的高中生
  • ***
  • 文章數: 96
  • 性別: 男
    • 檢視個人資料
[最佳]我也出幾題考考大家
« 回覆 #13 於: 2003-07-16 07:02 »
再重新測了一次,確實無法更改檔案內容,
可能我之前的測試方式有錯...sorry...

u1不是同時是g3的成員嗎??
而dir的權限為2755,那應該是可以刪的呀...

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 回覆 #14 於: 2003-07-16 12:10 »
引述: "godeagle"
u1不是同時是g3的成員嗎??
而dir的權限為2755,那應該是可以刪的呀...

是的,
但 g3 有 w 嗎?---> YES
這在沒有 sticky_bit 之下,可以砍。
不過 u1 不是 dir 也不是 d1、 f1 的 owner 哦...
這樣在 sticky_bit 設起來後,卻沒辦法砍。

小徒兒

  • 鑽研的研究生
  • *****
  • 文章數: 622
    • 檢視個人資料
[最佳]我也出幾題考考大家
« 回覆 #15 於: 2004-06-09 14:30 »
身為小徒,先蹲蹲馬步,找些基礎來作,別見笑 :wink:

1) 假設當前目錄下只有 d1 這個目錄及 f1 這份檔案。
請問你要如何將 d1 複制出 d2 目錄?
命令:cp -R d1 d2

當成功複制後,再跑一次該命令,
請問其結果與上一次執行結果有何不同?
說明: 會把d1複制到d2的目錄中
                           [root@pc2 test]# cd d2
                           [root@pc2 d2]# ls
                           d1  f1
                           [root@pc2 d2]# cd d1
                           [root@pc2 d1]# ls
                           f1


使用cp的指令時,若第二個參數所指定之目錄或檔案不存在,系統會解讀為複制來源檔案或目錄,並將其改名為第二個參數內容.


使用cp的指令時,若第二個參數所指定之目錄或檔案存在,系統會將來源檔寫入此目錄,或覆寫此檔案.



2) 請問 cp 與 mv 有何不同?
說明: cp 會變更擁有者,gid,uid,stickybit 也會重新根據當時的umask來設定,but not mv

又,mv 的 source 與 target 都在同一個 partition 跟在不同的 partition ,有何差異?
說明: 整個權限,owner,gid,uid,sticky bit都沒有差,差inode與檔案實體在整個fssystem的位置.

3) 假設:
1. 當前 shell 之 uid 是 u1 ,gid 是 g1 ,且同時在 g2, g3 這兩個 groups,umask 為 033
2. 有一個 pro 程式的 mode 是 6755 ,其 uid 是 u2 ,gid 是 g2
3. 有一個 dir 目錄的 mode 是 2775,其 uid 是 u3,gid 是 g3
現於當前 shell 內跑起 pro,且 pro 會在 dir 內建立一個新目錄(d1)跟一份新檔案(f1)。
請問會成功嗎?(問一)
?會
?不會   不會,因為dir為drwxrwsr_x, uid為u3, gid為g3,而shell的uid為u2, u2不是dir的owner,也不是屬於g3,因此是以others的角色做修改,而others現今只有read及execute的權限

若成功的話,請問新目錄跟新檔案的 permission mode, uid, gid 各是甚麼?(問二) 不成功
新目錄
新檔案
又,你可以直接在當前的 shell 內用 rm 命令將它們刪除嗎?(問三)
?可
?不可 不可,都不可寫,如何刪?


4) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chmod a+w dir
那答案又將如何?
(問一):可,因others能得到write的權限
(問二): 因權限為drwxrwsr-x的s權限,因此建立的檔案為dir原有的gid,就是g3,而uid由shell取得,shell的uid為u1,因此d1的uid為u1,gid為g3,當前的umask 為033,因此d1為0744(目錄預設值:0777減掉0033)
                            f1為0644(檔案預設值:0677減掉0033)



(問三): 可以,所有人(others)都可以執行write的動作,包含remove



5) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
gpasswd -d u1 g3
那答案又將如何?
分成兩種情況,A情況:如果也加了chmod a+w dir 則為
(A情況 問一):可
(A情況 問二): d1: 0744 u1(uid) g3(gid)
                         f1: 0644 u1(uid) g3(gid)

                         ps:此處的g3不是從pro或shell的gid取得,而是原有目錄dir"2"777的原因,"2"代表所有建於dir內的都套用此目錄原有的gid

(A情況 問三): 可,雖然u1不再屬於g3,但仍是owner的角色,因此可以刪除

                                                B情況:如果沒加chmod a+w dir 則為

(B情況 問一):可
(B情況 問二): 無
(B情況 問三): 不可




6) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chmod 1777 dir
那答案又將如何?
(問一):可,因others能得到write的權限
(問二):因dir 的permission mode 為 drwxrwxrwt ,因此建立的會用pro的uid及gid: u1及g1, 因此 d1為 0744,u1(uid),g1(gid)
                                   f1為 0644,ud(uid),g1(gid)


(問三):可,因others能得到write的權限



-------------------------------------------------------------------------------------
以上回答,不知正確與否,呼~~~ 馬步總算蹲完,希望沒有丟我師父的臉
 :roll:

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 回覆 #16 於: 2004-06-09 15:07 »
嗯... 不錯不錯,尤其是後面的 suid/sgid 部份... ^_^

不過,有些地方解釋得還不足夠:
引用
使用cp的指令時,若第二個參數所指定之目錄或檔案存在,系統會將來源檔寫入此目錄,或覆寫此檔案.

若目標是已存在的 file ,那 source 就不能是 dir 了。

引用
cp 會變更擁有者,gid,uid,stickybit 也會重新根據當時的umask來設定,
似乎不那麼簡單:
1) 並不會套 umask ,而是照抄原有 permission mode。
2) 但 suid/sgid/stickybit 部份,得看是 root 來跑 cp 還是一般 user 來跑,有差。
這部份最好實作檢驗一下...

引用
整個權限,owner,gid,uid,sticky bit都沒有差,差inode與檔案實體在整個fssystem的位置.

主要差在:
- 若在同一 file system ,只是修改 source dir 與 target dir 的 entry 而已。
- 若不同 file system ,其實是先複制,然後再將 source 刪除掉。除了 dir entries ,還有就是 inode number 與 block number 都不一樣,其他 attribute 還是一樣的。

關於 3) 之問 3 ,是可以刪除的,因為 dir 的 group 是 g3 ,且有 rwx 。
而 shell 的 goups 有 g1,g2,g3 ,其中的 g3 可獲得 group 權限,因此可以刪除。
至於為何  pro 不能建?是因為 suid/sgid 將 ownership 換掉了,而被判為 others permission 。

最後,關於 umask 033 的 new file permission ,用 0677-0033 不準,
試一下 umask 123 就知道了...

嗯,總的來說,已經不錯了。加油、、、!  ^_^

小徒兒

  • 鑽研的研究生
  • *****
  • 文章數: 622
    • 檢視個人資料
[最佳]我也出幾題考考大家
« 回覆 #17 於: 2004-07-15 13:34 »
身為小徒,師父說業精於勤荒於嬉,再來蹲馬步,將之前的觀念再弄清楚 :wink:


1) 假設當前目錄下只有 d1 這個目錄及 f1 這份檔案。
請問你要如何將 d1 複制出 d2 目錄?
命令:cp -R d1 d2

當成功複制後,再跑一次該命令,
請問其結果與上一次執行結果有何不同?
說明: 會把d1複制到d2的目錄中
                           [root@pc2 test]# cd d2
                           [root@pc2 d2]# ls
                           d1  f1
                           [root@pc2 d2]# cd d1
                           [root@pc2 d1]# ls
                           f1


使用cp的指令時,
cp [options] file1 file2
cp [options] files directory
cp -R direcotry directory


若第一個參數為目錄(形式三),則需加上 -R 或 -r,否則 會出現此訊息 cp: omitting directory ,使用形式三, 若第二個參數所指定之目錄不存在,系統會解讀為複制來源目錄,並將其改名為第二個參數內容.


使用cp的指令時,若第二個參數所指定之目錄存在,系統會將來源檔寫入此目錄,或覆寫此檔案.



2) 請問 cp 與 mv 有何不同?
說明: 使用cp不加任何選項,目地檔的gid,uid,stickybit 及owner的權限會延襲來源檔,而group及others則會重新根據當時的umask來設定,but not mv, mv會保留擁有者,群組,使用權限以及時間戳記. 假使要使cp 也保留所有檔案資訊,則需加上 -p的選項.

例證:

#touch f1
#chmod 777 f1
#ll f1
-rwxrwxrwx    1 root     root            0  6月 28 03:55 f1
#cp f1 ftestcopy
#ll ftestcopy
-rwxr--r--    1 root     root            0  7月 15 11:27 ftestcopy

#mv f1 fmv
# ll fmv
-rwxrwxrwx    1 root     root            0  6月 28 03:55 fmv


而為何ftestcopy此檔的permission mode為-rwxr--r--? 因為:

# umask
0033

此時的umask值為0033,預設檔案權限為0666,因為使用cp不加任何選項,目地檔的gid,uid,stickybit 及owner的權限會延襲來源檔,而group及others則會重新根據當時的umask來設定,所以

 0666  --二進位-- 000 110 110 110
 0033  --二進位-- 000 000 011 011
--------------------------------------   
預設減掉遮罩  為 000 110 100 100

便為          -rw-r--r--  
對照ftestcopy的    -rwxr--r-

在擁有者的權限沒變仍為7(rwx),而在群組卻依照umask出來的結果           



又,mv 的 source 與 target 都在同一個 partition 跟在不同的 partition ,有何差異?
說明: 整個權限,owner,gid,uid,sticky bit都沒有差,差inode與檔案實體在整個fssystem的位置.

"主要差在:
- 若在同一 file system ,只是修改 source dir 與 target dir 的 entry 而已。
- 若不同 file system ,其實是先複制,然後再將 source 刪除掉。除了 dir entries ,還有就是 inode number 與 block number 都不一樣,其他 attribute 還是一樣的。 "

<resource from netmant>


3) 假設:
1. 當前 shell 之 uid 是 u1 ,gid 是 g1 ,且同時在 g2, g3 這兩個 groups,umask 為 033
2. 有一個 pro 程式的 mode 是 6755 ,其 uid 是 u2 ,gid 是 g2
3. 有一個 dir 目錄的 mode 是 2775,其 uid 是 u3,gid 是 g3
現於當前 shell 內跑起 pro,且 pro 會在 dir 內建立一個新目錄(d1)跟一份新檔案(f1)。
請問會成功嗎?(問一)
?會
?不會   不會,因為dir為drwxrwsr_x, uid為u3, gid為g3,而shell的uid為u2, u2不是dir的owner,也不是屬於g3,因此是以others的角色做修改,而others現今只有read及execute的權限

若成功的話,請問新目錄跟新檔案的 permission mode, uid, gid 各是甚麼?(問二) 不成功
新目錄
新檔案
又,你可以直接在當前的 shell 內用 rm 命令將它們刪除嗎?(問三)
?可
?不可 可以刪除的,因為 dir 的 group 是 g3 ,而當前shell有屬於g3此group,而group在此時有 rwx的權限 。?


4) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chmod a+w dir
那答案又將如何?
(問一):可,因others能得到write的權限
(問二): 因權限為drwxrwsrwx 的s權限,因此建立的檔案為dir原有的gid,就是g3,而uid由shell取得,shell的uid為u1,因此d1的uid為u1,gid為g3,當前的umask 為033,因此d1為0744(目錄預設值:0777以二進位方式減掉0033)

                         000 111 111 111
                       - 000 000 011 011
---------------------------------------------
                         000 111 100 100 === 0744

因為 dir 有設 sgid ,因此 d1 的 mode 也會繼承dir(2777)的(2) sgid ,
所以 d1 應是 2744 。  

還是不了,為何(因為 dir 有設 sgid ,因此 f1 的 mode 也會繼承dir(2777)的(2) sgid ,
所以 f1 應是 2644)沒有同理可證,而是0644????
                         


                            f1為0644(檔案預設值:0666以二進位方式減掉0033)


                         000 110 110 110
                       - 000 000 011 011
---------------------------------------------
                         000 110 100 100 === 0644

 。



(問三): 可以,所有人(others)都可以執行write的動作,包含remove



5) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
gpasswd -d u1 g3
那答案又將如何?
分成兩種情況,A情況:如果也加了chmod a+w dir 則為
(A情況 問一):可
(A情況 問二): d1: 0744 u1(uid) g3(gid)
                         f1: 0644 u1(uid) g3(gid)

                         ps:此處的g3不是從pro或shell的gid取得,而是原有目錄dir"2"777的原因,"2"代表所有建於dir內的都套用此目錄原有的gid

(A情況 問三): 可,雖然u1不再屬於g3,但仍是owner的角色,因此可以刪除

                                                B情況:如果沒加chmod a+w dir 則為

(B情況 問一):可
(B情況 問二): 無
(B情況 問三): 不可




6) 同習題三,若在執行 pro 之前,root 先跑了如下命令:
chmod 1777 dir
那答案又將如何?
(問一):可,因others能得到write的權限
(問二):因dir 的permission mode 為 drwxrwxrwt ,因此建立的會用pro的uid及gid: u1及g1, 因此 d1為 0744,u1(uid),g1(gid)
                                   f1為 0644,u1(uid),g1(gid)

注意請與chmod 2777 dir分清楚, chmod 4777 或1777都不會使d1繼承s或t的屬性,只有2777,會使d1繼承s而變為2744

(問三):可,因others能得到write的權限



-------------------------------------------------------------------------------------
嚕嚕嚕 ....蹲得頭好痛 ....

 :roll:

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 回覆 #18 於: 2004-07-15 16:18 »
辛苦了!
不過還是有些地方要澄清一下的:

首先, 關餘 cp 命令之 umask 與 suid 這些屬性, 請留意 root 與 user 的差別:
代碼: [選擇]
[kenny@pc2 tmp]$ id
uid=500(kenny) gid=500(kenny) groups=500(kenny),10(wheel)
[kenny@pc2 tmp]$ umask
0002
[kenny@pc2 tmp]$ touch 1.txt
[kenny@pc2 tmp]$ chmod 6775 1.txt
[kenny@pc2 tmp]$ cp 1.txt 2.txt
[kenny@pc2 tmp]$ ll [12].txt
-rwsrwsr-x    1 kenny    kenny         599 Jul 15 16:01 1.txt
-rw-rw-r--    1 kenny    kenny         599 Jul 15 16:01 2.txt
[kenny@pc2 tmp]$ su -
Password:
[root@pc2 root]# cd ~kenny/tmp
[root@pc2 tmp]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[root@pc2 tmp]# umask
0022
[root@pc2 tmp]# cp 1.txt 3.txt
[root@pc2 tmp]# ll [123].txt
-rwsrwsr-x    1 kenny    kenny         599 Jul 15 16:01 1.txt
-rw-rw-r--    1 kenny    kenny         599 Jul 15 16:01 2.txt
-rwsr-sr-x    1 root     root          599 Jul 15 16:02 3.txt

不難看出:
1) cp 的 umask 不是套用預設的 0666 基準, 而是以來源檔當前的 permission mode 而定.
2) 若用一般 user , cp 之後不保留 suid/sgid, 但 root 則然.


再來, 在第 4 題,
在帶有 sgid 的目錄下建 file , 是不會再繼成 sgid 的, new dir 則然:
代碼: [選擇]
[root@pc2 tmp]# mkdir d1
[root@pc2 tmp]# chmod g+s d1
[root@pc2 tmp]# chgrp users d1
[root@pc2 tmp]# ls -ld d1
drwxr-sr-x    2 root     users        4096 Jul 15 16:08 d1
[root@pc2 tmp]# touch d1/file.new
[root@pc2 tmp]# mkdir d1/dir.new
[root@pc2 tmp]# ls -l d1
total 4
drwxr-sr-x    2 root     users        4096 Jul 15 16:09 dir.new
-rw-r--r--    1 root     users           0 Jul 15 16:09 file.new


再來, 關於第 5 題,
d1 應該還帶有 sgid 的: 2744 u1,g3
且, 若沒經過 a+w 處理, 問一是不成功的.

最後, 關於第 6 題,
同樣, d1 應帶 sgid .
然而, 問三是不能刪除的, 因為 sticky-bit 的原因:
shell 的 uid  是 u1
但新檔案的 uid 是  u2
且 dir 的 uid 是 u3
既然  shell 不是 file 或 dir 的 owner , 那,就算對 dir 有 write 也是枉然的...

小徒兒

  • 鑽研的研究生
  • *****
  • 文章數: 622
    • 檢視個人資料
[最佳]我也出幾題考考大家
« 回覆 #19 於: 2004-07-15 17:18 »
引述: "netman"
辛苦了!
uid=500(kenny) gid=500(kenny) groups=500(kenny),10(wheel)
[kenny@pc2 tmp]$ umask
0002
[kenny@pc2 tmp]$ touch 1.txt
[kenny@pc2 tmp]$ chmod 6775 1.txt
[kenny@pc2 tmp]$ cp 1.txt 2.txt
[kenny@pc2 tmp]$ ll [12].txt
-rwsrwsr-x    1 kenny    kenny         599 Jul 15 16:01 1.txt
-rw-rw-r--    1 kenny    kenny         599 Jul 15 16:01 2.txt
[kenny@pc2 tmp]$ su -
Password:
[root@pc2 root]# cd ~kenny/tmp
[root@pc2 tmp]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[root@pc2 tmp]# umask
0022
[root@pc2 tmp]# cp 1.txt 3.txt
[root@pc2 tmp]# ll [123].txt
-rwsrwsr-x    1 kenny    kenny         599 Jul 15 16:01 1.txt
-rw-rw-r--    1 kenny    kenny         599 Jul 15 16:01 2.txt
-rwsr-sr-x    1 root     root          599 Jul 15 16:02 3.txt[/code]
不難看出:
1) cp 的 umask 不是套用預設的 0666 基準, 而是以來源檔當前的 permission mode 而定.
2) 若用一般 user , cp 之後不保留 suid/sgid, 但 root 則然.



如果是如此, 那來源檔當前的permission mode 為

-rwsrwsr-x
在以一般user不保留suid/sgid的情況
-rw-rw-r-x           即 000 110 110 101
通過在kenny下的遮罩0002即  000 000 000 010

-------------------------------------------------------
         結果應為     000 110 110 101
                 -rw-rw-r-x

為何2.txt為-rw-rw-r--

 
換言之如果基楚為 0666 而非來源檔的permission mode
則                     000 110 110 110
通過在kenny下的遮罩0002       即  000 000 000 010
-------------------------------------------------------;
               結果應為     000 110 110 100
                    -rw-rw-r--

               與2.txt的 -rw-rw-r--相吻合


------------------------------------------------------------
ps: i use the counting method from the book of "Lpi in a nutshell"
maybe you use the different counting method, that's why our argument can
not meet...

csl

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
[最佳]我也出幾題考考大家
« 回覆 #20 於: 2004-07-20 00:07 »
引用
netman 寫到:
.......................
[kenny@pc2 tmp]$ umask
0002
.......................
[kenny@pc2 tmp]$ ll [12].txt
-rwsrwsr-x 1 kenny kenny 599 Jul 15 16:01 1.txt
-rw-rw-r-- 1 kenny kenny 599 Jul 15 16:01 2.txt
.......................
[root@pc2 tmp]# umask
0022
.......................
[root@pc2 tmp]# ll [123].txt
-rwsrwsr-x 1 kenny kenny 599 Jul 15 16:01 1.txt
-rw-rw-r-- 1 kenny kenny 599 Jul 15 16:01 2.txt
-rwsr-sr-x 1 root root 599 Jul 15 16:02 3.txt不難看出:
1) cp 的 umask 不是套用預設的 0666 基準, 而是以來源檔當前的 permission mode 而定.
2) 若用一般 user , cp 之後不保留 suid/sgid, 但 root 則然.
 


請教一下,我自己做過上面的實作,發現有一個地方很奇怪

1.umask為002,而用user的結果是
-rwxrwxr-x 1 kenny kenny 8 Jul 19 23:30 2.txt
而和上面不一樣........而我的推論是
原來的 permission mode為
            -rwsrwsr-x      
mask ----------w-       suid,sgid除去後......變回x
=================
            -rwxrwxr-x


2.umask為022,而用root的結果是
-rwsr-sr-x 1 root root 8 Jul 19 23:38 3.txt
而和一樣........
原來的 permission mode為
            -rwsr-sr-x      
mask ------w--w-       suid,sgid 保留
=================
         -rwsr-sr-x

而我的推論有錯嗎??不然為什麼使用user會有不一樣的結果

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 回覆 #21 於: 2004-07-20 00:33 »
嗯, 我想, 這應該以"實作"結果為準.
因為每一家的版本在實作上都可能會有不同的.
這也造成我們在討論"理論"時會有所落差...

anyway, 最重要是將原理弄清楚, 至於實作上的不同, 只能"求同存異"了...  ^_^

kookliu

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
[最佳]我也出幾題考考大家
« 回覆 #22 於: 2007-08-26 11:42 »
研究一下文件和目錄的權限問題,結果從CU找到這里來。
關于第三題,我實際操作了一下。得到跟大家不同的說法。
[root@oracle home]# groupadd g1
[root@oracle home]# groupadd g2
[root@oracle home]# groupadd g3
[root@oracle home]# useradd -g g1 u1 -G g2,g3
[root@oracle home]# useradd -g g2 u2
[root@oracle home]# useradd -g g3 u3
[root@oracle home]# mkdir dir
[root@oracle home]# touch dir/pro
[root@oracle home]# cat > dir/pro << "EOF"
> mkdir d1
> touch f1
> EOF
[root@oracle home]# chown u3.g3 dir
[root@oracle home]# chmod 2775 dir
[root@oracle home]# chown u2.g2 dir/pro
[root@oracle home]# chmod 6755 dir/pro
[root@oracle home]# chmod 6755 dir/pro
[root@oracle home]# ls -al
total 56
drwxr-xr-x   9 root   root      4096 Aug 26 11:16 .
drwxr-xr-x  28 root   root      4096 Aug 21 08:18 ..
drwxrwsr-x   2 u3     g3        4096 Aug 26 11:16 dir
drwx------  15 kook   kook      4096 Jan 25  2007 kook
drwx------   2 root   root     16384 Sep 22  2006 lost+found
drwx------  20 oracle oinstall  4096 Jul  5 23:10 oracle
drwx------   3 u1     g1        4096 Aug 26 11:15 u1
drwx------   3 u2     g2        4096 Aug 26 11:15 u2
drwx------   3 u3     g3        4096 Aug 26 11:16 u3
[root@oracle home]# ls -al dir/pro
-rwsr-sr-x  1 u2 g2 29 Aug 26 11:21 dir/pro
[root@oracle home]# su - u1
[u1@oracle ~]$ cd /home/dir
[u1@oracle dir]$ umask 033
[u1@oracle dir]$ ./pro
[u1@oracle dir]$ ls -al
total 20
drwxrwsr-x  3 u3   g3   4096 Aug 26 11:30 .
drwxr-xr-x  9 root root 4096 Aug 26 11:16 ..
drwxr-Sr--  2 u1   g3   4096 Aug 26 11:30 d1
-rw-r--r--  1 u1   g3      0 Aug 26 11:30 f1
-rwsr-sr-x  1 u2   g2     19 Aug 26 11:28 pro
[u1@oracle dir]$ umask
0033

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 回覆 #23 於: 2007-08-26 17:51 »
哦,不是 touch dir/pro
而是你要跑一個名為 pro 的 program,他的 permission 為 6755 。

kookliu

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
[最佳]我也出幾題考考大家
« 回覆 #24 於: 2007-08-27 23:31 »
这里以下,就是root su 成u1,进入目录dir,执行了那个程序./pro

[root@oracle home]# su - u1
[u1@oracle ~]$ cd /home/dir
[u1@oracle dir]$ umask 033
[u1@oracle dir]$ ./pro
[u1@oracle dir]$ ls -al
total 20
drwxrwsr-x 3 u3 g3 4096 Aug 26 11:30 .
drwxr-xr-x 9 root root 4096 Aug 26 11:16 ..
drwxr-Sr-- 2 u1 g3 4096 Aug 26 11:30 d1
-rw-r--r-- 1 u1 g3 0 Aug 26 11:30 f1
-rwsr-sr-x 1 u2 g2 19 Aug 26 11:28 pro


至于那个程序的权限上面有ls -al显示过啊。是6755啊。
[root@oracle home]# ls -al dir/pro
-rwsr-sr-x 1 u2 g2 29 Aug 26 11:21 dir/pro

不过,我参考了鸟哥的说法,相信是因为Suid这个特性,是仅限于二进制的档案,而对于bash shell是无效的。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
[最佳]我也出幾題考考大家
« 回覆 #25 於: 2007-08-28 08:04 »
是的。suid/sgid 對 shell script 是無效的。