Android init.rc 中 mkdir 参数的含义

Meaning of mkdir parameters in Android init.rc

我正在尝试理解以下命令:

  1. mkdir /data 0770 根系统
  2. mkdir /data 0770系统系统
  3. mkdir /data 0770 系统机房

https://android.googlesource.com/platform/system/core/+/b4d65399fde02280b718e3b5b5cb1464a885c4b0/rootdir/init.rc
第 58 行

mkdir 正在创建目录,
/数据是路径,
0770 授予目录读写权限,
根系统我不知道。

格式为

mkdir <path> [mode] [user] [group]

路径定义了必须创建的目录。模式定义目录的权限。用户和组定义谁是目录的所有者。权限与拥有该目录的用户和组有关。例如,mkdir /data 0770 root system 表示 /data 目录由用户 root 和组 system 所有。 root 用户拥有 read/write/execute 权限(因为第一个 7)并且对于属于 system 组的每个用户也是如此(因为第二个 7).每个其他用户都没有权限(因为最后一个 0)。前导的 0 在这种情况下没有特殊意义,它只是表示八进制数的开始。

可以在init.rc中使用的命令被定义为here

您还可以使用 ls -l:

从命令行检查拥有目录的用户和组
# ls -l
...
drwxrwx---  45 root system     920 1971-02-01 00:26 data

由于您提到了安全标签:这些权限与 SE Linux 标签无关。文件权限被视为自主访问控制 (DAC), whereas SE Linux labels are Mandatory Access Control (MAC)。

您可以使用 ls -lZ:

检查 SE Linux 标签
# ls -lZ                                                                                                                                       
...
drwxrwx--x  45 root system u:object_r:system_data_file:s0 920 1971-02-01 00:26 data

所以在这种情况下,SE Linux 标签将是 u:object_r:system_data_file:s0。通常,文件的 SE Linux 标签不会通过 init.rc 动态设置。相反,标签是通过 SE Linux 策略中的 file_contexts 文件静态定义的(reference). Newly created files by default inherit the SE Linux label of their parent directory. To apply the label from the policy to a newly created file, the restorecon command can be used, as can be seen e.g. here.