[CM311-1A]-Android 文件权限机制

##################################################

目录

安卓系统权限管理操作

Linux 权限机制

查看文件目录权限

三种普通权限类型

三种用户权限

数字权限

修改文件权限

三种特殊权限

suid 权限

sgid 权限

sticky 权限


##################################################

安卓系统权限管理

——————————

Linux 权限机制

        Android 继承了 Linux 中的文件权限机制
        系统中的每个文件和目录都有访问许可权限
        以此来确定用户可以通过何种方式对文件和目录进行访问和操作

%%%%%

查看文件目录权限

        可以使用 ls 的 -l 参数查看:

cmcc_jiangsu:/tmp # ls / -l
total 1584
dr-xr-xr-x  34 root   root         0 2015-01-01 08:00 acct
lrwxrwxrwx   1 root   root        11 1970-01-01 08:00 bin -> /system/bin
drwxr-xr-x   2 root   root         0 1970-01-01 08:00 boot
drwxrwxr-x   2 system system       0 2015-01-01 08:00 bootfiles
lrwxrwxrwx   1 root   root        50 1970-01-01 08:00 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
drwxrwx---   6 system cache     4096 2015-01-01 08:00 cache
lrwxrwxrwx   1 root   root        13 1970-01-01 08:00 charger -> /sbin/charger
drwxr-xr-x   4 root   root         0 1970-01-01 08:00 config
lrwxrwxrwx   1 root   root        17 1970-01-01 08:00 d -> /sys/kernel/debug
drwxrwx--x  40 system system    4096 2015-01-01 08:00 data
lrwxrwxrwx   1 root   root        23 1970-01-01 08:00 default.prop -> system/etc/prop.default
drwxr-xr-x  17 root   root      5700 2015-01-01 08:00 dev
lrwxrwxrwx   1 root   root        11 1970-01-01 08:00 etc -> /system/etc
drwxr-xr-x   2 root   root         0 2015-01-01 08:00 factory
lrwxrwxrwx   1 root   root        17 1970-01-01 08:00 info -> /mnt/vendor/param
-rwxr-x---   1 root   root   1496164 1970-01-01 08:00 init
-rwxr-x---   1 root   root      1194 1970-01-01 08:00 init.environ.rc
-rwxr-x---   1 root   root     29759 1970-01-01 08:00 init.rc
-rwxr-x---   1 root   root     14865 1970-01-01 08:00 init.recovery.amlogic.rc
-rwxr-x---   1 root   root      7690 1970-01-01 08:00 init.usb.configfs.rc
-rwxr-x---   1 root   root      5646 1970-01-01 08:00 init.usb.rc
-rwxr-x---   1 root   root       511 1970-01-01 08:00 init.zygote32.rc
drwxr-xr-x   4 root   root      4096 2015-01-01 08:00 metadata
drwxr-xr-x  11 root   system     240 2015-01-01 08:00 mnt
drwxr-xr-x   4 root   root      4096 1970-01-01 08:00 odm
drwxr-xr-x   2 root   root         0 1970-01-01 08:00 oem
dr-xr-xr-x 260 root   root         0 1970-01-01 08:00 proc
drwxr-xr-x   7 root   root      4096 1970-01-01 08:00 product
drwx------   2 root   root         0 2021-12-10 20:51 root
drwxr-x---   2 root   root         0 1970-01-01 08:00 sbin
lrwxrwxrwx   1 root   root        21 1970-01-01 08:00 sdcard -> /storage/self/primary
drwxr-xr-x   4 root   root        80 2015-01-01 08:00 storage
dr-xr-xr-x  12 root   root         0 2015-01-01 08:00 sys
drwxr-xr-x  15 root   root      4096 1970-01-01 08:00 system
drwxrwxrwt   6 root   root       220 2022-07-21 19:27 tmp
-rw-r--r--   1 root   root      5272 1970-01-01 08:00 ueventd.rc
drwxr-xr-x  13 root   root      4096 1970-01-01 08:00 vendor
cmcc_jiangsu:/tmp #

        我们可以看到开头的十个字符:

    第一位一般用来区分是文件还是目录:
d	表示是一个目录
-	表示是一个普通文件
l	表示是一个符号链接文件实际上她指向的是另一个文件
b/c	分别表示区块设备和其她的外围设备是特殊类型的文件
s/p	通常很少见这些文件关系到系统的数据结构和管道

        十个位置的含义:

1    文件类型
234    文件所有者
567    群组用户
8910    其她用户

        后面六列含义:

目录文件数
用户名
群组名
大小信息
创建时间信息
文件/目录 名以及链接指向

——————————

三种普通权限类型

        文件或目录的访问权限分为三种权限:

第二位        可读/r/4
第三位        可写 /w/2
第四位        可执行 /x1

        其实是四种权限:

