要了解Linux的权限,需要和Linux的用户与组的概念一并理解,不了解的同学请参考Linux的用户和组

简介

在Linux中,每个文件除了有用户和组的信息以外,还有其对应的权限。可使用来查看。

[root@C7 ~]# ls -l /etc/fstab
-rw-r--r--. root root Sep : /etc/fstab

看第一个字段的第二位至第十位,一共九位。

-rw-r--r--.

左三位(rw-):表示文件所有者的权限。

中三位(r--):表示文件所有组的权限。

右三位(r--):表示其他人的权限。

注意:某个进程对于文件是否具备足够的权限,取决于运行该进程的用户对其的权限!

进程安全上下文

进程对文件的访问权限应用模型:

  1. 检查进程的属主是否与文件的属主一致,若一致则应用文件属主权限;否则下一步。
  2. 检查进程的属组是否与文件的属组一致,若一致则应用文件属组权限;否则下一步。
  3. 应用文件其他人权限。

读写执行

对于文件:

  • 读(readable,简写r):可以获取文件的数据。
  • 写(writable,简写w):可以增删改文件的数据。
  • 执行(executable,简写x):若文件为可执行的格式,例如bash脚本、PHP文件等,则可以执行文件。

对于目录:

  • 读:可以使用ls命令获取目录的内容,不包含ls -l
  • 写:可以修改目录列表,即增加、删除和重命名目录下的文件。
  • 执行:可以对目录使用cd和ls -l命令。

权限组合机制

Linux的权限除了使用rwx字母表示以外,还可以使用八进制数字表示,如下表所示。

一般我们在使用过程中,也习惯使用八进制表示法。

权限 二进制 八进制
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

chmod命令

简介

chmod用于修改文件的权限。

普通用户只能修改属主为自己的文件,root可以修改所有文件。

语法格式

第一种语法格式表示以字符表示法设置权限;第二种语法格式表示以八进制表示法设置权限;第三种语法格式表示参照某个文件设置权限。

在选项当中,基本只会用到递归-R, --recursive(用于修改目录及其子文件的权限)和--reference=RFILE(见下文“权限复制”)

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

描述

chmod可以根据mode来修改文件的权限,文件的权限也叫作mode bits。mode可以是以字符表示法修改权限或者是以八进制表示法来重置新的权限。

字符表示法

字符表示法的格式如下。

[ugoa...][[+-=][perms...]...]

ugoa分别表示所有者(user)、所有组(group)、其他(other)和所有人(all)。

perms是具体的权限,可以为空(表示无权限)或者为rwxXst中的任意字母。Xst是特殊的权限,目前暂时不做介绍。

[root@C7 ~]# ls -l mode.txt
-rw-r--r-- root root Dec : mode.txt
[root@C7 ~]# chmod u+x mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxr--r-- root root Dec : mode.txt
[root@C7 ~]# chmod o-r mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxr----- root root Dec : mode.txt
[root@C7 ~]# chmod g=rw mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxrw---- root root Dec : mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxrw-rw- root root Dec : mode.txt
[root@C7 ~]# chmod a= mode.txt
[root@C7 ~]# ls -l mode.txt
---------- root root Dec : mode.txt

也可以是ugo的任意字母。表示参照其他成员配置权限。

[root@C7 ~]# ls -l mode.txt
-rwxrw---- root root Dec : mode.txt
[root@C7 ~]# chmod o=g mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxrw-rw- root root Dec : mode.txt

字符表示法可以有多个,使用逗号隔开。

[root@C7 ~]# chmod u=rwx,g=rw,o=r mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxrw-r-- root root Dec : mode.txt

如果省略了ugoa的话,那么默认表示a,但是如此设置权限会受到umask的影响。umask后面会做介绍。

[root@C7 ~]# chmod =rwx mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxr-xr-x root root Dec : mode.txt
[root@C7 ~]# umask

操作符“+”表示增加权限;操作符“-”表示减少权限;操作符“=”表示增加权限并删除没提到的权限,除了目录的SUID和SGID。

八进制表示法

八进制表示法由4位八进制组成,第一位是特殊权限位表示SUID(4)、SGID(2)或者sticky(1),第二位表示用户,第三位表示组,第四位表示其他。

不一定要4位都写出来,省略的话表示前置0。例如

chmod 755 等价于 chmod 0755

chmod 7 不等价于 chmod 0700 而等价于 chmod 0007

chmod与字符链接文件

chmod不会修改字符链接文件的权限(因为chmod的系统调用无法做到),而是修改字符链接文件所指向的文件的权限。但是,如果是递归修改目录的话,那么就会忽略掉目录下字符连接文件了。

权限复制

chmod可以以某个文件作为参照物来设置权限,类似于将某个文件的权限复制到一个或多个文件上。

