美文网首页
6. Linux 文件权限

6. Linux 文件权限

作者: 独木舟的木 | 来源:发表于2019-02-05 20:00 被阅读2次

    [TOC]

    Unix 系统的特性:多任务、多用户系统。

    文件读取、写入和执行

    对于文件和目录的访问权限是根据读访问,写访问,和执行访问来定义的。

    文件属性

    1. 第一列10个字符——文件的属性

    列表的前十个字符是文件的属性,这十个字符的第一个字符表明文件类型。Linux 中一共有 7 种文件类型:

    属性 文件类型
    - 普通文件
    d 目录文件
    l 符号链接,注意对于符号链接文件,剩余的文件属性总是 "rwxrwxrwx",而且都是虚拟值。真正的文件属性是指符号链接所指向的文件的属性。
    c 字符设备文件。这种文件类型是指按照字节流,来处理数据的设备。 比如说终端机,或者调制解调器。
    b 块设备文件。这种文件类型是指按照数据块,来处理数据的设备,例如一个硬盘,或者 CD-ROM 盘。
    s 本地域套接字文件(socket),用于进程间通信。
    p 有名管道
    • 剩下的九个字符,叫做文件模式,代表着文件所有者,文件组所有者,和其他人的读,写,执行权限。
    • 后边的 9 位,每三个为一组。均为 rwx 三个参数的组合。其中 r 代表可读,w 代表可写,x 代表可执行。
      • 前三位:所属主(user,即文件的拥有者)的权限;
      • 中间三位:所属组(group,即该文件所属主所在的一个组)的权限;
      • 最后三位:其他非本群组(others)的权限;
    • 对于一个目录来讲,打开这个目录即为执行这个目录,所以任何一个目录必须要有 x 权限才能打开并查看该目录。

    2. 第 2 列——连接占用的节点(inode)

    若为目录时,通常与该目录下还有多少子目录有关系,关于连接(link)在以后章节详细介绍。

    3. 第 3 列——该文件的所属主

    4. 第 4 列——该文件的所属组

    5. 第 5 列——该文件的大小

    6. 第 6、7、8 列

    该文件的创建日期或者最近的修改日期,分别为月份日期以及时间。

    7. 第 9 列——文件名

    如果前面有一个. 则表示该文件为隐藏文件。

    chmod 更改文件模式

    • 更改文件或目录的模式(权限),可以利用 chmod 命令。
    • 只有文件的所有者或者超级用户才能更改文件或目录的模式。
    • chmod 命令支持两种不同的方法来改变文件模式:八进制数字表示法、符号表示法。

    1⃣️ 八进制表示法

    • 使用八进制数字来设置所期望的权限模式。
    • 使用用八进制表示法来表示3个二进制数非常有优势。
    • 通过使用 3 个八进制数字,可以设置文件所有者,用户组,和其他人的权限
    Octal Binary File Mode
    0 000 ---
    1 001 --x
    2 010 -w-
    3 011 -wx
    4 100 r--
    5 101 r-x
    6 110 rw-
    7 111 rwx

    语法:chmod [-R] xyz 文件名,(xyz表示数字,777)

    r=4,w=2,x=1,-=0,默认目录权限755(drwxr-xr-x)、默认文件权限644(-rw-r--r--)。

    权限符 读取(r) 写入(w) 执行(x)
    八进制 4 2 1

    如果你创建了一个目录,而该目录不想让其他人看到内容,则只需设置成 rwxr----- (740) 即可。

    # 修改私钥文件权限为只读属性
    chmod 400 ~/.ssh/mykeypair.pem
    

    2⃣️ 符号表示法

    • 符号表示法分为三部分:更改会影响谁,要执行哪个操作,要设置哪种权限。
    • 通过字符 “u”,“g”,“o”,and “a” 的组合来指定要影响的对象。
    • 符号表示法的优点:允许你设置文件模式的单个组成部分的属性,而没有影响其他的部分。
    字符 描述
    u user,文件或目录的所有者。
    g group,用户组。
    o others,其他所有的人。
    a all,是 “u”,“g”,和 “o” 三者的联合。

    如果没有指定字符,则假定使用 “all”。执行的操作可能是一个 “+” 字符,表示加上一个权限, 一个 “-”,表示删掉一个权限,或者是一个 “=”,表示只有指定的权限可用,其它所有的权限被删除。

    chmod 符号表示法示例 作用
    u+x 为文件所有者添加可执行权限。
    u-x 删除文件所有者的可执行权限。
    +x 为文件所有者,用户组,和其他所有人添加可执行权限。等价于 a+x。
    o-rw 除了文件所有者和用户组,删除其他人的读权限和写权限。
    go=rw 给群组的主人和任意文件拥有者的人读写权限。如果群组的主人或全局之前已经有了执行的权限,他们将被移除。
    u+x,go=rw 给文件拥有者执行权限并给组和其他人读和执行的权限。多种设定可以用逗号分开。

    语法:用户组+/-权限 、 用户组=权限、用户组1=用户组2

    # 用户组+/-权限 
    $ chmod u+x days    # 增加属主对文件的执行权限
    $ chmod a-x days    # 删除所有人对文件的执行权限
    
    # 用户组=权限
    $ chmod ug=rw,o=r days    # 赋予属主和属组的读取/写入权限,其他人只有读取权限
    
    # 用户组1=用户组2
    $ chmod o=u days   # 设置其他人的权限与属主权限完全相同
    

    umask 设置默认的文件权限

    • umask 命令使用八进制表示法来表达:从文件模式属性中删除一个位掩码
    • umask 命令设置的掩码值只能在当前 shell 会话中生效,若当前 shell 会话结束后,则必须重新设置。

    检查创建文件的默认权限掩码:

    # 默认以八进制形式显示当前的掩码
    $ umask
    0022
    
    # 以字符形式显示当前的掩码
    $ umask -S
    u=rwx,g=rx,o=rx
    
    $ touch test01.txt
    -rw-r--r--  1 root    root         0 Jan 14 14:18 test01.txt
    

    掩码 0022 的含义:

    umask 的过程 示例 示例 示例 示例
    初始文件模式 --- rw- rw- rw-
    掩码(0022) 000 000 010 010
    结果(rw-r--r--) --- rw- r-- r--

    解读:掩码的二进制形式中,出现数字 1 的位置,相应地关掉该位置的文件模式权限。

    chattr 修改文件的特殊属性

    lsattr 列出文件/目录的特殊属性

    语法:lsattr -[aR] [文件/目录名]

    参数 含义
    -a 类似与 ls 的 -a 选项,即连同隐藏文件一同列出;
    -R 连同子目录的数据一同列出

    su 以另一个用户的身份来运行 shell

    语法:su [-[l]] [user]

    • 如果包含 "-l" 选项,加载此用户的 shell 环境,并且工作目录会更改到这个用户的主目录。
    • 如果不指定用户,那么就假定是超级用户。
    • 选项 "-l" 可以缩写为 "-"

    ⚠️ Ubuntu Linux 的限制非常严格,必须使用 sodu -s 来获得 root 访问权。

    $ sudo -s    # 将自己提升为root用户 (💡💡💡Ubuntu Linux 系统💡💡💡)
    $ su         # 同上
    $ su -       # 同上
    $ su alice   # 切换到 alice 账户
    
    $ su -c 'command' # 只执行单个命令
    
    $ exit       #回到先前的用户状态
    

    sudo 以另一个用户的身份来执行命令

    • 管理员能够配置 sudo 命令,从而允许一个普通用户以不同的身份(通常是超级用户),通过一种非常可控的方式来执行命令。
    • sudo 命令不要求超级用户的密码。使用 sudo 命令时,用户使用他/她自己的密码来认证。
    • susudo 之间的一个重要区别是:sudo 不会重新启动一个 shell,也不会加载另一个用户的 shell 运行环境。

    查看 sudo 命令可以授予哪些权限:

    $ sudo -l
    Matching Defaults entries for root on localhost:
        env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
    
    User root may run the following commands on localhost:
        (ALL : ALL) ALL
    

    需要 root 预先配置 /etc/sudoers

    yum install -y sudo    # 安装 visudo 命令
    visudo                 # 使用 visudo 命令编辑 sudo 配置文件
    
    # root 用户可以使用 sudo 在任何机器上(第一个ALL)以任何用户身份(第二个ALL)执行任何命令(第三个ALL)
    root ALL=(ALL) ALL
    %wheel ALL=(ALL) ALL    # 所属组权限设置,wheel 组的所有用户都拥有 sudo 权利
    test ALL=(ALL) ALL      # 所属主权限设置,test 用户拥有 sudo 权利
    

    sudo 配置文件 / etc/sudoers 详解及实战用法

    sudoers 的深入介绍与用户权限控制

    chown 更改文件所有者和用户组

    chown 命令被用来更改文件或目录的所有者和用户组,使用这个命令需要超级用户权限。
    格式:chown [owner][:[group]] file...
    参数:-R 改变一个目录及其下所有文件(和子目录)的所有权设置。

    示例 结果
    chown bob 把文件所有者从当前属主更改为用户 bob。
    chown bob:users 把文件所有者改为用户 bob,文件用户组改为用户组 users。
    chown :admins 把文件用户组改为组 admins,文件所有者不变。⚠️ 注意 :不能省略
    chown bob: 文件所有者改为用户 bob,文件用户组改为,用户 bob 登录系统时,所属的用户组。

    chgrp 更改文件组所有权

    在旧版 Unix 系统中,chown 命令只能更改文件所有权,而不是用户组所有权。为了达到目的, 使用一个独立的命令,chgrp 来完成。

    语法:chgrp [组名] [文件名]

    参数:-R :改变一个目录及其下所有文件(和子目录)的所有权设置。

    相关文章

      网友评论

          本文标题:6. Linux 文件权限

          本文链接:https://www.haomeiwen.com/subject/ribvsqtx.html