二周第三次课(3月28日)

时间:2021-02-10 13:55:11

2.14 文件和目录权限chmod

# ls -l
-rw-r--r--. 1 root root    0 8月   9 10:53 1.txt   # 该文件权限:可读、可写、不可执行。
# 权限位末尾有'.',则表示该文件受制于selinux(防火墙)
# 临时开关
# setenforce 0  #0为关闭,1为开启
# getenforce # 查看是否开关
Permissive  #Permissive为关闭,Enforcing为开启
  • 如果要彻底关闭selinux需要改配置文件
    # vi /etc/selinux/config
    
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.               # '强制开启'
    #     permissive - SELinux prints warnings instead of enforcing.     # '警告,不会强制开启'
    #     disabled - No SELinux policy is loaded.                        # '关闭'
    SELINUX=enforcing        # '更改=号后面的值';更改完毕再重启。然后创建新的文件就不会带'.'了。
    # SELINUXTYPE= can take one of three two values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected.
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted

二周第三次课(3月28日)

  • -|rwx|r--|r--:文件权限信息;第一节为类型;第二节为所有者权限:包含可读、可写、可执行;第三节为该文件所属用户组用户对该文件的权限。第四节为其他用户对该文件的权限。
    • 权限可以用数字表示:r = 4 ; w = 2 ; x = 1 ; rwx = 7 ; rw- = 6 ; --x = 1 ; rw-r--r-- = 644 ;(每3个是一个权限位,自己的权限相加。)
    • rwx:w:可写;r:可读;x:可执行。(没有该权限用-表示)
    • r--:表示所属用户组:可读,不可写,不可执行。
    • r--:其他用户:可读,不可写,不可执行。

chmod = change mode

  • chmod nnn xxx:更改权限 (只对于目录本身,其下的子目录及文件权限不会做修改)
    # chmod 700 1.txt #更改1.txt权限
    # ls -l 1.txt
    -rwx------. 1 root root 0 8月   9 10:53 1.txt #权限从rw-r--r--变更为rwx------
  • chmod -R nnn xxx:更改权限,该目录及子目录和文件都做权限修改。
  • 其他用法
    # 这个方法不推荐。写数字多方便
    # chmod u=rwx,g=rw,o=r 1.txt
    # ls -l 1.txt
    -rwxrw-r--. 1 root root 0 8月   9 10:53 1.txt
    
    # 把所有项都加上x权限
    # chmod a+x 1.txt
    # ls -l 1.txt
    -rwxrwxr-x. 1 root root 0 8月   9 10:53 1.txt
    
    # chmod a-x 1.txt
    # ls -l 1.txt
    -rw-rw-r--. 1 root root 0 8月   9 10:53 1.txt

2.15 更改所有者和所属组chown

chown = change owner

  • chown uuu xxx :更改文件所有者
    # ls -l 1.txt # 查看原所有者 root
    -rwxrw-r--. 1 root root 0 8月   9 10:53 1.txt
    
    # chown longlong 1.txt # 更改所有者
    
    # ls -l 1.txt # 查看更改后所有者 longlong
    -rwxrw-r--. 1 longlong root 0 8月   9 10:53 1.txt
  • chown uuu:ggg xxx:更改用户和组
    • chown :ggg xxx:只更改组
      • 加上 -R;也会把子目录及文件的用户和组更改
        # ls -l 2.txt # 查看原用户和组
        -rw-r--r--. 1 root root 0 8月   9 12:14 2.txt
        
        # chown longlong:long 2.txt # 更改用户和组
        
        # ls -l 2.txt # 查看更改后用户和组
        -rw-r--r--. 1 longlong long 0 8月   9 12:14 2.txt

chgrp = change group

  • chgrp ggg xxx :更改文件所有者
    # chgrp long 1.txt # 更改所属组
    # ls -l 1.txt # 查看所属组 long
    -rwxrw-r--. 1 longlong long 0 8月   9 10:53 1.txt

2.16 umask

为什么创建目录和创建文件的权限不一样?

# umask # 查看默认权限
0022 # 默认值0022

# umask 0002 # 更改默认权限;首位0可以省略
# umask
0002 #更改后的默认权限

# 更改默认权限前后创建文件和目录的权限值对比
# mkdir bb     # 创建bb目录
# touch 2.txt  # 创建2.txt
# ls -l
-rw-r--r--. 1 root root 0 8月   9 16:17 1.txt   # 更改前文件
-rw-rw-rw-. 1 root root 0 8月   9 16:19 2.txt   # 更改后文件
drwxr-xr-x. 2 root root 6 8月   9 16:16 aa      # 更改前目录
drwxrwxrwx. 2 root root 6 8月   9 16:19 bb      # 更改后目录
  • 目录必须有x权限,因为目录要执行了,才能看到目录下的子目录及文件。
  • 二周第三次课(3月28日)
  • 更改前计算公式:
    • 目录:777(rwxrwxrwx) - 022(----w--w-) = 755(rwxr-xr-x)
    • 文件:666(rw-rw-rw-) - 022(----w--w-) = 644(rw-r--r--)
  • 更改后计算公式:
    • 目录:777(rwxrwxrwx) - 002(-------w-) = 775(rwxrwxr-x)
    • 文件:666(rw-rw-rw-) - 002(-------w-) = 664(rw-rw-r--)
  • 第二次更改umask后再创建文件和目录
    # umask 0003   # 更改默认权限
    # mkdir cc     # 创建cc目录
    # touch 3.txt  # 创建3.txt
    # ls -l
    -rw-r--r--. 1 root root 0 8月   9 16:17 1.txt   # 更改前的文件
    -rw-rw-rw-. 1 root root 0 8月   9 16:19 2.txt   # 第一次更改后的文件
    -rw-rw-r--. 1 root root 0 8月   9 18:22 3.txt   # 第二次更改后的文件
    drwxr-xr-x. 2 root root 6 8月   9 16:16 aa      # 更改前的目录
    drwxrwxrwx. 2 root root 6 8月   9 16:19 bb      # 第一次更改后的目录
    drwxrwxr--. 2 root root 6 8月   9 18:22 cc      # 第二次更改后的目录