[root@C7 ~]# ls -l {,,,refer}.txt
-rw-r--r-- root root Dec : .txt
-rw-r--r-- root root Dec : .txt
-rw-r--r-- root root Dec : .txt
-rwxrwxrwx root root Dec : refer.txt
[root@C7 ~]# chmod --reference=refer.txt {,,}.txt
[root@C7 ~]# ls -l {,,,refer}.txt
-rwxrwxrwx root root Dec : .txt
-rwxrwxrwx root root Dec : .txt
-rwxrwxrwx root root Dec : .txt
-rwxrwxrwx root root Dec : refer.txt
[root@C7 ~]# ls -ld testdir
drwxr-xr-x root root Dec : testdir
[root@C7 ~]# chmod --reference=refer.txt testdir
[root@C7 ~]# ls -ld testdir
drwxrwxrwx root root Dec : testdir

chown命令

简介

用于修改文件的属主/所有者(owner)和属组/所有组(group),属主和属组合起来也称为ownership。

语法格式

chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...

第一种格式有以下几种情况:

  1. 仅修改文件的属主。

    # chown OWNER FILE
  2. 修改文件的属主和属组。
    # chown OWNER:GROUP FILE
  3. 修改文件的属主和属组,且属组为属主的GID。
    # chown OWNER: FILE
  4. 仅修改文件的属组,效果等同于chgrp,因此本博文不会讨论chgrp命令。
    # chown :GROUP FILE

常用选项

--from=[CURRENT_OWNER]:[CURRENT_GROUP]:当且仅当文件的ownership为这里指定的属主和属组的时候,才会修改文件的权限;如果属主和属组都指定了,那么必须同时满足才会修改;如果省略了属主或者属组,那么只要满足了给出的属主或者属组,就算会发生修改操作。这个选项在结合-R选项递归修改的时候比较有用。

[root@C7 ~]# ls -l .txt
-rwxrwxrwx test03 test03 Dec : .txt
[root@C7 ~]# chown --from=:test03 test01:test01 .txt
[root@C7 ~]# ls -l .txt
-rwxrwxrwx test01 test01 Dec : .txt

-H、-L和-P:影响当递归一个目录的时候,如何处理字符链接文件的。

umask

参考资料:https://wiki.archlinux.org/index.php/umask

在Linux上,当用户创建文件或者目录的时候,会自动为文件或者目录创建一个权限。

[root@C7 ~]# touch .txt
[root@C7 ~]# ls -l .txt
-rw-r--r-- root root Dec : .txt
[root@C7 ~]# mkdir umask_dir
[root@C7 ~]# ls -ld umask_dir
drwxr-xr-x root root Dec : umask_dir

这种机制,我们就叫做Linux的umask。

umask中的u表示user,mask表示掩码。也就是说umask设置的是创建文件或者目录的时候,应该被剥夺的权限。

umask是shell的内置命令,语法格式如下:

umask [-p] [-S] [mode]

不带选项和参数的时候,是以八进制表示法显示当前shell中的umask值。

-p和-S也是用于显示umask的值的。前者的输出格式可用于再次作为命令执行,后者的输出格式是字符表示法。

如果加上-S选项以字符表示法显示的话,那么显示的就是ugo目前所具备的权限,而不是被拿掉的权限了。

[root@C7 ~]# umask

[root@C7 ~]# umask -p
umask
[root@C7 ~]# umask -S
u=rwx,g=rx,o=rx

只有当需要重新设置umask的时候,才会带上mode参数。

[root@C7 ~]# umask

[root@C7 ~]# umask
[root@C7 ~]# umask

在Linux中,默认不允许文件具备执行的权限。因此,对于文件的默认创建权限为“666-umask”,对于目录的默认创建权限为“777-umask”。

即便我们设置的umask刚好可以使得文件具备可执行权限,也是不行的。权限具体是如何计算的,可以看一下参考资料,涉及一些数学知识,我不太懂。

[root@C7 ~]# umask
[root@C7 ~]# touch umask.txt
[root@C7 ~]# ls -l umask.txt
-rw-r--r-- root root Dec : umask.txt

在Linux中,umask只会影响新建文件的ugo的rwx权限,不会影响新建文件的suid、sgid和sticky权限。因此umask中的第一个0表示的是八进制,可以省略,而不是表示用来设置suid、sgid和sticky权限。

[root@C7 ~]# umask
-bash: umask: : octal number out of range
[root@C7 ~]# umask
-bash: umask: : octal number out of range

在当前会话中设置的umask只会在当前的shell(bash)进程中有效,退出会话后就无效了。

要想使其永久生效的话,一般是写入相关的配置文件中。

