組長:B10415043 陳弘展
組員:B10415003 潘韋誠
github: https://github.com/three3year/xv6-public

進到系統開始時需先輸入帳號密碼, 若輸入錯誤則會跳出錯誤訊息並繼續輸入帳號密碼, 若輸入成功則會跳出歡迎訊息並且跳到該帳號的家目錄; 接者可以進行指令輸入, 若要對檔案進行讀取寫入或修改時就會檢測該帳號是否為擁有者或者屬於該群組成員或者是其他, 並依照該檔案的權限來檢測是否有辦法執行指令, 若可以則執行, 否則將會跳出錯誤訊息
一開始執行xv6時會需要先登入帳號密碼
若輸入錯誤的帳號密碼則會跳出錯誤訊息
若正確的話則會跳出歡迎訊息並且到家目錄的位置
接著新增幾個檔案

修改owner和group和檔案的權限

切換其他帳號來測試權限

※test1的groupid為1

login
1.因為需要再一開始的時候就登入帳號密碼, 所以修改init.c裡一開始執行的檔案

2.接者新增login.c使
他可以接收使用者輸入的帳號密碼並且判斷是否正確, 若正確則會記錄該使用者的相關資訊並傳回去
3.然後因為需要儲存帳號的相關資訊所以新增一個名叫shadow的檔案, 用來存放相關資料, 並且因為我們需要xv6可以讀到, 所以需要修改makeFile讓xv6讀的到

權限
1.首先我們需要每個檔案都有權限, 所以我們需要修改檔案的結構, 此結構存在於stat.c裡, 因此我們需要新增ownerid, groupid和mode在裡面

2.接著在執行指令時需要先知道這個指令是屬於rwx的哪個權限, 再去判斷這個使用者是否有這個權限執行指令, 因此需要修改sh.c在呼叫指令前須要判斷是否可以執行

chmod, chowner, chgroup
1.有時候我們會想修改檔案的權限轉給其他人, 所以新增chmod.c, chowner.c chgroup來完成以上這些事情, 其主要功能皆是修改stat裡的mode, ownerid和groupid
chmod.c

chowner.c

chgroup.c

createfile, writeD, cat
1.而擁有了權限後總是需要一些檔案來測試, 於是有了createfile, writeD, cat三個指令來測試, 分別是新增檔案, 寫入檔案和顯示檔案, 用此方式來檢測權限功能
createfile.c

writeD.c

cat.c

ls
1.因為新增了權限的功能, 所以ls顯示的資料也有所變更, 必須要多權限等欄位

logout
1.而登入後就需要登出, 也可以藉由此方式來切換不同使用者, 由於原先xv6在執行後就會執行sh.c並且一直等待指令, 所以只要修改sh.c讓他讀到logout的指令時會跳出, 如此一來就會回到一開始登入的地方, 進而完成登出與切換使用者的功能

在經過這次嘗試新增權限系統到xv6裡, 讓我更了解liunx的權限實際應用, 再動手修改內容後, 也讓我知道要寫一個簡單的功能, 背後影響的範圍很廣, 從user interface到kernal都需要做修改; 經過這次的訓練, 讓我更熟悉作業系統內部的運作情形, 在未來需要考慮performance時, 可以藉由此次的訓練讓我在優化時能做的更好。
潘韋誠: 撰寫user相關內容、整合測試
陳弘展: 撰寫權限管理相關內容、整合測試