-    没有对应权限
r    读取 read 权限 可以读取文件或者进入目录浏览
w    写入 write 权限 对文件来说是具有修改文件内容的权限 对目录来说是允许删除或移动目录内的文件
x    执行 execute 权限 具有执行文件或者进入目录的权限

——————————

三种用户权限

        有三种不同类型的用户可对文件或目录进行访问分别是:

文件所有者        所有者一般是文件的创建者
同组用户        所有者可以允许同组用户是否有权限访问文件
其她用户        所有者可以将文件的权限赋予给系统中的其她用户

        每一文件或者目录的访问权限都有三组

        每组用三位表示 每一位分别代表文件的读写和执行权限

    剩下的九位权限:
2、3、4    表示所有者权限
5、6、7    表示所属用户组权限
8、9、10    是其她用户的权限

        如下所示在 Android 根目录下使用 ls -l 命令查看 boot 目录的权限信息:

cmcc_jiangsu:/ # ls -alh | grep boot
drwxr-xr-x   2 root   root      0 1970-01-01 08:00 boot
drwxrwxr-x   2 system system    0 2015-01-01 08:00 bootfiles
cmcc_jiangsu:/ # 

        解释一下 drwxr-xr-x 的含义:

d    表示是一个目录
rwx    表示文件所有者具有读写执行权限
r-x    表示同组用户具有读取和执行权限
r-x    表示其她用户具有读取和执行权限

————————

数字权限

        很多时候为了方便编写脚本或者使用终端 就会用数字来表示文件的权限!
        读、写、运行三项权限可以用数字表示:

r=4
w=2
x=1

        示例解析:

    一个文件的权限为
rw-rwx-r-x

    代表:
用户具有读写权限 rw- 为 4+2=6
用户组具有读写执行权限 rwx 为 4+2+1=7
其她用户具有读和执行权限    r-x 为 4+1=5

    她的数字表示方法就是
675

        常用权限组合:

444 = r-- r-- r--
644 = rw- r-- r--
666 = rw- rw- rw-
755 = rwx r-x r-x
777 = rwx rwx rwx

——————————

修改文件权限

        可以使用 chmod 修改文件权限 常用来修改脚本和可执行文件的权限:

    修改指定文件权限:
chmod 数字权限 文件名

    示例:
chmod 777 /tmp/1.txt    /* 给该文件最大权限 文件所有者、用户组、其她用户 都具有可读可写可执行权限! */

        具体示例都注释了:

cmcc_jiangsu:/ # cd tmp    /* 进入临时目录 该目录内容重启系统会清空 */
cmcc_jiangsu:/tmp # pwd    /* 查看当前路径 */
/tmp
cmcc_jiangsu:/tmp # ls    /* 查看文件内容 */
capture
cmcc_jiangsu:/tmp # touch cd_1.txt    /* 创建一个测试文件 */
cmcc_jiangsu:/tmp # ls -l    /* 查看所有文件权限 */
total 0
drwxrwxrwt 2 root root 40 2015-01-01 08:00 capture
-rw-rw-rw- 1 root root  0 2022-07-23 15:22 cd_1.txt
cmcc_jiangsu:/tmp # chmod 777 /tmp/cd_1.txt    /* 修改测试文件权限为 777 */
cmcc_jiangsu:/tmp # ls -l
total 0
drwxrwxrwt 2 root root 40 2015-01-01 08:00 capture
-rwxrwxrwx 1 root root  0 2022-07-23 15:22 cd_1.txt
cmcc_jiangsu:/tmp # 

——————————

三种特殊权限

        在 Linux 中除普通权限外还有 3 个特殊权限 SUID/SGID/Sticky

    SUID 权限的作用是使文件的执行者拥有文件的所有者的权限
    所以修改此权限要慎重

    SGID 权限可以作用于目录和文件

    Sticky 权限仅对目录有效
    这个目录下的文件和目录只有 root 与文件的所有者可以删除
    以此达到防止被删除的目的

        其中 suid 权限作用于文件属主
        sgid 权限作用于属组上
        sticky 权限作用于 other/其她 上

%%%%%

suid 权限

        让普通用户临时拥有该文件的属主的执行权限

suid 权限只能应用在二进制可执行文件上 也就是命令

        而且 suid 权限只能设置在属主位置上

        suid 权限使用 s 表示:

chmod u+s 文件    /* 增加权限 */
chmod u-s 文件    /* 移除权限 */

        也可以使用数字形式表示 而且是在原权限的数字表达形式开头加 0 或 4

0 表示去除 suid 权限 例如 0755 移除 suid 权限
4 表示添加 suid 权限 例如 4755 添加 suid 权限

        示例 具体看注释:

