linux文件权限管理:文件权限类型,文件权限影响,设定文件权限,取消文件权限

人生的哲理 2020-11-09 13:13:38
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进制

版权声明
本文为[人生的哲理]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/renshengdezheli/p/13948067.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云