zoukankan      html  css  js  c++  java
  • LINUX-文件的特殊属性

    chattr +a file1 只允许以追加方式读写文件 
    chattr +c file1 允许这个文件能被内核自动压缩/解压 
    chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件 
    chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接 
    chattr +s file1 允许一个文件被安全地删除 
    chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘 
    chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件 
    lsattr 显示特殊的属性 

    =====================

    Linux文件特殊属性
    Linux文件特殊属性主要包括它的默认权限、隐藏属性和特殊权限(SUID/SGID/SBIT)。
    下面我们就来分别讲解它的这些特殊属性。
     
    1. Linux文件默认权限:umask
    我们在新建立一个文件时,它都有自己的默认属性。它们的默认属性是通过“umask”值来设定的。
    那么如何来查看和设置umask值呢?
    ① 查看umask值
    0022
     
    上面的命令显示出umask值的两种表现形式。我们看到数字表现出来的有4位数字,第一位数字用来表示特殊权限,我们在后面介绍,第二三四位数字分别用来表示用户/组/其他用户的权限。
    在默认权限的属性上,目录文件和普通文件是不同的。因为我们不希望普通文件具有可执行权限,所以,普通文件在默认情况下是没有执行权限的。又因为目录文件需要具有可执行权限才可以进入,所以普通文件的默认属性最大为666,目录文件的默认属性最大为777。
     
    ② umask值的意义
    umask值就是指“Linux文件的默认属性需要减掉的权限”。比如Linux普通文件的最大默认属性是666,目录文件的最大属性是777。但是我们不想要用户在新建立文件时,文件的属性是666或777,那么我们就要设置umask值。Linux系统预置的umask值是022,那么用户在新建立普通文件时,普通文件的属性就是666-022=644,新建立目录文件时,目录文件的属性就是777-022=755。
     
    ③ umask值设置
    我们不想要新建立的普通文件的属性是644,目录文件的属性是755,我们想要新建立普通文件的属性是664,新建立目录文件的属性是775。那么我们就设置umask值为002即可。设置方法就是“umask 002”。
     
    2. Linux文件隐藏属性
    文件都具有隐藏属性,隐藏属性对于系统安全来说很重要。
    ① 设置文件隐藏属性
    [root@localhost /]#chattr [-R] [-+=] [AacDdijsSu] 文件名
     
    常用参数意义:
    -R:递归处理。
    -:删除某个隐藏属性,其他原本存在的属性不改变。
    +:添加某个隐藏属性,其他原本存在的属性不改变。
    =:将隐藏属性设置为指定的参数,其他原本存在的属性会被改掉。
    A(atime):如果设置了A属性,则这个文件的最后访问时间atime不能被修改。
    a(append only):如果设置了a属性,则这个文件只能增加数据,不允许任何进程覆盖或截断这个文件。如果某个目录具有这个属性,那么只能在这个目录下建立和修改文件,而不能删除任何文件。
    i(immutable):如果设置了i属性,则不能对这个文件做任何修该。如果某个目录具有这个属性,那么只能修改该目录下的文件,而不能建立和删除文件。
    s(secure deletion):如果设置了s属性,则这个文件将从硬盘空间中完全删除。
    u(undeletable):与s完全相反。如果设置了u属性,则这个文件虽然被删除了,但是还在硬盘空间中存在,还可以用来还原恢复。
     
    ② 查看文件隐藏属性
    文件既然有隐藏属性,那么我们如何查看这些文件的隐藏属性呢?
    [root@localhost /]#lsattr [-RVadlv] 文件名
     
     
    [root@localhost /]#lsattr –Ra CaiWu
     
    3. Linux文件特殊权限
    Linux文件特殊权限主要体现在set UID、set GID、Sticky Bit这三个上面。
    要理解这三个特殊权限,就要先理解账号的ID(UID和GID)以及进程等概念。
    ① SUID
    SUID就是Set UID。设置它是为了让普通用户在执行某些程序时,能够暂时具有该程序的拥有者权限。
    比如:在Linux系统中普通用户也可以使用passwd命令来修改自己的密码。但是密码文件shadow只有root用户有读权限,其他用户没有任何权限,那么普通用户是怎样通过passwd命令来修改自己的密码呢?我们看下/usr/bin/passwd程序的属性就知道了。
    [root@localhost /]# ll /usr/bin/passwd
    -rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd
     
    我们发现passwd程序user的x权限位变成了s。那么在这里就是这个s使普通用户有权限来执行这个程序。它让普通用户在执行passwd这个程序时暂时拥有了root的权限。
    因此,当某程序user的x权限位变成s时,就是进行了Set UID设置,简称SUID。
    SUID仅可用于二进制文件,对于其他普通文件,目录文件和脚本之类的文件是无效的。
     
    ② SGID
    SGID就是Set GID。设置它用来作用于用户组。
    如果将SGID设置在二进制文件上,则不论用户是谁,在执行该程序时,它的有效用户组将会变成改程序的用户组所有者;
    如果将SGID设置在目录文件上,则在该目录文件内所建立的文件或目录的用户组,将会变成该目录的用户组。
    SGID一般用于团队的项目开发上,在系统中很少使用。如果设置了SGID,那么该二进制文件或者目录group的x属性位将会变成s。
     
    ③ SBIT
    SBIT就是Sticky Bit。如果在设置了SBit属性的目录中,用户在该目录下拥有w和x权限,那么当用户在该目录下新建文件时,只有文件拥有者和root才有权利删除。
    比如:root在/目录下建立了一个文件夹test,test的权限是0777。在没有加特殊权限前,任何人都可以在test目录下做任何事,包括删除别人建立的文件。当我给test目录设置了SBit属性后,那么bobyuan这个用户在test下新建了一个文件bobtest, 属性是0777;bob这个用户进入test目录下试图删除bobtest,发现没有权限删除。
    如果某个目录设置了SBit属性,那么该目录other的x属性位将会变成t。如【drwxrwxrwt】。
    SBIT仅可用于目录文件对于普通文件是不生效的。
    如果某个文件的user或者group或者other没有设置x属性,但是设置了SUID或者SGID或者GBIT,那么,这些特殊属性将会以大写的S和T表现出来。
     
    ④ 设置SUID/SGID/SBIT
    我们用数字形式来表示这三个特殊属性,他们和r/w/x的数字表现形式类似。
    SUID:4
    SGID:2
    SBIT:1
    比如我要设置cat命令的SUID属性,那就可以用chmod 4755来实现。
    比如我要设置test目录的SBIT属性,那就可以用chmod 1777来实现。
    注意,在设置目录或者二进制文件的特殊属性时,一定要给予这些目录或者文件可执行权限。如果未给予可执行权限,即使设置了特殊属性,也将会是空的,会用大写的S和T表示。
          本文转自yuanbin0710 51CTO博客,原文链接:http://blog.51cto.com/yuanbin/114913,如需转载请自行联系原作者
    ****************************************************************
    =================================================

    chattr

        对于一些特殊的文件,为防止用户误操作,可以加特殊属性,示例如下:
        +i:锁定
                示例文件:
                        [root@centos76 data]#ll test.txt
                        -rw-r--r--. 1 root root 48 Mar 12 19:30 test.txt
    
                +i锁定文件
                        [root@centos76 data]#chattr +i test.txt
    
                查看文件属性,发现与之前一样
                        [root@centos76 data]#ll test.txt
                        -rw-r--r--. 1 root root 48 Mar 12 19:30 test.txt
    
                进行验证+i功能是否生效
                重定向内容:
                        [root@centos76 data]#echo 1111 > test.txt
                        ** -bash: test.txt: Permission denied **
    
                查看一下:
                        [root@centos76 data]#cat test.txt
                        abcdedf
                        abcdedf
                        abcdedf
                        fdedcba
                        fdedcba
                        fdedcba
    
                重命名:
                        [root@centos76 data]#mv test.txt haha.txt
                        **mv: cannot move ‘test.txt’ to ‘haha.txt’: Operation not permitted**
    
                删除文件:
                        [root@centos76 data]#rm -f test.txt
                        **mv: cannot remove ‘test.txt’: Operation not permitted**
    
        +a:只能追加
                示例文件:仍然采用上次测试的test.txt文件
                        [root@centos76 data]#chattr +a test.txt
    
                重定向内容:   
                        [root@centos76 data]#echo 222 > test.txt
                        **-bash: test.txt: Operation not permitted**
    
                重命名:   
                        [root@centos76 data]#mv test.txt haha.txt
                        **mv: cannot move ‘test.txt’ to ‘haha.txt’: Operation not permitted**
    
                删除:
                        [root@centos76 data]#rm -f test.txt
                        **mv: cannot remove ‘test.txt’: Operation not permitted**
    
                追加内容:
                        [root@centos76 data]#echo 222 >> test.txt
                        [root@centos76 data]#cat test.txt
                        abcdedf
                        abcdedf
                        abcdedf
                        fdedcba
                        fdedcba
                        fdedcba
                        222                
    
        +A:锁定atime的时间,减少读文件对磁盘IO的影响,以提高性能。
                [root@centos76 data]#chattr +a test.txt
    
                第一次读取,记录atime的时间
                        [root@centos76 data]#cat test.txt
                        333
                        444
                        555
                        [root@centos76 data]#stat test.txt
                          File: ‘test.txt’
                          Size: 12          Blocks: 8          IO Block: 4096   regular file
                        Device: 803h/2051d  Inode: 83          Links: 1
                        Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
                        Context: unconfined_u:object_r:etc_runtime_t:s0
                        **Access: 2019-03-18 11:12:50.425400248 +0800**
                        Modify: 2019-03-18 11:03:18.770446437 +0800
                        Change: 2019-03-18 11:12:42.139400918 +0800
                        Birth: -
                第二次读取,atime时间没有变化,如下:
                        [root@centos76 data]#cat test.txt
                        333
                        444
                        555
                        [root@centos76 data]#stat test.txt
                        File: ‘test.txt’
                        Size: 12            Blocks: 8          IO Block: 4096   regular file
                        Device: 803h/2051d  Inode: 83          Links: 1
                        Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
                        Context: unconfined_u:object_r:etc_runtime_t:s0
                        **Access: 2019-03-18 11:12:50.425400248 +0800**
                        Modify: 2019-03-18 11:03:18.770446437 +0800
                        Change: 2019-03-18 11:12:42.139400918 +0800

    注意:不管是+i/a/A,都会锁定文件的atime时间

    提示:由于rm -f做了别名设置,在使用此命令时,会提示mv操作

    lsattr 可以查看chattr对应的属性

  • 相关阅读:
    learning scala view collection
    scala
    learning scala dependency injection
    learning scala implicit class
    learning scala type alise
    learning scala PartialFunction
    learning scala Function Recursive Tail Call
    learning scala Function Composition andThen
    System.Threading.Interlocked.CompareChange使用
    System.Threading.Monitor的使用
  • 原文地址:https://www.cnblogs.com/lyss/p/12366395.html
Copyright © 2011-2022 走看看