zoukankan      html  css  js  c++  java
  • Linux学习之十四-Linux文件和目录权限

    Linux文件和目录权限

    在Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

    通过设定权限可以从以下三种访问方式限制访问权限:只允许用户自己访问;允许一个预先指定的用户组中的用户访问;允许系统中的任何用户访问。

    Linux中一切皆文件,关于文件的权限所有者分为用户,用户组,其他三类,权限的类别分为r(可读)、w(可写)、x(可执行)三种,其分别对应的权限数值为4、2、1

    修改权限的命令为chmod,修改所属者的命令为chown

    模拟环境:

    创建用户组abc

    创建用户a并指定用户组abc

    创建用户b并指定用户组abc

    创建其他用户test,不指定用户组

    查看创建的用户

    [root@localhost ~]# groupadd abc

    [root@localhost ~]# useradd -g abc a

    [root@localhost ~]# useradd -g abc b

    [root@localhost ~]# useradd test

    [root@localhost ~]# tail -3 /etc/passwd

    a:x:500:500::/home/a:/bin/bash

    b:x:501:500::/home/b:/bin/bash

    test:x:502:502::/home/test:/bin/bash

     

    1. 文件的权限

    1.1使用root用户创建文件,并修改文件的属主和属组

    [root@localhost ~]# mkdir /data

    [root@localhost ~]# touch /data/ceshi.txt

    [root@localhost ~]# chown a.abc /data/ceshi.txt

    [root@localhost ~]# ll /data/ceshi.txt

    -rw-r--r-- 1 a abc 0 Apr 9 21:02 /data/ceshi.txt

    1.2可以发现文件默认的权限位为644,分别修改权限位为754、731,文件变为可执行(颜色变绿)

    [root@localhost ~]# mkdir /data

    [root@localhost ~]# touch /data/ceshi.txt

    [root@localhost ~]# chown a.abc /data/ceshi.txt

    [root@localhost ~]# ll /data/ceshi.txt

    -rw-r--r-- 1 a abc 0 Apr 9 21:02 /data/ceshi.txt

    1.3小结:

    对于普通用户来说,文件具有执行权限的前提是需要具有读的权限

    root用户拥有绝对的权限

    root用户对所有文件都有读写的权限    

    UGO中任何一个有执行权限就等于root用户有执行权限

     

    1. 目录的权限

    2.1使用root用户创建目录,并修改文件的属主和属组

    [root@localhost ~]# mkdir /data/ceshi

    [root@localhost ~]# chown a.abc /data/ceshi

    [root@localhost ~]# touch /data/ceshi/{1..5}

    [root@localhost ~]# ls -ld /data/ceshi

    drwxr-xr-x 2 a abc 4096 Apr 9 21:11 /data/ceshi

    2.2分别切换到不同用户下执行ls命令(检验读权限)、mkdir命令(检验写权限)、cd命令(检验执行权限)

    [root@localhost ~]# su - a

    [a@localhost ~]$ ls /data/ceshi

    1 2 3 4 5

    [a@localhost ~]$ mkdir -p /data/ceshi/6

    [a@localhost ~]$ cd /data/ceshi

    [a@localhost ceshi]$ cd

    [a@localhost ~]$ su

    Password:

    [root@localhost a]# su - b

    [b@localhost ~]$ ls /d

    ls: cannot access /d: No such file or directory

    [b@localhost ~]$ ls /data/ceshi

    1 2 3 4 5 6

    [b@localhost ~]$ mkdir -p /data/ceshi/7

    mkdir: cannot create directory `/data/ceshi/7': Permission denied

    [b@localhost ~]$ cd /data/ceshi

    [b@localhost ceshi]$ cd

    [b@localhost ~]$ su

    Password:

    [root@localhost b]# su - test

    [test@localhost ~]$ ls /data/ceshi

    1 2 3 4 5 6

    [test@localhost ~]$ mkdir -p /data/ceshi/7

    mkdir: cannot create directory `/data/ceshi/7': Permission denied

    [test@localhost ~]$ cd /data/ceshi

    [test@localhost ceshi]$ cd

    [test@localhost ~]$ su

    Password:

    [root@localhost test]# cd

    [root@localhost ~]#

    2.3可以发现

    a        用户具有读写执行权限

    b        用户具有读和执行权限,没有写权限

    test        用户具有读和执行权限,没有写权限

    2.4修改权限位为731,执行同样的命令检验结果,此时

    drwx-wx--x 3 a abc 4096 Apr 9 21:11

    a            用户具有写执行权限,没有读权限

    b            用户具有执行和写权限,没有读权限

    test            用户具有执行权限,没有读和写权限

    2.5修改权限位为754,执行同样的命令检验结果,此时

    drwxr-xr-- 3 a abc 4096 Apr 9 21:11

    a            用户具有写执行权限,没有读权限

    b            用户具有读和执行权限,没有写权限

    test            用户具有读权限,没有写和执行权限

    2.6小结:

    对于普通用户来说,目录的读权限(ls)需要具有执行权限

     

    1. 文件和目录的关系

    目录也是一种文件,目录的block里面存放的就是目录下的文件名和目录名

    block的默认大小为4096字节=4k

     

    1. 读取文件内容的原理

    读取/data/ceshi.txt,会先找到根目录/的inode,通过inode找到根目录的block,在根目录的block中,找到/data目录,通过目录名找到/data目录的inode号,根据inode号,找到/data目录的block,读取/data目录的block,找到文件名为/data/ceshi.txt的文件,找到/data/ceshi.txt的inode号之后,最后再读取/data/ceshi.txt的block,将结果输出到屏幕上。

    1. 权限的掩码

    5.1查看系统掩码配置文件cat /etc/bashrc|sed -n '65,69p'

    相关内容如下

    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then

    umask 002

    else

    umask 022

    fi

    umask 通过控制权限掩码就可以控制默认权限

    umask 查看权限掩码

    umask 0002 修改权限掩码

    5.2基于文件的权限掩码

    umask默认为0022

        0666

    -     0022

    =    0644

    当把umask设置为奇数的时候,系统会自动把算出的奇数位数值加一

    5.3基于目录的权限掩码

    umask默认为0022

        0777

    -     0022

    =    0755

    当把umask设置为奇数的时候,与文件不同的是,系统不会自动加一

     

    博主原创文章,转载请务必注明出处

  • 相关阅读:
    webStorm常用快捷键
    npm 常用指令
    webpack配置详解
    Tornado-StaticFileHandler参考
    python-希尔排序
    python的__init__几种方法总结
    gitlab和github一起使用
    Git的一些知识
    关于Django的理解
    python-快速排序
  • 原文地址:https://www.cnblogs.com/ssgeek/p/9220603.html
Copyright © 2011-2022 走看看