二周第三次课(3月28日)

  • 更改后计算公式:
    • 目录:777(rwxrwxrwx) - 003(-------wx) = 775(rwxrwxr--)
    • 文件:666(rw-rw-rw-) - 003(-------wx) = 664(rw-rw-r--)

2.17 隐藏权限lsattr/chattr

  • lsattr xxx:查看是否有隐藏权限。
    •  lsattr -R xxx:可以查看目录及所有子目录和文件的隐藏权限。
    •  lsattr -a xxx:可以查看目录及所有子目录和文件的隐藏权限包括隐藏的。
      # lsattr
      -----a---------- ./aa
      ---------------- ./1.txt
      ---------------- ./bb
      ---------------- ./2.txt
      ---------------- ./cc
      ---------------- ./3.txt

      # lsattr -R -----a---------- ./aa ./aa: ---------------- ./aa/11.txt ---------------- ./aa/11_txt.swp ---------------- ./aa/4913 ---------------- ./aa/11.tx~ ---------------- ./aa/22_txt.swp ---------------- ./aa/22.txt -----a---------- ./aa/33.txt ---------------- ./aa/33_txt.swp ---------------- ./aa/5036 ---------------- ./aa/33.tx~ ---------------- ./1.txt ---------------- ./bb ./bb: ---------------- ./2.txt ---------------- ./cc ./cc: ---------------- ./3.txt  
  •  chattr +i xxx:增加一个隐藏权限。给文件或目录增加i权限(谁都无法增删改,但是可以复制该目录),把其变成只读。(可以修改目录下原有文件内容和复制该文件,不能增加、删除、移动、重命名文件。)
    • chattr +a xxx:给文件或目录增加a权限;该权限只能复制该文件和追加内容,不能删除和更改文件内容及重命名文件名。(目录下只能增加文件和复制目录,不能删除、移动、重命名文件)。
      •  可以touch该文件。但是只更改创建时间,内容不变。
    •  chattr -i xxx:删除一个隐藏权限。给文件或目录删除i权限
      # tree
      .
      ├── aa
      │   ├── 1.txt
      │   └── 2.txt
      ├── bb
      │   ├── 11.txt
      │   └── 22.txt
      └── cc
          ├── a.txt
          └── b.txt
      # chattr +i aa/  # 给aa目录增加i权限
      # chattr +a bb/  # 给bb目录增加a权限
      # chattr +i cc/a.txt  # 给a文件增加i权限
      # chattr +a cc/b.txt  # 给b文件增加a权限
      # lsattr -R 
      ----i----------- ./aa
      
      ./aa:
      ---------------- ./aa/1.txt
      ---------------- ./aa/2.txt
      
      -----a---------- ./bb
      
      ./bb:
      ---------------- ./bb/11.txt
      ---------------- ./bb/22.txt
      
      ---------------- ./cc
      
      ./cc:
      ----i----------- ./cc/a.txt
      -----a---------- ./cc/b.txt
      
      # mv aa dd                         # i权限的aa目录无法重命名
      mv: 无法将"aa" 移动至"dd": 不允许的操作
      # mv aa/1.txt aa/3.txt             # i权限的aa目录下的文件无法重命名
      mv: 无法将"aa/1.txt" 移动至"aa/3.txt": 权限不够
      # mv aa/1.txt cc/
      mv: 无法将"aa/1.txt" 移动至"cc/1.txt": 权限不够     # aa目录下的文件无法移动
      # vi aa/1.txt                      # 可以修改aa目录下文件的内容
      # cat aa/1.txt         
      qq
      # rm aa/1.txt                      # 不可以删除aa目录下的文件
      rm:是否删除普通文件 "aa/1.txt"?y
      rm: 无法删除"aa/1.txt": 权限不够
      # mkdir aa/aa                      # 不可以在aa目录下创建目录
      mkdir: 无法创建目录"aa/aa": 权限不够
      # touch aa/3.txt                   # 不可以在aa目录下创建文件
      touch: 无法创建"aa/3.txt": 权限不够
      # rm bb/11.txt                     # 不可以删除a权限的bb目录下的文件
      rm:是否删除普通空文件 "bb/11.txt"?y
      rm: 无法删除"bb/11.txt": 不允许的操作
      # mv bb/11.txt cc/d.txt            # a权限的bb目录下的文件无法移动
      mv: 无法将"bb/11.txt" 移动至"cc/d.txt": 不允许的操作
      # mv bb/11.txt bb/33.txt           # a权限的bb目录下的文件无法重命名
      mv: 无法将"bb/11.txt" 移动至"bb/33.txt": 不允许的操作
      # touch bb/33.txt                  # 可以在bb目录下创建文件
      # lsattr -R
      ----i----------- ./aa
      
      ./aa:
      ---------------- ./aa/1.txt
      ---------------- ./aa/2.txt
      
      -----a---------- ./bb
      
      ./bb:
      ---------------- ./bb/11.txt
      ---------------- ./bb/22.txt
      ---------------- ./bb/33.txt
      
      ---------------- ./cc
      
      ./cc:
      ----i----------- ./cc/a.txt
      -----a---------- ./cc/b.txt