• Linux权限管理.md


    Linux 文件的权限

    Linux文件权限简介

    Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容。具体情况如下:

    # ls -lhi
    总用量 21M
    267246 drwxr-xr-x. 3 root root 4.0K 3月  12 18:12 aaa
    267243 drwxr-xr-x. 2 root root 4.0K 3月  12 17:05 abc
    267245 lrwxrwxrwx. 1 root root   13 3月  12 15:43 bbb -> /tmp/test/abc
    267259 drwxr-xr-x. 2 root root  21M 3月  12 18:04 ddd
    

    在上面的第二列文件属性drwxr-xr-x中第一个是说明文件的类型,关于Linux的文件类型这里不做过多介绍。下面就关于文件类型之后的rwxr-xr-x这九个字符的意义以及在Linux 系统中如何进行设置和使用。

    文件权限说明

    在文件权限的九个字符的意义如下:

    • 左三位:定义user(owner)的权限

    • 中三位:定义group的权限;

    • 右三位:定义other的权限

    关于这九个的文件权限中rwx的意义如下:

    • r:readable, 读

    • w:writable, 写

    • x:excutable,执行

    在文件中rwx的意义:

    • r:可获取文件的数据;

    • w: 可修改文件的数据;

    • x:可将此文件运行为进程;

    在目录中rwx的意义:

    • r:可使用ls命令获取其下的所有文件列表;

    • w: 可修改此目录下的文件列表;即创建或删除文件;

    • x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;

    权限组合机制

    默认显示文件权限二进制显示八进制显示
    --- 000 0
    --x 001 1
    -w- 010 2
    -wx 011 3
    r-- 100 4
    r-x 101 5
    rw- 110 6
    rwx 111 7

    Linux 文件权限命令

    chmod

    chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。

    命令格式

    chmod [OPTION]... MODE[,MODE]... FILE...
    chmod [OPTION]... OCTAL-MODE FILE...
    chmod [OPTION]... --reference=RFILE FILE...
    

    命令参数

    • -c 当发生改变时,报告处理信息

    • -f 错误信息不输出

    • -R 处理指定目录以及其子目录下的所有文件

    • -v 运行时显示详细处理信息

    选择参数

    • --reference=<目录或者文件> 设置成具有指定目录或者文件具有相同的权限

    • --version 显示版本信息

    • <权限范围>+<权限设置> 使权限范围内的目录或者文件具有指定的权限

    • <权限范围>-<权限设置> 删除权限范围的目录或者文件的指定权限

    • <权限范围>=<权限设置> 设置权限范围内的目录或者文件的权限为指定的值

    权限范围:

    • u :目录或者文件的当前的用户

    • g :目录或者文件的当前的群组

    • o :除了目录或者文件的当前用户或群组之外的用户或者群组

    • a :所有的用户及群组

    权限代号

    • r :读权限,用数字4表示

    • w :写权限,用数字2表示

    • x :执行权限,用数字1表示

    • - :删除权限,用数字0表示

    • s :特殊权限

    命令使用

    命令有两种用法,一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

    文字设定法

    chmod [who] [+ | - | =] [mode] 文件名
    

    数字设定法

    我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
    数字设定法的一般形式为:

    chmod [mode] 文件名
    

    数字与字符对应关系如下:
    r=4,w=2,x=1
    若要rwx属性则4+2+1=7
    若要rw-属性则4+2=6;
    若要r-x属性则4+1=7。

    chown

    chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限。通过chown改变文件的拥有者和群组。在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。

    命令格式

    chown [选项]... [所有者][:[组]] 文件...
    

    命令参数

    • -c 显示更改的部分的信息

    • -f 忽略错误信息

    • -h 修复符号链接

    • -R 处理指定目录以及其子目录下的所有文件

    • -v 显示详细的处理信息

    • -deference 作用于符号链接的指向,而不是链接文件本身

    • --reference=<目录或文件> 把指定的目录/文件作为参考,把操作的文件/目录设置成参考文件/目录相同拥有者和群组

    • --from=<当前用户:当前群组> 只有当前用户和群组跟指定的用户和群组相同时才进行改变

    思考题:
    用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文件?
    不能修改文件中的内容,但是可以删除和复制文件。

    umask

    umask是用来设置文件的权限反向掩码,遮罩码。在文件的设置为666-umask,在目录中的设置为777-umask。之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1;当umask = 023,则文件的属性为666-023=644,目录的属性为777-023=754

    SUID、SGID、SBIT权限说明

    前面我们学习了Linux的文件常用权限可写(w)、可读(r)、可执行(x)、同时通过chmod命令可以管理文件的权限,而在日常的操作中还有三种权限及SUID、SGID、sticky-bit,而这三种权限也是通过chmod命令来进行管理。下面就对这三种权限进行介绍。

    SUID

    当s出现在文件拥有者的x权限位置上时,如我们上面看到的/usr/bin/passwd这个文件的权限时-rwsr-xr-x,此时就被称为SET UID简称SUID。SUID对于一个文件有什么限制和功能呢?

    • SUID权限仅对二进制可执行文件有效

    • 执行者对于该文件具有x的权限

    • 本权限仅在执行该文件的过程中有效

    • 执行者将具有该文件拥有者的权限

    说明:例如普通用户用passwd修改自己的命令,实际上最终更改的是/etc/passwd文件。此文件时用户管理配置文件,只有root权限才能更改。

    SGID

    当s出现在目录或文件所属组的x权限位置上时,此时就称为SET GID简称SGID,那SGID对文件和目录分部有哪些功能呢?

    SGID对目录:

    • 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录

    • 使用者在此目录下的群组将会变成该目录的群组

    • 若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同

    SGID对文件:

    • SGID 对二进制可执行文件有效

    • 程式执行者对于该文件来说,需具备 x 的权限

    • 执行者在执行的过程中将会获得该文件群组的支援(用于改文件群组的权限)

    SBIT

    当t出现在目录其他用户的x权限位置上时,此时就称为Sticky Bit简称SBIT,那SBIT有哪些限制和作用呢?

    • 仅对目录有效,对文件无效

    • 当使用者在该目录下建立文件或目录时(有权限的情况下),仅自己与 root 才有权力删除新建的目录或文件

    设置SUID、SBID、SBIT属性

    操作这些标志与操作文件权限的命令是一样的,都是 chmod。有两种方法来操作:

    符号类型改变权限

    • chmod u+s testbin-- 为testbin文件加上setuid标志.

    • chmod g+s testdir-- 为testdir目录加上setgid标志

    • chmod o+t testdir-- 为testdir目录加上sticky标志

    数字类型改变档案权限

    采用八进制方式. 对一般文件通过三组八进制数字来置标志, 如 666, 777, 644等. 如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字. 如 4666, 2777等. 这一组八进制数字三位的意义如下:
    abc

    • a - setuid位, 如果该位为1, 则表示设置setuid 4---

    • b - setgid位, 如果该位为1, 则表示设置setgid 2---

    • c - sticky位, 如果该位为1, 则表示设置sticky 1---

    设置完这些标志后, 可以用 ls -l 来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如:

    • rwsrw-r-- 表示有setuid标志

    • rwxrwsrw- 表示有setgid标志

    • rwxrw-rwt 表示有sticky标志

    那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)

    lsattr、chattr

    有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。如果要查看被chattr改变的文件属性,需用lsattr命令。

    这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下模式:

    • A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。

    • a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。

    • c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。

    • d:即no dump,设定文件不能成为dump程序的备份目标。

    • i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件系统的安全设置有很大帮助。

    • j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。

    • S:硬盘I/O同步选项,功能类似sync。

    • s:保密性地删除文件或目录,即硬盘空间被全部收回。

    • u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。

    chattr命令参数说明

    • -R 递归处理,将指定目录下的所有文件及子目录一并处理。

    • -v<版本编号> 设置文件或目录版本。

    • -V 显示指令执行过程。

    • +<属性> 开启文件或目录的该项属性。

    • -<属性> 关闭文件或目录的该项属性。

    • =<属性> 指定文件或目录的该项属性。
      ‘’

    lsattr命令参数

    • -a  显示所有文件和目录,包括以"."为名称开头字符的额外内建,现行目录"."与上层目录".."。

    • -d  显示,目录名称,而非其内容。

    • -l  此参数目前没有任何作用。

    • -R  递归处理,将指定目录下的所有文件及子目录一并处理。

    • -v  显示文件或目录版本。

    • -V  显示版本信息。

    文件ACL权限设置

    ACL即Access Control List 主要的目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。如,某一个文件,不让单一的某个用户访问。
    控制命令:

    • getfacl:取得某个文件/目录的ACL设置项目

    • setfacl:设置某个文件/目录的ACL设置项目

    setfacl 参数

    • -m:设置后续acl参数

    • -x:删除后续acl参数

    • -b:删除全部的acl参数

    • -k:删除默认的acl参数

    • -R:递归设置acl,包括子目录

    • -d:设置默认acl

    使用举例:
    在linux系统中我们在用普通用户(cangls)编辑文本文件时,可能要编辑别的普通用户(bols)的文件,通常情况下我们会想到下面两个解决方法:1、用root用户把普通用户(cangls)添加到要编辑文件的所属组(bols)中,然后可以更加属组的写权限就可以编辑文件。2、若我们不想用root用户更改权限则可以让被编辑文件所属主(bols)在文本的other权限中添加写权限。上面的两个解决方法虽然都能可以解决问题但是root权限在生产服务器上一般不会随便登录的,而第二种虽然能解决问题但由于其他用户也有写权限,若被有心人利用就得不偿失了,今天就向大家介绍个能同时避免上面两个问题的解决方法即使用setfacl命令。
    使用setfacl命令赋予的属主的权限进行更改文件:

    [bols@hpf-linux test]$ getfacl bols.txt
    # file: bols.txt
    # owner: bols
    # group: bols
    user::rw-
    group::rw-
    other::r--
    [bols@hpf-linux test]$ setfacl -m u:cangls:rw- /tmp/test/bols.txt
    Try `getfacl --help' for more information.
    [bols@hpf-linux test]$ getfacl bols.txt
    # file: bols.txt
    # owner: bols
    # group: bols
    user::rw-
    user:cangls:rw-
    group::rw-
    mask::rw-
    other::r--
    [bols@hpf-linux test]$ ls -l bols.txt
    -rw-rw-r--+ 1 bols bols 12 7月   9 08:33 bols.txt
    [cangls@hpf-linux test]$ echo "cangls" > bols.txt
    [cangls@hpf-linux test]$ cat bols.txt
    cangls
    [bols@hpf-linux test]$ setfacl -x u:cangls bols.txt    //取消权限
    [bols@hpf-linux test]$ getfacl bols.txt
    # file: bols.txt
    # owner: bols
    # group: bols
    user::rw-
    group::rw-
    mask::rw-
    other::r--
    [cangls@hpf-linux test]$ echo "bols" > bols.txt
    -bash: bols.txt: 权限不够
    

    使用setfacl命令赋予的属组的权限进行更改文件:

    [bols@hpf-linux test]$ setfacl -m g:cangls:rwx bols.txt
    [bols@hpf-linux test]$ getfacl bols.txt
    # file: bols.txt
    # owner: bols
    # group: bols
    user::rw-
    group::rw-
    group:cangls:rwx
    mask::rwx
    other::r--
    [bols@hpf-linux test]$ ls -l bols.txt
    -rw-rwxr--+ 1 bols bols 12 7月   9 08:33 bols.txt
    [cangls@hpf-linux test]$ echo "bols" >> bols.txt
    [cangls@hpf-linux test]$ cat bols.txt
    cangls
    bols
    [bols@hpf-linux test]$ setfacl -x g:cangls bols.txt
    [bols@hpf-linux test]$ getfacl bols.txt
    # file: bols.txt
    # owner: bols
    # group: bols
    user::rw-
    group::rw-
    mask::rw-
    other::r--
    [cangls@hpf-linux test]$ echo "bols" > bols.txt
    -bash: bols.txt: 权限不够
    

    -R递归目录用法举例:

    [bols@hpf-linux tmp]$ setfacl -R -m  u:cangls:rwx /tmp/test/
    [bols@hpf-linux tmp]$ getfacl /tmp/test/bols.txt
    getfacl: Removing leading '/' from absolute path names
    # file: tmp/test/bols.txt
    # owner: bols
    # group: bols
    user::rw-
    user:cangls:rwx
    group::rw-
    mask::rwx
    other::r--
    [bols@hpf-linux tmp]$ getfacl /tmp/test/
    getfacl: Removing leading '/' from absolute path names
    # file: tmp/test/
    # owner: bols
    # group: bols
    user::rwx
    user:cangls:rwx
    group::rwx
    mask::rwx
    other::r-x
    
    [bols@hpf-linux tmp]$ ls -ld test/
    drwxrwxr-x+ 2 bols bols 4096 7月   9 08:00 test/
    [cangls@hpf-linux test]$ echo "cangls" >> bols.txt
    [cangls@hpf-linux test]$ cat bols.txt
    cangls
    bols
    cangls
    
  • 相关阅读:
    Redis
    cz_health_day13项目实战
    cz_health_day11
    cz_health_day10
    cz_health_day09
    cz_health_day08
    MySQL8管理系列之二:从5.5升级到8的问题处理
    MySQL8管理系列之一:Mysql 8.0以后版本的安装
    MySQL 5.5.x 数据库导入到 8.0.x 服务器
    修改Mysql 8.0版本的默认数据库目录
  • 原文地址:https://www.cnblogs.com/cuchadanfan/p/6195882.html
Copyright © 2020-2023  润新知