zoukankan      html  css  js  c++  java
  • Linux

    一:基本权限

    1.基本权限介绍

    基本权限类型

    类型 全拼 释义 权限位
    r read 可读 4
    w write 可写 2
    x execute 可执行 1

    权限的归属

    归属 字母
    属主 u
    属组 g
    其他用户 o

    2.设置权限

    修改属主、属组

    # 修改文件:1.txt的 属主为:darker 属组为:human
    [root@localhost ~]# chown darker.human 1.txt
    
    
    # 修改文件:1.txt的 属主为:darker 
    [root@localhost ~]# chown darker 1.txt
    
    
    # 修改文件:1.txt的 属组为:human
    [root@localhost ~]# chown .human 1.txt
    
    
    # 递归修改目录:file1的 属主为:darker 属组为:human
    [root@localhost ~]# chown -R darker.human file1
    

    修改u、g、o对应的权限

    # 加减法
    # 修改文件:1.txt的权限为:属主为u 属组为w
    [root@localhost ~]# chmod u+x,g-w 1.txt
    
    
    # 赋值法
    # 修改文件:1.txt的权限为:所有用户为rwx
    [root@localhost ~]# chmod a=rwx 1.txt
    
    # 修改文件:1.txt的权限为:-
    [root@localhost ~]# chmod a=- 1.txt
    
    # 修改文件:1.txt的权限为:属主属组为rw 其他用户为r
    [root@localhost ~]# chmod ug=rw,o=r 1.txt
    
    
    # 数字
    # 修改文件:1.txt的权限为:所有用户的权限为rwx
    [root@localhost ~]# chmod 777 1.txt
    
    # 递归修改目录:file1的权限为:所有用户的权限为rwx
    [root@localhost ~]# chmod 777 file1
    

    注意:把某一个非属主用户添加到文件的属组里,他就拥有了该组的权限,而不再是其他人

    权限对文件/目录的意义

    文件:ls -l 文件名

    权限 释义
    r 可以cat读取文件内容
    w 可以修改文件
    x 可以执行文件代码,如果该文件的代码是编译好的结果
    那么只有x权限即可执行
    但如果该文件的代码是一个解释型的脚本程序
    则需要配合r权限才可执行

    目录:ls -dl 文件名

    权限 释义
    r 可以ls浏览文件下的内容
    w 可以在目录下创建新文件or目录
    x 可以执行目录下的程序,除了对目录有执行权限外,还要对程序文件有执行权限才行
    可以正常cd切换到目录下
    涉及到多层目录如/a/b/c,需要对每一级都有x权限才可以正常走到下一级

    对文件夹的操作(不操作文件内容),需要当前用户具备的权限

    • 对沿途所有文件夹有x权限
    • 对目标文件夹有r或w权限
    权限 释义
    r 可以浏览
    w 可以创建、删除、移动子文件和子目录

    对文件的操作(操作文件内容),需要当前用户具备的权限

    • 对沿途所有文件夹有x权限
    • 对目标文件有r或w权限
    权限 释义
    r 可以读取文件内容
    w 可以修改文件内容
    注意点:

    vim修改的原理是将原文件删掉,然后再将内容的内容覆盖写入了新文件,新文件名重命名为原文件名

    验证vim修改的原理

    # (root用户)切换到/usr/local目录
    [root@localhost local]# cd /usr/local
    
    
    # (root用户)递归创建test01/dir1目录
    [root@localhost local]# mkdir -p test01/dir1
    
    
    # (root用户)递归修改目录test01权限为733
    [root@localhost local]# chmod -R 733 test01
    
    
    # (root用户)在test01目录下创建1.txt并写入内容“123”
    [root@localhost local]# echo "123" > test01/1.txt
    
    
    # (root用户)查看1.txt的内容
    [root@localhost local]# cat test01/1.txt
    123
    
    
    # (root用户)查看test01目录下的文件1.txt的详情信息:其他用户只有(r)读的权限
    [root@localhost local]# ll test01/1.txt
    -rw-r--r--. 1 root root 4 Nov 25 10:02 test01/1.txt
    
    
    # (root用户)查看test01目录下的文件1.txt的iNode信息
    [root@localhost local]# stat test01/1.txt
      File: ‘test01/1.txt’
      Size: 4               Blocks: 8          IO Block: 4096   regular file
    Device: fd00h/64768d    Inode: 23609       Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:usr_t:s0
    Access: 2020-11-25 10:02:58.471562017 -0500
    Modify: 2020-11-25 10:02:58.471562017 -0500
    Change: 2020-11-25 10:02:58.471562017 -0500
     Birth: -
    
    
    
    # 切换到其他用户/用其他用户登录
    PS C:UsersDarker> ssh darker@192.168.50.101
    darker@192.168.50.101's password:
    [darker@localhost ~]$ whoami
    darker
    
    
    # (普通用户)用vim打开/usr/local/test01目录下的1.txt
    [darker@localhost ~]$ vim /usr/local/test01/1.txt
    123
    ~  
    ~ 
    ~ 
    "/usr/local/test01/1.txt" [readonly] 1L,   4C   1,1   All	# [readonly] 只读
    
    # 按i进入插入模式
    -- INSERT -- W10: Warning: Changing a readonly file
    
    
    # (普通用户)修改1.txt的内容,强制保存并退出
    456
    Esc
    :wq!
    
    
    
    # 回到原来的root用户的窗口
    # (root用户)查看1.txt的内容
    [root@localhost local]# cat test01/1.txt
    456
    
    
    # (root用户)查看test01目录下的文件1.txt的详情信息:属主和属主变了
    [root@localhost local]# ll test01/1.txt
    -rw-r--r--. 1 darker darker 4 Nov 25 10:21 test01/1.txt
    
    
    # (root用户)查看test01目录下的文件1.txt的iNode信息
    [root@localhost local]# stat test01/1.txt
      File: ‘test01/1.txt’
      Size: 4               Blocks: 8          IO Block: 4096   regular file
    Device: fd00h/64768d    Inode: 23609       Links: 1
    Access: (0644/-rw-r--r--)  Uid: ( 1000/  darker)   Gid: ( 1000/  darker)
    Context: unconfined_u:object_r:usr_t:s0
    Access: 2020-11-25 10:30:54.822530748 -0500
    Modify: 2020-11-25 10:21:17.823541511 -0500
    Change: 2020-11-25 10:21:17.824541511 -0500
     Birth: -
    

    结论

    vim修改文件时:会将原文件删除,生成新的文件,属主和主组会变成修改的那个用户和用户所在的组

    二:特殊权限

    权限 权限位
    SUID 4
    SGID 2
    SBIT 1

    SUID

    1.疑问

    普通用户既不是root也不属于root组,因此 它对/etc/shadow文件没有任何权限(全是---
    # 查看/etc/shadow信息
    [darker@localhost ~]# ll /etc/shadow
    ----------. 1 root root 970 Nov 24 07:29 /etc/shadow
    
    但是:普通用户为何可以用passwd直接修改密码?并且修改的是/etc/shadow文件,如何实现的?
    [darker@localhost ~]$ ll `which passwd`
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    
    这里可以看到,本应为rwx的第三个x变成了s,这就是s权限

    2.s权限的特殊之处

    • SUID权限仅对二进制可执行文件有效(对目录无效
    • 如果执行者对于该二进制可执行文件具有x的权限,执行者将具有该文件的所有者的权限
    • 本权限 仅在执行该二进制可执行文件的过程中有效

    3.权限设定的方法

    • 字母表示法
    chmod u+s 可执行文件	# 给属主添加s权限
    chmod u-s 可执行文件	# 删除属主的s权限
    
    • 数字表示法第1位4表示SUID后3位表示普通权限 rwx
    chmod 4755 可执行文件	# 添加SUID权限到二进制可执行文件
    chmod 0xxx ...			# 可以删除文件的SUID(但是无法删除目录的SUID)
    

    4.实例

    # (root用户)查看which cat
    [root@localhost ~]# ll `which cat`
    -rwxr-xr-x. 1 root root 54048 Nov 20  2015 /usr/bin/cat
    
    
    # (普通用户)查看/etc/shadow:没有权限(普通用户虽然是r-x,但是无法直接查看)
    [darker@localhost local]$ cat /etc/shadow
    cat: /etc/shadow: Permission denied
    
    
    # (root用户)修改 which cat 权限
    [root@localhost ~]# chmod u+s `which cat`	# 或者 chmod 4755 `which cat`
    
    
    #(root用户) 再次查看which cat
    [root@localhost ~]# ll `which cat`
    -rwsr-xr-x. 1 root root 54048 Nov 20  2015 /usr/bin/cat
    
    
    # (普通用户)查看/etc/shadow:有权限了
    [darker@localhost local]$ cat /etc/shadow
    root:$6$Jvw3z/jmU1ASO4P1$vpTJ5OGEtfBOmIpjyK55k87iQPHXCC3.kKOFW9jkyslqC2DMdN7SZdT/zYRfmQ4hBAQXG6CQ4kKdRQ8eFqChf.::0:99999:7:::
    bin:*:16659:0:99999:7:::
    daemon:*:16659:0:99999:7:::
    adm:*:16659:0:99999:7:::
    lp:*:16659:0:99999:7:::
    ...
    

    5.上例的工作原理

    环境前提:
    	Linux中有1个二进制程序:cat,属组属组都是root
    	Linux中有一个系统文件:/etc/shadow,属组属组是: root:root
    	有一个普通用户:darker
    	普通用户:darker 属于其他用户,对二进制程序:cat 有执行(x)的权限
    	普通用户:darker 对系统文件:/etc/shadow 没有任何权限
    	
    	
    默认情况下:
        普通用户:darker 执行二进制程序:cat
        系统会创建1个:cat进程
        该进程的属主属组是该程序的发起者:darker,也就是: darker:darker
        cat进程 访问系统文件:/etc/shadow
        cat进程的属主和属主:darker:darker	/etc/shadow文件的属主和属主:root:root
        二者的属主属组不匹配,所以被拒绝访问了:Permission denied
        
        
    给二进制程序:cat 设置SUID之后:
    	普通用户:darker 执行二进制程序:cat
    	系统会创建1个:cat进程
    	执行者对于该二进制可执行文件具有 x 的权限,执行者将拥有该文件的属组的权限
    	该进程属主是程序的发起者:darker,属组是cat原来的:root,属主属组就是:darker:root
    	cat进程 访问系统文件:/etc/shadow
    	cat进程的属主和属主:root:darker	/etc/shadow文件的属主和属主:root:root
    	二者的属主匹配,可以正常访问
    

    SGID

    1.权限设定的方法

    • 字母表示法
    chmod g+s 文件/目录		# 给文件/目录的属组添加s权限
    chmod g-s 文件/目录		# 删除文件/目录的属组的s权限
    
    • 数字表示法第1位2表示SGID后3位表示普通权限 rwx
    chmod 2755 文件/目录	# 给文件/目录的属组添加s权限
    chmod 0755 文件/目录	# 删除文件/目录的属组的s权限
    chmod 755 文件/目录		# 同上
    

    2.文件权限位的表示

    [root@localhost ~]# ll 1.txt
    -rwxr-sr-x. 1 root root 3243 Nov 25 15:41 1.txt
    

    3.SGID相关说明

    作用在二进制可执行文件上时:

    执行有SGID权限的程序时,该用户将继承该程序的属组权限

    作用在目录上时:

    该目录下所有用户新建的文件 都会自动继承该目录的属组

    当一个用户对某一目录有执行权限时,该用户就可以在该目录下建立文件

    如果该目录同时用 SGID 修饰,则该用户在这个目录下建立的文件都是属于这个目录的属组

    4.实例

    # (root用户)切换到/usr/loca/目录 并创建目录:test02
    [root@localhost ~]# cd /usr/local
    [root@localhost local]# mkdir test02
    
    
    # (root用户)查看目录:test02 的信息
    [root@localhost local]# ls -dl test02/
    drwxr-xr-x. 2 root root 6 Nov 25 14:19 test02/
    
    
    # !测试(root用户)在目录:test02 下创建文件:1.txt 并查看该文件的信息
    [root@localhost local]# touch /usr/local/test02/1.txt
    [root@localhost local]# ll /usr/local/test02/1.txt
    -rw-r--r--. 1 root root 0 Nov 25 14:19 /usr/local/test02/1.txt
    
    # !测试(普通用户)在目录:test02 下创建文件:2.txt 并查看该文件的信息
    [darker@localhost ~]$ touch /usr/local/test02/2.txt
    [darker@localhost ~]$ ll /usr/local/test02/2.txt
    -rw-rw-r--. 1 darker darker 0 Nov 25 14:20 /usr/local/test02/2.txt
    
    
    # (root用户)修改目录:test02 的权限
    [root@localhost local]# chmod 2773 test02
    
    
    # (root用户)再次查看目录:test02 的信息
    [root@localhost local]# ls -dl test02/
    drwxr-sr-x. 2 root root 6 Nov 25 14:20 test02/
    
    
    # !测试(root用户)在目录:test02 下创建文件:3.txt 并查看该文件的信息
    [root@localhost local]# touch /usr/local/test02/3.txt
    [root@localhost local]# ll /usr/local/test02/3.txt
    -rw-r--r--. 1 root root 0 Nov 25 14:21 /usr/local/test02/3.txt
    
    # !测试(普通用户)在目录:test02 下创建文件:4.txt 并查看该文件的信息
    [darker@localhost ~]$ touch /usr/local/test02/4.txt
    [darker@localhost ~]$ ll /usr/local/test02/4.txt
    -rw-rw-r--. 1 darker root 0 Nov 25 14:21 /usr/local/test02/4.txt
    

    SBIT

    SBIT 是 the restricted deletion flag or sticky bit 的简称,有时也称为Sticky粘滞位

    SBIT 与 SUID 和 SGID 的关系并不大

    1.权限设定的方法

    • 字母表示法
    chmod o+t 文件/目录		# 给文件/目录的其他用户设置Sticky
    chmod o-t 文件/目录		# 删除文件/目录的其他用户的Sticky
    
    • 数字表示法第1位1表示添加Sticky位后3位表示普通权限 rwx
    chmod 1755 文件/目录		# 给文件/目录的其他用户设置Sticky
    chmod 0755 文件/目录		# 删除文件/目录的其他用户的Sticky
    chmod 755 文件/目录			# 同上
    

    2.文件权限位的表示

    • 文件other位有x权限,并且用t代替了,表示被设置了Sticky
    • 如果other位没有x权限,会显示为大写T,表示有故障(权限无效)
    [root@localhost local]# ls -dl test03
    drwxr-xr-t. 2 root root 18 Nov 25 14:34 dir01
    

    3.相关说明

    • 对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除和改名自己的文件/目录
    • 只能作用在目录上普通文件设置无意义,而且会被Linux内核忽略
    • 用户在设置 Sticky 权限的目录下新建的目录不会自动继承Sticky权限

    4.实例

    # (root用户)切换到 /usr/loca/目录
    [root@localhost ~]# cd /usr/local
    
    
    # (root用户)递归创建test03目录及2个子目录dir1和dir2
    [root@localhost local]# mkdir -p test03/dir{1,2}
    
    
    # (root用户)创建2个用户:user01、user02
    [root@localhost local]# useradd user01
    [root@localhost local]# useradd user02
    
    
    # (root用户)分别设置dir1和dir2的属主属组为user01和user02
    [root@localhost local]# chown -R user01:user01 test03/dir1
    [root@localhost local]# chown -R user02:user02 test03/dir2
    
    
    # (root用户)查看目录:test03的信息
    [root@localhost local]# ls -dl test03
    drwxr-xr-x. 4 root root 28 Nov 25 15:37 test03
    
    [root@localhost local]# ll test03
    total 0
    drwxr-xr-x. 2 user01 user01 6 Nov 25 15:37 dir1
    drwxr-xr-x. 2 user02 user02 6 Nov 25 15:37 dir2
    
    
    # (root用户)修改目录:test03 的权限
    [root@localhost local]# chmod 1777 test03
    
    
    # (root用户)查看目录:test03的信息
    [root@localhost local]# ls -dl test03
    drwxrwxrwt. 4 root root 28 Nov 25 15:37 test03
    
    [root@localhost local]# ll test03
    total 0
    drwxr-xr-x. 2 user01 user01 6 Nov 25 15:37 dir1
    drwxr-xr-x. 2 user02 user02 6 Nov 25 15:37 dir2
    
    
    
    # 切换到普通用户:user01
    [root@localhost local]# su - user01
    
    
    # !测试(普通用户)切换到test03目录
    [user01@localhost ~]$ cd /usr/local/test03
    
    
    # !测试(普通用户)查看当前目录下的信息
    [user01@localhost test03]$ ll
    total 0
    drwxr-xr-x. 2 user01 user01 6 Nov 25 15:37 dir1
    drwxr-xr-x. 2 user02 user02 6 Nov 25 15:37 dir2
    
    
    # !测试(普通用户)用户user01将dir1重命名为dir11
    [user01@localhost test03]$ mv dir1 dir11
    
    # !测试(普通用户)用户user01将dir2重命名为dir22
    [user01@localhost test03]$ mv dir2 dir22
    mv: cannot move ‘dir2’ to ‘dir22’: Operation not permitted
    
    
    # !测试(普通用户)用户user01在dir11目录中创建文件:1.txt
    [user01@localhost test03]$ touch dir11/1.txt
    
    # !测试(普通用户)用户user01在dir2目录中创建文件:2.txt
    [user01@localhost test03]$ touch dir2/2.txt
    touch: cannot touch ‘dir2/2.txt’: Permission denied
    

    5.注意点

    • SBIT 目前只对目录有效,用来阻止非文件的所有者删除文件:比较常见的例子就是/tmp 目录
    • 权限信息中最后一位 t 表示该目录被设置了 SBIT 权限
    • SBIT 对目录的作用是:当用户在该目录下创建 新文件或目录时,仅有自己和 root 才有权力删除,主要作用于一个共享的文件夹(目录)

    三:chattr

    引言

    你是否遇到过文件或目录具有可读写权限,但是使用root用户删除、修改时提示"Operation not permitted"的情况?

    可能是由chattr设置了文件的隐藏保护权限导致

    通过chattr命令修改文件或目录属性能够提高系统的安全性

    与chmod命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr命令改变的。

    说明

    这两个命令在工作中用的比较少,经常用到的场景就是解决"Operation not permitted"问题

    chattr 命令语法

    语法

    chattr [+-=] [ASacdistu] File/Directory
    

    选项说明

    选项 释义
    +-= 分别为 [+ 增加] [- 减少] [= 设定] 指定属性
    A 当设定了 A 这个属性时,文件或目录的存取时间atime (访问时间) 将不可被修改
    S 这个功能有点类似 sync 的功能!就是会将数据同步写入磁盘当中!
    可以有效的避免数据流失!
    a 文件将只能增加数据,而不能删除,只有 root 才能设定这个属性
    C 这个属性设定之后,将会自动的将此文件『压缩』
    在读取的时候将会自动解压缩出来,但是在储存的时候,将会先进行压缩之后再储存
    d 当 dump (备份)程序被执行的时候,设定 d 属性将可使该档案(或目录)具有 dump 功效!
    i 指定文件不能被删除、改名、也无法写入或新增数据!对于系统安全性有相当大的帮助!
    j 当使用 ext3 这个档案系统格式时,设定 j 属性将会使档案在写入时先记录在 journal 中!
    但是当 filesystem 设定参数为 data=journalled 时,由于已经设定了日志了,所以这个属性无效!
    s 当文件设定了 s 参数时,他将会被完全的移除出这个硬盘空间
    u 与 s 相反的
    当使用 u 来设定文件时,则数据内容其实还存在磁盘中,可以使用来 undeletion

    chattr 使用实例

    1.设置指定文件的隐藏属性,使其无法删除、修改

    # 添加"i"隐藏属性后,就无法更动config.conf这个文件了
    chattr +i /home/config/config.conf 
    

    2.取消文件的删除、修改保护权限

    # 解除"i"这个隐藏属性
    chattr -i /home/config/config.conf 
    

    lsattr 命令语法

    语法

     lsattr [-aR] File/Directory
    

    选项说明

    选项 释义
    -a 将隐藏文件的属性也列出来
    -R 连同子目录的数据也一并列出来

    lsattr 使用实例

    查看指定文件隐藏属性

    # 查看文件:file.txt的隐藏属性
    lsattr file.txt
    

    四:umask

    1.新建文件、目录的默认权限是由umask决定的

    uid>199并且属主与属组相等的用户下,umask: 0002

    • 文件:664
    • 目录:775

    ② 除1之外的其他用户下,比如root用户,umask: 0022

    • 文件:664
    • 目录:755

    ③ 默认权限(在umask的影响下)

    • 文件默认权限:666
    • 目录权限默认:777

    2.权限的计算方法

    文件权限的计算方法:偶数位直接相减,奇数位相减后加1

    文件的起始权限值 umask值 操作 计算后的文件权限值
    666 022 (每位如果都是偶数) 直接相减 644
    666 033 (每位如果有奇数或偶数) 相减(奇数位相减后在其原奇数 位加1) 644
    666 325(每位如果有奇数或偶数) 相减(奇数位相减后在其原奇数 位加1) 442

    目录权限的计算方法:直接相减即可

    文件的起始权限值 umask值 操作 计算后的文件权限值
    777 022 相减 755
    777 033 相减 744
    777 325 相减 452

    3.设置umask

    临时设置umask

    [root@localhost local]# umask 000	# 设置umask为000
    

    永久设置umask

    # 用vim编辑/stc/profile
    [root@localhost local]# vim /etc/profile	# 或者:vim /etc/bashrc
    
    
    # 在最后添加如下代码
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002 //表示uid大于等于199的默认umask值,表示普通用户
    else
    umask 022 //表示uid小于199的默认umask值,表示root
    fi
    

    4.总结

    能力(权限)越大,责任越大

    数据(生命)无价,谨慎操作

  • 相关阅读:
    C语言使用指针表示数组的注意事项
    LUNA16数据集的百度云链接
    c语言定义指针类型需注意事项
    对DeepLung数据预处理部分的详细展示
    python统计字符串中字符个数
    C语言预处理命令之文件包含
    C语言值拷贝传递机制
    【论文】CornerNet:几点疑问
    解读 pytorch对resnet的官方实现
    python 对三维CT数据缩放
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/14054363.html
Copyright © 2011-2022 走看看