Linux文件的所有权与权限的更多相关文章

  1. #Linux学习笔记# Linux文件的属性以及权限说明

    1. Linux文件的属性 关于Linux文件的属性的说明和设置请参考鸟哥Linux私房菜:Linux 的文件权限与目录配置 2. 目录和文件的权限意义 在Linux系统中,每个文件都有三种身份的权限 ...

  2. Unix/Linux文件类型及访问权限

    在Linux系统中,有7种文件类型. 普通文件 (regular file) 目录文件 (directory) 链接文件 (symbolic link) 管道文件 (FIFO) 套接字文件 (sock ...

  3. linux文件及目录的权限管理

    一.文件的权限 1.文件权限的查看 命令:ls -l 可以使用ll命令代替 ls -l 2.ls -l 所包含的信息 (1)权限信息 (-rw-r--r-- ) 一共有10位 a.第一位:表示文件信息 ...

  4. 15、linux文件、目录的权限及如何改变权限(root用户不受任何权限的限制)

    15.1.linux普通文件的读.写.执行权限说明: r:读,表示具有读取\阅读文件内容的权限: w:可写,表示具有新增,修改文件内容的权限: 如果没有r配合,那么vi编辑文件会提示无法编辑(但可以强 ...

  5. Linux文件(夹)属性与权限

    文件属性与权限,文件权限设置 参考资料:鸟哥的Linux私房菜 用户与用户组 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...

  6. Linux 文件的读写执行权限的说明

    文件的读写执行权限的说明 X 进入目录的权限: cd 1.文件本身是可执行的 2.普通用户还具备r的权限 3.root用户只需要有r的权限即可 r 查看目录/文件的内容 :ls dir 没有读的权 限 ...

  7. linux文件访问过程和权限

    第1章 文件访问过程详解 1.1 文件访问过程 第2章 权限 2.1 对于文件rwx含义 r读取文件内容 w修改文件内容 需要r权限配合 只有w权限的时候,强制保存退出会导致源文件内容丢失 x权限表示 ...

  8. Linux文件和目录的权限笔记

    查看文件或者目录的权限命令:ls -al # -a 表示全部文件包含隐藏文件,-l 表示列出每个文件的详细信息 比如执行 ls -al total 115 drwxr--x--- 4 root roo ...

  9. Linux 文件与目录的权限

    文件默认权限:umask umask就是指定“目前用户在新建文件或目录时候的权限默认值”.查询umask有以下两种方式: 目录与文件的默认权限是不一样的: - 文件,默认没有可执行(x)权限,只有r. ...

随机推荐

  1. django 学习笔记(转)

    原文链接:https://my.oschina.net/linktime/blog/105280 例如有一下模型 from django.db import models class person(m ...

  2. 第六节 事务XML方式[声明方式]

    事务管理: 管理事务,管理数据,数据完整性和一致性 事务[业务逻辑] : 由一系列的动作[查询书价格,更新库存,更新余额],组成一个单元[买书业务], 当我们动作当中有一个错了,全错~ ACID 原子 ...

  3. Python字符串,整型,浮点数相互转化

    Python字符串,整型,浮点数相互转化 觉得有用的话,欢迎一起讨论相互学习~Follow Me int(str) 函数将符合整数的规范的字符串转换成int型 float(str) 函数将符合浮点数的 ...

  4. Spark记录-实例和运行在Yarn

    #运行实例 #./bin/run-example SparkPi 10   #./bin/spark-shell --master local[2] #./bin/pyspark --master l ...

  5. 分布式锁--Redis小试牛刀

    参考文章: Redis分布式锁的正确实现方式 分布式锁看这篇就够了 在这两篇文章的指引下亲测 Redis分布式锁 引言 分布式系统一定会存在CAP权衡问题,所以才会出现分布式锁 什么是CAP理论? 为 ...

  6. hdu 527 Necklace

    http://acm.hdu.edu.cn/showproblem.php?pid=5727 阶乘 爆搜阴性宝石的排列,二分图最大匹配判断最多能使多少个阳性宝石不褪色 注: 1.O(n-1 !) 即可 ...

  7. bzoj千题计划190:bzoj4300: 绝世好题

    http://www.lydsy.com/JudgeOnline/problem.php?id=4300 f[i] 表示第i位&为1的最长长度 #include<cstdio> # ...

  8. Linux - seq 预设外部命令

    seq 是Linux 中一个预设的外部命令,一般用作一堆数字的简化写法. 常用参数: # 不指定起始数值,则默认为 1 -s # 选项主要改变输出的分格符, 预设是 \n -w # 等位补全,就是宽度 ...

  9. HTTP协议之响应头Date与Age

    HTTP没有为用户提供一种手段来区分响应是缓存命中的,还是访问原始服务器得到的.客户端有一种方法能判断响应是否来自缓存,就是使用Date首部.将响应中Date首部的值与当前时间进行比较,如果响应中的日 ...

  10. Hibernate常用的Java数据类型映射到mysql和Oracle

    研究了常用的Java基本数据类型在mysql和oracle数据库的映射类型.这里使用的是包装类型做研究,一般在hibernate声明的时候最好不要用基本类型,因为数据库中的null空数据有可能映射为基 ...