zoukankan      html  css  js  c++  java
  • linux文件权限管理:文件权限类型,文件权限影响,设定文件权限,取消文件权限

    一.关于文件权限

    权限可以对文件所有者的内容进行保护,也可以分享内容给特定的用户。一般给文件设置权限可以达到三种效果:

    • ​ 只允许自己访问
    • ​ 允许某个指定用户访问
    • ​ 允许所有用户访问

    二.查看文件权限

    1.使用ll可以查看文件的权限

    [root@node5 ~]# ll -h *.txt
    -rw-r--r-- 1 root root  115 Oct 12 10:03 aaa.txt
    -rw-r--r-- 1 root root  27K Oct 10 16:27 ceshi.txt
    -rw-r--r-- 1 root root 1.2K Apr  3  2020 idea快捷键.txt
    -rw-r--r-- 1 root root   16 Oct 10 16:35 test2.txt
    -rw-r--r-- 1 root root   12 Oct 10 17:30 test.txt
    -rw-r--r-- 1 root root   83 Oct 12 09:59 测试乱码文件.txt
    
    #-rw-r--r--即是文件权限的描述
    

    2.文件权限释义如下图:

    image-20201018005029886

    image-20201018005115883

    三.linux下常见文件类型

    1.文件类型如下:

    • ​ p表示命名管道文件
    • ​ d表示目录文件
    • ​ l表示符号链接文件
    • ​ -表示普通文件
    • ​ s表示socket套接口文件,比如我们启用mysql时,会产生一个mysql.sock文件
    • ​ c表示字符设备文件,例: 虚拟控制台 或tty0
    • ​ b表示块设备文件 例: sda, cdrom

    2.系统常见的文件类型

    #字符设备文件
    [root@node5 ~]# ll /dev/tty
    crw-rw-rw- 1 root tty 5, 0 Oct 14 02:40 /dev/tty
    
    #块设备文件
    [root@node5 ~]# ll /dev/sd*
    brw-rw---- 1 root disk 8,  0 Oct 14 02:40 /dev/sda
    brw-rw---- 1 root disk 8,  1 Oct 14 02:40 /dev/sda1
    brw-rw---- 1 root disk 8,  2 Oct 14 02:40 /dev/sda2
    brw-rw---- 1 root disk 8, 16 Oct 14 02:40 /dev/sdb
    brw-rw---- 1 root disk 8, 17 Oct 14 02:40 /dev/sdb1
    brw-rw---- 1 root disk 8, 18 Oct 14 02:40 /dev/sdb2
    brw-rw---- 1 root disk 8, 21 Oct 14 02:40 /dev/sdb5
    brw-rw---- 1 root disk 8, 22 Oct 14 02:40 /dev/sdb6
    
    #符号链接文件
    [root@node5 ~]# ll /dev/cdrom 
    lrwxrwxrwx 1 root root 3 Oct 14 02:40 /dev/cdrom -> sr0
    
    #目录文件
    [root@node5 ~]# ll -d /
    dr-xr-xr-x. 21 root root 4096 Oct 14 02:22 /
    
    #普通文件
    [root@node5 ~]# ll /etc/hosts
    -rw-r--r--. 1 root root 356 Apr 28  2019 /etc/hosts
    
    #套接字文件
    [root@node5 ~]# ll /var/lib/gssproxy/default.sock
    srw-rw-rw- 1 root root 0 Oct 14 02:40 /var/lib/gssproxy/default.sock
    

    四.linux下常见的文件权限

    1.Linux下的文件权限类型一般包括读,写,执行,对应的字母是: r ,w,x。

    2.对于文件来说:

    • ​ r:读
    • ​ w:写
    • ​ x:执行

    3.对于目录来说:

    • ​ r:读(看目录里面有什么), ls
    • ​ w:在目录里面建文件,删除,移动 touch mkdir rm mv cp
    • ​ x:进入 cd cat

    4.常见的文件权限如下:

    • ​ rwx------:文件所有者对文件具有读取、写入和执行的权限。
    • ​ rwxr-- r--: 文件所有者具有读、写与执行的权限,用户组里用户及其他用户则具有读取的权限
    • ​ rw-rw-r-x:文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
    • ​ drwx--x—x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。
    • ​ drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。

    5.每个用户都有自己的专属目录,通常放置在/home下面

    [root@node5 ~]# ll -h /home
    total 4.0K
    drwx------ 3 elk    elk     120 Oct 14 01:42 elk
    drwx------ 6 esnode esnode 4.0K Apr 27 14:27 esnode
    drwx------ 2 nginx  nginx    62 May  7  2019 nginx
    drwx------ 3 www    www      73 May  7  2019 www
    
    注:[rwx------]表示目录所有者本身拥有的权限,其它用户无法进入的,root除外
    

    6.你以什么用户身份登录,那么你创建的目录或文件,自动成为该文件或目录的所属

    [root@node5 ~]# su - elk
    Last login: Wed Oct 14 01:42:49 CST 2020 on pts/0
    
    [elk@node5 ~]$ pwd
    /home/elk
    [elk@node5 ~]$ touch b.txt
    [elk@node5 ~]$ ll b.txt 
    -rw-rw-r-- 1 elk elk 0 Oct 14 15:10 b.txt
    [elk@node5 ~]$ 
    [elk@node5 ~]$ exit
    logout
    

    五.权限对文件和目录的影响

    权限 对文件的影响 对目录的影响
    r(读取) 可以读取文件的内容 可以列出目录的内容(文件名):ls
    w(写入) 可以更改文件的内容 可以创建或删除目录中的任意文件:touch mkdir rm mv cp
    x(执行) 可以作为命令执行文件 可以访问目录的内容(取决于目录中文件的权限):cd cat

    六.文件的用户分类

    1.文件的用户分类:U(文件所有者)-G(用户组)-O(其他用户)

    • ​ 所有者: 就是创建文件的用户,这个用户拥有对它所创建的文件的一切权限,所有者可以允许其所在的用户组可以访问所有者的文件。
    • ​ 用户组: 用户组是具有相同特征用户的逻辑集合,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有10个用户的话,就需要授权10次,显然这种方法不太合理;另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限。这就是用户组。
    • 其它用户:系统内的其他所有者用户就是other用户类

    七.更改文件的属主和属组

    1.改变文件的所属关系用到命令:
    chown:可以用来改变文件(或目录)的属主 change owner
    chgrp:可以用来改变文件(或目录)的默认属组 change group
    如果你要对目录进行操作,加参数 -R

    ​ chown user:group filename 比如:chown hr:san a.txt 把文件的属主和属组改为hr,san
    ​ chown user: filename 比如:chown san: a.txt 自动继承这个用户所有的组
    ​ chown user filename 比如:chown san a.txt 把文件的属主改为san用户
    ​ chown :group filename 比如: chown :miao a.txt 把文件的属组改为miao这个组
    ​ chgrp hr filename 比如: chgrp hr f.txt
    ​ -R :递归(目录下的所有内容都更改,否则只修改目录)

    [root@node5 ~]# ll -h *.txt
    -rw-r--r-- 1 root root 115 Oct 12 10:03 aaa.txt
    -rw-r--r-- 1 root root 115 Oct 14 16:54 bbb.txt
    -rw-r--r-- 1 root root 115 Oct 14 16:54 ccc.txt
    -rw-r--r-- 1 root root 115 Oct 14 16:55 ddd.txt
    
    [root@node5 ~]# chown esnode aaa.txt 
    
    [root@node5 ~]# ll aaa.txt 
    -rw-r--r-- 1 esnode root 115 Oct 12 10:03 aaa.txt
    
    [root@node5 ~]# chown esnode:esnode bbb.txt 
    
    [root@node5 ~]# ll bbb.txt 
    -rw-r--r-- 1 esnode esnode 115 Oct 14 16:54 bbb.txt
     
    [root@node5 ~]# chown :logstash ccc.txt 
    
    [root@node5 ~]# ll ccc.txt 
    -rw-r--r-- 1 root logstash 115 Oct 14 16:54 ccc.txt
     
    [root@node5 ~]# chown elk: ddd.txt 
    
    [root@node5 ~]# ll ddd.txt 
    -rw-r--r-- 1 elk elk 115 Oct 14 16:55 ddd.txt
    
    [root@node5 ~]# cp ddd.txt eee.txt
    
    [root@node5 ~]# ll eee.txt 
    -rw-r--r-- 1 root root 115 Oct 14 17:00 eee.txt
    
    [root@node5 ~]# chgrp elk eee.txt 
     
    [root@node5 ~]# ll eee.txt 
    -rw-r--r-- 1 root elk 115 Oct 14 17:00 eee.txt
    

    八.一个文件取消所有权限,拥有者是否可以写这个文件?

    [root@node5 ~]# su - elk
    Last login: Wed Oct 14 15:10:16 CST 2020 on pts/0
    
    [elk@node5 ~]$ pwd
    /home/elk
    
    [elk@node5 ~]$ touch test.txt
    
    [elk@node5 ~]$ echo "hello world ! " >> test.txt
    [elk@node5 ~]$ 
    [elk@node5 ~]$ ll -h
    total 4.0K
    -rw-rw-r-- 1 elk elk 15 Oct 14 19:17 test.txt
    [elk@node5 ~]$ chmod 000 test.txt 
    [elk@node5 ~]$ 
    [elk@node5 ~]$ ll -h
    total 4.0K
    ---------- 1 elk elk 15 Oct 14 19:17 test.txt
    [elk@node5 ~]$ 
    [elk@node5 ~]$ echo 12 >> test.txt 
    -bash: test.txt: Permission denied
     
    [elk@node5 ~]$ vim test.txt                                                                                                                                                                
    [elk@node5 ~]$ cat test.txt 
    cat: test.txt: Permission denied
    
    [elk@node5 ~]$ pwd
    /home/elk
    [elk@node5 ~]$ ls
    test.txt
    
    [elk@node5 ~]$ exit
    logout
    [root@node5 ~]# cat /home/elk/test.txt 
    hello world ! 
    [root@node5 ~]# su - elk
    Last login: Wed Oct 14 19:14:43 CST 2020 on pts/0
    
    #强行写入
    [elk@node5 ~]$ vim test.txt 
    qwe
    qwe                                                                                                                                                            
    "test.txt" 2L, 8C written
    [elk@node5 ~]$ 
    [elk@node5 ~]$ cat test.txt 
    cat: test.txt: Permission denied
    [elk@node5 ~]$ 
    [elk@node5 ~]$ exit
    logout
    [root@node5 ~]# 
    [root@node5 ~]# cat /home/elk/test.txt 
    qwe
    qwe
    

    结论:文件所有者一定可以写文件,就像root可以对shadow强制写, 因为shadow的拥有者是root。

    九.使用字符设定权限

    1.修改权限用的命令:chmod,作用:修改文件,目录的权限

    2.chmod的命令格式:

    chmod [对谁操作] [操作符] [赋于什么权限] 文件名
    对谁操作:
    u----> 用户user,表示文件或目录的所有者
    g---->用户组group,表示文件或目录所属的用户组
    o---->其它用户others
    a---->所有用户all
    操作符:

    +:添加权限 ,- :减少权限 ;= :直接给定一个权限
    权限:r w x

    参数 描述
    u-w 给文件拥有者减去读的权限
    g+x 给用户组加上执行的权限
    o=r 赋予其他用户读的权限
    a+x 给所有用户加上执行的权限
    [root@node5 ~]# su - elk
    [elk@node5 ~]$ touch test.txt
    [elk@node5 ~]$ ll
    total 0
    -rw-rw-r-- 1 elk elk 0 Oct 14 19:32 test.txt
    
    [elk@node5 ~]$ chmod u-w test.txt 
    
    [elk@node5 ~]$ ll
    total 0
    -r--rw-r-- 1 elk elk 0 Oct 14 19:32 test.txt
    
    [elk@node5 ~]$ chmod o=w test.txt 
    
    [elk@node5 ~]$ ll
    total 0
    -r--rw--w- 1 elk elk 0 Oct 14 19:32 test.txt
    
    [elk@node5 ~]$ chmod u+wx test.txt 
    [elk@node5 ~]$ 
    [elk@node5 ~]$ ll
    total 0
    -rwxrw--w- 1 elk elk 0 Oct 14 19:32 test.txt
    
    [elk@node5 ~]$ chmod g=- test.txt 
    [elk@node5 ~]$ 
    [elk@node5 ~]$ ll
    total 0
    -rwx----w- 1 elk elk 0 Oct 14 19:32 test.txt
    [elk@node5 ~]$ 
    [elk@node5 ~]$ chmod a=r test.txt 
    [elk@node5 ~]$ 
    [elk@node5 ~]$ ll
    total 0
    -r--r--r-- 1 elk elk 0 Oct 14 19:32 test.txt
    

    十.使用八进制(0-7)数字设定权限

    1.八进制表示法

    权限 二进制值 八进制值 描述
    --- 000 0 没有任何权限
    --x 001 1 只有执行权限
    -w- 010 2 只有写入权限
    -wx 011 3 有写入和执行权限
    r-- 100 4 只有读取权限
    r-x 101 5 有读取和执行权限
    rw- 110 6 有读取和写入权限
    rwx 111 7 有全部权限

    image-20201019143624993

    2.改变权限的语法:chmod 755 文件或目录

    chmod a=rwx b.txt 等价于 chmod 777 b.txt

    [root@node5 ~]# su - elk
    Last login: Wed Oct 14 19:30:54 CST 2020 on pts/0
    [elk@node5 ~]$ ll
    total 0
    -r--r--r-- 1 elk elk 0 Oct 14 19:32 test.txt
     
    [elk@node5 ~]$ chmod 755 test.txt 
    
    [elk@node5 ~]$ ll
    total 0
    -rwxr-xr-x 1 elk elk 0 Oct 14 19:32 test.txt
    [elk@node5 ~]$ 
    [elk@node5 ~]$ chmod 700 test.txt 
    [elk@node5 ~]$ 
    [elk@node5 ~]$ ll
    total 0
    -rwx------ 1 elk elk 0 Oct 14 19:32 test.txt
    
    [elk@node5 ~]$ stat -c%a test.txt 
    700
    
    [elk@node5 ~]$ stat -c%A test.txt 
    -rwx------
    

    十一.补码 umask

    1.为什么我们创建的文件的权限是644呢?我们创建文件的默认权限是怎么来的?

    ​ 答:umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数

    字,当我们登录系统之后创建一个文件是会有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask用于设置用

    户创建文件或者目录的默认权限,umask设置的是权限的“补码”,而我们常用chmod设置的是文件权限码。

    2.文件默认权限=666 ,目录默认权限=777

    3.为什么文件比目录权限少1? x cd

    4.我们一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。永久生效,编辑用户的配置文件vim

    .bash_profile

    [elk@node5 ~]$ cat /etc/profile
    ......
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
        umask 002
    else
        umask 022
    fi
    ......
    
    [elk@node5 ~]$ id -gn
    elk
    
    [elk@node5 ~]$ id -un
    elk
    
    注释:UID大于199 且用户的组名和用户名一样,那么 umask值为002,否则为022。
    注释: -gt 在shell中表示大于; id -un 显示用户组ID ,id -gn显示组名。
    

    5.设置umask临时生效

    [root@node5 ~]# umask 044
    [root@node5 ~]# touch b.txt
    [root@node5 ~]# stat -c %a b.txt 
    622
    [root@node5 ~]# ll b.txt 
    -rw--w--w- 1 root root 0 Jul  7 21:51 b.txt
    

    6.umask权限的算法

    权限的算法:一般情况是:目录默认权限-umask 值

    666-022=644

    777-022=755

    这是一个好的记忆方法,但不严谨。

    互动:umask掩码为033 创建普通文件后,权限是什么? 666-033=633 ( rw- -wx -wx) ?

    [root@node5 ~]# umask 033
    [root@node5 ~]# touch c.txt
    [root@node5 ~]# ll c.txt 
    -rw-r--r-- 1 root root 0 Jul  7 21:54 c.txt
    [root@node5 ~]# stat -c %a c.txt 
    644
    

    权限科学的计算方法:
    1、将默认权限(目录777,文件666)和umask值都转换为2进制
    2、对umask取反
    3、将默认权限和umask取反后的值做与运算
    4、将得到的二进制值再转换8进制,即为权限,

    例1:umask为022
    6 6 6 umask 0 2 2
    110 110 110 000 010 010 #转成二进制
    111 101 101 #umask取反的值
    做运算
    110 110 110
    111 101 101
    结果
    110 100 100 #转成8进制 6 4 4

    例2: umask 为033 结果为: 644
    6 6 6 umask 0 3 3
    110 110 110 000 011 011 # 转成二进制
    111 100 100 # umask取反的值
    110 110 110 与 #默认权限和umask取反后的值做与运算
    111 100 100 # umask取反的值
    110 100 100
    6 4 4 #转成8进制

  • 相关阅读:
    3D游戏常用技巧Normal Mapping (法线贴图)原理解析——高级篇
    [工作积累] OpenGL ES3.0: glInvalidateFramebuffer
    引擎设计跟踪(九.14.2c) 最近一些小的更新
    引擎设计跟踪(九.14.2b) 骨骼动画基本完成
    最近在玩的游戏
    引擎设计跟踪(九.14.2a) 导出插件问题修复和 Tangent Space 裂缝修复
    [工作积累] Google/Amazon平台的各种坑
    [工作积累] NDK通过Java获取package name 和version
    [工作记录] Android OpenSL ES: references & AAC related
    [工作记录] Android OpenGL ES: non-square texture
  • 原文地址:https://www.cnblogs.com/renshengdezheli/p/13948067.html
Copyright © 2011-2022 走看看