Linux 文件权限 文件的扩展属性 文件或目录的默认权限 UMASK值详解

设置修改文件的扩展属性

                  

     设置文件的扩展属性 : 

                     命令格式 :  chattr    [ -RV ]    [ +-= acdijsuADS ]     文件或目录名 

                                           :

                                                -R —— 递归设置指定目录及其目录下的所有文件和子目录的属性;

                                                -V —— 详细显示目录和文件的属性设置情况。

                     常用选项 :                

a

只允许向文件追加数据,不允许任何进程覆盖重写文件的内容。

A

设置不允许系统更新文件的最后访问时间

i

不可修改属性。具有该属性的文件不能被删除、更名或修改其内容。

c

压缩属性,写入或读取时,系统会自动进行压缩或解压缩

s

安全删除属性。即在删除一个文件时,会使用0填充原文件所在的存贮区,以使恢复工具无法恢复出文件的内容。

u

可恢复性的删除。对于具有该属性的文件,在删除时,系统会保留其数据块以便以后能恢复该文件的内容

                     解释几个选项 :             

                               -i 选项

[natash@bogon ~]$ touch file1.txt

[root@bogon ~]# chattr +i /home/natash/file1.txt
[natash@bogon ~]$ rm -rf file1.txt
rm: cannot remove 'file1.txt': Operation not permitted

                    发现 natash 自己创建的文件,当该文件增加了 -i 的扩展属性后,natash 自己

                    都删除不了该文件了!

                              - s 选项

                                               所谓安全删除 ( 举个例子 ) :

                                               现在你删除了一个文件,文件存储的是 银行账户和密码。然后,你

                                               呢把这个文件给删除掉了!!

                                               我们知道的是,在删除一个文件,别人也是可以恢复这个文件的,恢

                                               复过来后是不是就可以拿到你文件里的 ( 银行卡账户和密码)实际

                                               上没那么容易,就假设别人拿到了。

                                                

                                               那现在我们给这个文件添加一个 s 安全删除属性。

                                               你原先不是把文件删除了,其实只是删除了文件,里面的内容并没有

                                               删除掉,就是别人把你文件恢复后里面的内容还是在的,那加了 s 属

                                              性后,就会往文件里把原先的内容清掉,然后往里面添充0,原先密

                                              码假设是123 账号是 1555555, 那你再删除后,别人恢复过来,只

                                              会看到0,不会看到 账号 和 密码!!!

        

 查看文件的扩展属性

              命令格式  :  lsattr [ -adR ]   文件名或目录名        

-a

列出目录中的所有文件(包括隐藏文件)

-d

以与文件相同的方式列出目录的扩展属性

-R

以递归的方式列出目录的属性及其内容

设置新建文件或目录的默认权限

             

                         在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分

                         配默认的权限,该默认权限并不是继承了上级目录的权限,而是与umask(称为权限

                         掩码)有关,其具体关系是:       

新建文件的默认权限=0666-umask值
新建目录的默认权限=0777-umask值

            示例 : 

                        在 展开示例之前先来看几样东西 有助于对示例的理解 :

                        在 root 用户下创建 文件

[root@bogon ~]# ls -l test_file1
-rw-r--r--. 1 root root 0 Nov  6 09:20 test_file1

                         现在根据  我们前面学过的 以数字表达权限,来看下 在 root 账户下创建一个文件

                         的数字权限是多少??

                          ===>>>      644     ( 记着这个数字,下面验证时会用到 ) 

                          

                          也就是说在 root 账户下 默认创建 文件的权限 是 644 !!

                          

                           那现在,我们来查看下 root 用户的 UMASK 值

[root@bogon ~]# umask
0022

                            那照应前面的  具体关系 : 

                            ===>>>        新建文件的默认权限=0666-umask值

                            ===>>>        你就明白了 为什么 root 用户下 创建 文件的默认权限是 644 了!

                                                (   0666 -  0022  =  644  )

                    在 普通用户下 创建目录

[natash@bogon ~]$ mkdir test_dir
[natash@bogon ~]$ ls -ld test_dir
drwxrwxr-x. 2 natash natash 6 Nov  6 09:37 test_dir

                   显然在 普通用户下 创建 目录 其默认权限为 775 

                    

                    再来查看下 普通用户的 UMASK 值 :

[natash@bogon ~]$ umask
0002

                    来验证下   前面的具体关系 :

                     ===>>>     新建目录的默认权限=0777-umask值

                     

                    因此普通用户创建目录的默认权限即 :

                         0777 - 0002 =  0775       (   验证成功  ) 

                   综上

                                主要就是想告诉大家 解释下 :

                                 #  就是为什么你在 root 用户下创建的文件的默认权限就是 rw-r--r--

                                     (   创建目录同理 )

                                 #  为什么你在 普通用户下 创建的目录 就是 rwxrwxr-x 

                                     (  创建文件同理  )

                                  这都是有原因的 ----   UMASK  

                                   下段 我们来详细说说 UMASK 值 

