zoukankan      html  css  js  c++  java
  • linux 文件夹权限及umask

    先创建一个目录,看看权限:

    $ ll
    总用量 20
    drwxrwxr-x   3 huangxm huangxm  4096  2月 16 16:35 ./
    drwxr-xr-x 128 huangxm huangxm 12288  2月 16 16:35 ../
    drwxrwxr-x   2 huangxm huangxm  4096  2月 16 16:35 test/

    然后我们将权限更改为444, 即所有都是r权限

    $ ll
    总用量 20
    drwxrwxr-x   3 huangxm huangxm  4096  2月 16 16:35 ./
    drwxr-xr-x 128 huangxm huangxm 12288  2月 16 16:35 ../
    dr--r--r--   2 huangxm huangxm  4096  2月 16 16:35 test/

    进入目录试一下

    $ whoami
    huangxm
    $ cd test
    bash: cd: test: 权限不够
    huangxm@huanghao-Virtual-M

    没有权限进入目录,看来只有r权限是不行的,那我们再加上w权限

    $ ll
    总用量 20
    drwxrwxr-x   3 huangxm huangxm  4096  2月 16 16:35 ./
    drwxr-xr-x 128 huangxm huangxm 12288  2月 16 16:35 ../
    drw-rw-r--   2 huangxm huangxm  4096  2月 16 16:35 test/

    再cd进入目录试一下

    $ cd test
    bash: cd: test: 权限不够
    看来还是不行。那我们就加上X权限 吧
    $ ll
    总用量 20
    drwxrwxr-x   3 huangxm huangxm  4096  2月 16 16:35 ./
    drwxr-xr-x 128 huangxm huangxm 12288  2月 16 16:35 ../
    dr-xr-xr--   2 huangxm huangxm  4096  2月 16 16:35 test/

    再cd进入目录:

    $ cd test
    $ pwd
    /home/huangxm/测试目录/test

    看来只有读权限是没有办法进入目录的,只有rw权限也是不能进入目录的,所以一定要x权限都有才可以。

    所以一般情况下,系统里的文件夹都是755权限,允许所有用户进入文件夹。

    那我们在test目录下新建一个文件a.txt,并将test目录权限改为766,使所有用户都有rw权限。

    $ ll
    总用量 20
    drwxrwxr-x   3 huangxm huangxm  4096  2月 16 16:35 ./
    drwxr-xr-x 128 huangxm huangxm 12288  2月 16 16:35 ../
    drwxrw-rw-   2 huangxm huangxm  4096  2月 16 16:53 test/
    
    $ ll
    总用量 8
    drwxrw-rw- 2 huangxm huangxm 4096  2月 16 16:53 ./
    drwxrwxr-x 3 huangxm huangxm 4096  2月 16 16:35 ../
    -rw-r--r-- 1 root    root       0  2月 16 16:53 a.txt

    可以看到test文件夹所有用户都有w权限 , a.txt文件除root之外都只有r权限,现在我们以其它用户尝试修改一下

    d
    fd
    fd
    f
    ffffffffff
    E45: 已设定选项 'readonly' (请加 ! 强制执行)

    强制保存一下,发现保存成功了。再打开文件看看

    $ cat a.txt
    ijfeihifh
    f
    e
    f
    ef
    e
    fe
    f
    ef
    内容已经保存了。。明明文件是没有写入权限的,但是可以强制写入,而且可以删除文件,所以文件夹给w权限是相当危险的事情。

    总结一下:

    权限 操作
    r cd
    rx cd ls
    wx cd touch rm(self,other) vi(self,other)
    wxt cd touch  rm(self)  vi(self)

    理一下思路:

    1. 使用root用户创建目录test , 并给others  wx权限,并创建a,b,c三个文件

    # mkdir test
    #chmod o=wx test
    # touch test/{a,b,c}

    查看一下, a,b,c是属于root的

    -rw-r--r-- 1 root    root       0  2月 16 18:00 a
    -rw-r--r-- 1 root    root       0  2月 16 18:00 b
    -rw-r--r-- 1 root    root       0  2月 16 18:00 c

    2. 切换到普通用户身份,尝试删除a

    $ rm -f a

    到root用户下ll看一下,普通用户wx没有ls权限

    # ll
    总用量 8
    drwxr-x-wx 2 root    root    4096  2月 16 18:01 ./
    drwxrwxr-x 3 huangxm huangxm 4096  2月 16 17:56 ../
    -rw-r--r-- 1 root    root       0  2月 16 18:00 b
    -rw-r--r-- 1 root    root       0  2月 16 18:00 c

    a已经被删掉了

    3. 以普通用户vi b,修改后强制保存,也是可以的。

    4. 到root用户下,给test目录加个o=t权限

    # chmod o+t test
    # ls -l
    总用量 4
    drwxr-x-wt 2 root root 4096  2月 16 18:02 test

    到普通用户下,尝试删除b

    $ rm -f b
    rm: 无法删除"b": 不允许的操作

    加了t权限后已经无法删除别人的文件了。再尝试vi一下

    "b" E212: 无法打开并写入文件
    请按 ENTER 或其它命令继续

    即使加!强制保存也不行了。

    那么用数字形式怎么加t权限呢,比如tmp目录,这是个临时目录,所有人都需要往里放东西,所以它是777的权限,但是想一下,如果root放进去的东西,那别的用户是不是也可以修改,那就不合理了。所以tmp目录需要有个t权限,不允许其它用户修改,使用数字形式就是:

    #chmod 1777 /tmp

    umask:

    每个用户在创建文件和文件夹的时候,都会给予文件和文件夹一个默认权限 ; 默认权限就是根据各用户的umask值来确定的。我们用root和普通用户创建文件和文件夹看看权限:

    drwxr-xr-x 2 root    root    4096  2月 17 11:15 rootdir
    -rw-r--r-- 1 root    root       0  2月 17 11:15 rootfile
    drwxrwxr-x 2 huangxm huangxm 4096  2月 17 11:15 userdir
    -rw-rw-r-- 1 huangxm huangxm    0  2月 17 11:15 usertouch

    可以看出root用户创建的文件夹权限是755 ,创建的文件权限是644;普通用户创建的文件夹权限是775,创建的文件权限是664

    分别查看一下root和普通用户的umask值

    # umask
    0022
    $ umask
    0002

    root的umask是022  , 普通用户的是002

    文件夹的权限 777 – 022 = 755 , 文件权限 666 – 022 = 644

    我们可以这么理解,文件夹权限就是777 – umask     文件权限就是666 – umask

    但并不是真的是减法,实际上是掩码,尝试一下将umask值设为777 (在当前用户下umask 777可以设置),那么文件权限是000,并不是-1

  • 相关阅读:
    CRM 客户线索 与 销售人员
    CRM X
    MySQL为Null导致的5大坑
    搞懂 macOS 上的主机名/hostname/ComputerName
    Node服务中如何写日志?
    Linux下 iptables 超详细教程和使用示例
    精读《Prisma 的使用》
    Redis夺命20问
    redis HyperLogLog的使用
    聊聊redis分布式锁的8大坑
  • 原文地址:https://www.cnblogs.com/huangxm/p/5196263.html
Copyright © 2011-2022 走看看