Package-specific users
在資料夾『buildroot/system/skeleton/etc』底下,已經有定義了一些預定的users和groups的權限,那如果你安裝了一些需要帳號的套件的話(eg. appache, nginx...),是不是也是在這邊的相關檔案加入帳號資訊呢?答案是否定的,buildroot必須統一在套件的『mk』檔案裡面設定這些客製化的帳號資訊,
格式如下:
define <pkg>_USERS
username uid group gid password home shell groups comment
endef
底下是個套件mosquitto的例子:
define MOSQUITTO_USERS
mosquitto -1 nogroup -1 * - - - Mosquitto user
endef
File permissions and ownership
在建立root filesystem的映像檔之前,buildroot預設都會將所有的檔案的權限改為0:0,意思是root:root,並且有些檔案的預設權限已經定義在檔案『buildroot/system/device_table.txt』,如下所示:
雖然說在這階段已經將權限設定成root了,但是不要忘記在建置的過程中都是用non-root的權限去建置,所以像是一些setuid的程式就會無法安裝。所以就必須要將相關的權限給定義在『mk』檔裡面的『 <pkg>_PERMISSIONS』變數,格式如下:
define <pkg>_PERMISSIONS
name type mode uid gid major minor start inc count
endef
舉個sudo的例子,在檔案『buildroot/package/sudo/sudo.mk』裡面可以看到:
define SUDO_PERMISSIONS
/usr/bin/sudo f 4755 0 0 - - - - -
endef
因為需要將sudo這個程式賦予SUID的屬性,這樣其他使用者才可以呼叫他去做super user的工作。
Devices
Device的node,主要有靜態和動態產生的,有些裝置是在開機的時候就會將它給掛上去,所以這些裝置的權限都可以預先設定好,buildroot裡面本身就有預設了許多device的權限在『buildroot/system/device_table_dev.txt』裡,如下:
如果你的套件需要額外對某些裝置檔設定權限的話,一樣必須要在『mk』檔裡面的變數『 <pkg>_DEVICES』去定義,格式如下:
define <pkg>_DEVICES
name type mode uid gid major minor start inc count
endef
但是自從2.6.32換成devtmpfs以後,這種做法就越來越少人用了,因為這部分已經全部託管給kernel裡的devtmpfs去處理了。