进程掩码    UMASK   

             官方  : 

                           文件权限管理之: 进程umask

                           进程 新建文件、目录的默认权限会受到umask的影响,umask表示要减掉的权限

                           (  这个前面已经提到了 ) 

             #   那为什么 root 用户 的 UMASK 值 是 0022, 普通用户的 UMASK 值是 0002 ?

                  ===>>>

                                  这是因为 UMASK 值 是已经提前在 系统中( 环境变量)设置好的!!

                   来看看 系统里( 环境变量 )的 UMASK 值 :

                  ===>>>   

                   那是不是已经看到了  002( 针对 普通用户)  和 022  ( 针对 root 用户 )

           

                 umask临时修改  :

                    前面我们已经提到了 如何查看用户的  umask 

                    ===>>>                      

[root@bogon ~]# umask 
0022

[natash@bogon ~]$ umask
0002

                     即 : 在命令行直接 输入 命令 umask 即可 查询 !

                     

                     临时修改 : 是一样的 就在 命令行 直接改就行 

                     ===>>>

[natash@bogon ~]$ umask 000
[natash@bogon ~]$ touch umask_task
[natash@bogon ~]$ ls -l umask_task
-rw-rw-rw-. 1 natash natash 0 Nov  6 10:12 umask_task

                     即 : 我们临时修改了 普通用户的 umask 值为 000 

                              那他创建文件 其 默认权限就为  : 0666-000 = 0666 

                              你可以看到创建的文件的权限 rw-rw-rw-    即是 0666  

         #     umask 值的永久修改

                永久修改的时候自然需要在文件里去设置更改 

                哪个文件呢 ?

                ===>>>     /  etc  /  profile   

                                  那么就需要我们 在 这个文件里去修改 ( vim  / etc /  profile )

               

                展示下  /  etc  / profile  文件在修改 UMASK 时的具体内容 :   Linux 文件权限 文件的扩展属性 文件或目录的默认权限 UMASK值详解_第1张图片 

                 想要修改该文件,那就必须先要读懂该文件 :

                 你乍一看该文件肯定还是懵逼的状态,需要做以解释 

                 ===>>> 

                               $ UID   :       就是 用户的 UID  

                                                    之前也学习过 用户的 UID  

                                                    普通用户的 UID  :  >= 1000

                                                     系统用户的 UID :  1 - 999 

                                                     root 用户的 UID :    0 

                               

                                -gt      :     在这里需要多做些解释  

-gt  :   greater than   >

lt   :   less  than     <

gte  :   greater than equal   >=  

lte  :   less  than  equal   <=   

                                这个呢 就是 表示   一种 大小关系  

                                id - gn  :     就是 用户组名

                                id - un  :      就是 用户名  

[root@bogon ~]# id -gn
root

[root@bogon ~]# id -un 
root

               综上:  当你了解了上示的解释的时候,你再去理解 文件里的那句代码 :

                                   当 UID > 199 并且  用户名 和 用户组名 一致 的情况下 :

                                                            UMASK  : 002 

                                    否则 : ( 也就是 UID <= 199  或者  用户名 与 用户组名 不一致的时候 ) 

                                                            UMASK  : 022 

                                    所以也即是说 : 所有的 普通用户 和 部分普通用户 其 UMASK 是 002 

              :

             #  所以 修改的时候 其实只需要修改 UMASK 值 就行 ( 就是 修改 002 或者 022 即可 )

                 你甚至都不需要读懂 上示文件的具体意思!!!

             #   当你修改了 UMASK 值后 千万千万要记着 保存了文件退出后,

                  再 让文件在 当前SHELL 中生效

                  ===>>> 

[root@localhost ~]# source /etc/profile //立即在当前shell中生效

                   一定要再执行下 上示内容 ,我们才能真正的修改成功 !!!

         #   通过 UMASK 决定新建用户 HOME 目录的权限

              注意这个是 你在新建用户的时候 用户家目录 的默认权限就已经被系统默认创建了。

               其 新用户的家目录的权限是由  / etc /  login.defs   文件控制的!!

               示例 :              

[root@bogon ~]# useradd umaskuser 
[root@bogon ~]# cd /home
[root@bogon home]# ls -ld umaskuser
drwx------. 3 umaskuser umaskuser 78 Nov  6 11:19 umaskuser

                  可以看到 , 新建用户的家目录 的权限默认就是  700 ( 准确说 是 0700)

                   那么,0700 是咋来的呢??

                  我们就得去 / etc / login.defs 来看看了 

                  ===>>>     cat   / etc /login.defs    

                 Linux 文件权限 文件的扩展属性 文件或目录的默认权限 UMASK值详解_第2张图片

                   那么我们前面学到的 : 

                    目录的默认权限是 : 0777 - UMASK  

                    所以在这里 UMASK 就是 上示文件里的 077 

                     因此 : 0777 - 077  = 0700 

                     0700 就是这么来的!!!!! 

你可能感兴趣的:(RHCSA-linux,基础,linux,运维)