cmcc_jiangsu:/tmp # touch si_1.sh    /* 创建测试脚本文件 */
cmcc_jiangsu:/tmp # ls -l si_1.sh    /* 查看脚本文件权限 发现默认权限 666 */
-rw-rw-rw- 1 root root 0 2022-07-23 15:27 si_1.sh
cmcc_jiangsu:/tmp # chmod 4666 si_1.sh    /* 在 666 权限的基础上添加 suid 权限 */
cmcc_jiangsu:/tmp # ls -l si_1.sh    /* 查看脚本权限 */
-rwSrw-rw- 1 root root 0 2022-07-23 15:27 si_1.sh
cmcc_jiangsu:/tmp # chmod 0666 si_1.sh    /* 去除 suid 权限 */
cmcc_jiangsu:/tmp # ls -l si_1.sh    /* 再次查看权限 */
-rw-rw-rw- 1 root root 0 2022-07-23 15:27 si_1.sh
cmcc_jiangsu:/tmp # 

%%%%%

sgid 权限

        sgid 权限一般应用在目录上

当一个目录拥有 sgid 权限时任何用户在该目录下创建的文件的属组都会继承该目录的属组

        sgid 权限只能作用在属组位置上

        sgid 权限也使用 s 表示

	增加权限
g+s

	移除权限
g-s

        sgid 权限也可以使用数字形式表示 而且也是在原权限的数字开头添加

0 表示去除 sgid 权限 例如 0755 移除 sgid 权限
2 表示添加 sgid 权限 例如 2755 添加 sgid 权限

        测试 具体都注释了:

cmcc_jiangsu:/tmp # mkdir si_2    /* 创建测试目录 */
cmcc_jiangsu:/tmp # ls -l | grep si_2    /* 查看文件属性 为 777 */
drwxrwxrwx 2 root root 40 2022-07-23 15:33 si_2
cmcc_jiangsu:/tmp # touch si_2/1.txt    /* 在测试目录下创建一个文件 */
cmcc_jiangsu:/tmp # ls -l si_2/1.txt    /* 查看文件权限为 666 */
-rw-rw-rw- 1 root root 0 2022-07-23 15:34 si_2/1.txt
cmcc_jiangsu:/tmp # chmod 2777 si_2/    /* 为测试目录添加 sgid 权限 */
cmcc_jiangsu:/tmp # ls -l | grep si_2    /* 属组成功置为 s 标志 */
drwxrwsrwx 2 root root 60 2022-07-23 15:34 si_2
cmcc_jiangsu:/tmp # ls -l si_2/1.txt    /* 查看刚刚的测试文件权限 没有变化 */
-rw-rw-rw- 1 root root 0 2022-07-23 15:34 si_2/1.txt
cmcc_jiangsu:/tmp # touch si_2/2.txt    /* 再次创建一个测试文件 */
cmcc_jiangsu:/tmp # ls -l si_2/2.txt    /* 查看文件权限 */
-rw-rw-rw- 1 root root 0 2022-07-23 15:40 si_2/2.txt
cmcc_jiangsu:/tmp # mkdir si_2/siTest    /* 在测试目录下再创建一个测试子目录 */
cmcc_jiangsu:/tmp # ls -l si_2 | grep siTest    /* 查看测试目录权限 子目录属组与父目录的属组一样 这是因为父目录具有 sgid 权限  */
drwxrwsrwx 2 root root 40 2022-07-23 15:43 siTest
cmcc_jiangsu:/tmp # chmod 0777 si_2/siTest    /* 去掉子目录的 sgid 权限 */
cmcc_jiangsu:/tmp # ls -l si_2 | grep siTest    /* 查看子目录发现 s 位已经被还原 */
drwxrwxrwx 2 root root 40 2022-07-23 15:43 siTest
cmcc_jiangsu:/tmp # ls -l | grep si_2    /* 父目录并没有被影响 */
drwxrwsrwx 3 root root 100 2022-07-23 15:43 si_2
cmcc_jiangsu:/tmp #

%%%%%

sticky 权限

        sticky 权限一般针对目录来设置

作用是只允该目录下的文件的创建者删除自己的创建的文件不允许其她人删除文件 root 用户除外 因为是超级管理员

        而且 sticky 权限只能设置在 other 位置上

        sticky 权限使用 t 表示

增加权限 o+t
移除权限 o-t

        sticky 权限也可以使用数字形式表示 而且是在原数字权限开头加 0 或 1

0 表示去除权限 例如 0755 移除 sticky 权限
1 表示添加权限 例如 1755 添加 sticky 权限

        sticky 就不示例了 不过设置 sticky 权限时可能需要使用 -R 参数对目录进行递归操作:

chmod -R 0777 目录
chmod -R 1777 目录

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燃吹

呜呜呜没钱钱吃饭了……

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值