Linux 文件的权限

Linux文件权限简介

Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容。具体情况如下:

# ls -lhi
总用量 21M
267246 drwxr-xr-x. 3 root root 4.0K 3月 12 18:12 aaa
267243 drwxr-xr-x. 2 root root 4.0K 3月 12 17:05 abc
267245 lrwxrwxrwx. 1 root root 13 3月 12 15:43 bbb -> /tmp/test/abc
267259 drwxr-xr-x. 2 root root 21M 3月 12 18:04 ddd

在上面的第二列文件属性drwxr-xr-x中第一个是说明文件的类型,关于Linux的文件类型这里不做过多介绍。下面就关于文件类型之后的rwxr-xr-x这九个字符的意义以及在Linux 系统中如何进行设置和使用。

文件权限说明

在文件权限的九个字符的意义如下:

  • 左三位:定义user(owner)的权限

  • 中三位:定义group的权限;

  • 右三位:定义other的权限

关于这九个的文件权限中rwx的意义如下:

  • r:readable, 读

  • w:writable, 写

  • x:excutable,执行

在文件中rwx的意义:

  • r:可获取文件的数据;

  • w: 可修改文件的数据;

  • x:可将此文件运行为进程;

在目录中rwx的意义:

  • r:可使用ls命令获取其下的所有文件列表;

  • w: 可修改此目录下的文件列表;即创建或删除文件;

  • x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;

权限组合机制

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

Linux 文件权限命令

chmod

chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。

命令格式

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

命令参数

  • -c 当发生改变时,报告处理信息

  • -f 错误信息不输出

  • -R 处理指定目录以及其子目录下的所有文件

  • -v 运行时显示详细处理信息

选择参数

  • --reference=<目录或者文件> 设置成具有指定目录或者文件具有相同的权限

  • --version 显示版本信息

  • <权限范围>+<权限设置> 使权限范围内的目录或者文件具有指定的权限

  • <权限范围>-<权限设置> 删除权限范围的目录或者文件的指定权限

  • <权限范围>=<权限设置> 设置权限范围内的目录或者文件的权限为指定的值

权限范围:

  • u :目录或者文件的当前的用户

  • g :目录或者文件的当前的群组

  • o :除了目录或者文件的当前用户或群组之外的用户或者群组

  • a :所有的用户及群组

权限代号

  • r :读权限,用数字4表示

  • w :写权限,用数字2表示

  • x :执行权限,用数字1表示

  • - :删除权限,用数字0表示

  • s :特殊权限

命令使用

命令有两种用法,一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

文字设定法

chmod [who] [+ | - | =] [mode] 文件名

数字设定法

我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
数字设定法的一般形式为:

chmod [mode] 文件名

数字与字符对应关系如下:
r=4,w=2,x=1
若要rwx属性则4+2+1=7
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。

chown

chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限。通过chown改变文件的拥有者和群组。在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。

命令格式

chown [选项]... [所有者][:[组]] 文件...

命令参数

  • -c 显示更改的部分的信息

  • -f 忽略错误信息

  • -h 修复符号链接

  • -R 处理指定目录以及其子目录下的所有文件

  • -v 显示详细的处理信息

  • -deference 作用于符号链接的指向,而不是链接文件本身

  • --reference=<目录或文件> 把指定的目录/文件作为参考,把操作的文件/目录设置成参考文件/目录相同拥有者和群组

  • --from=<当前用户:当前群组> 只有当前用户和群组跟指定的用户和群组相同时才进行改变

思考题:
用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文件?
不能修改文件中的内容,但是可以删除和复制文件。

umask

umask是用来设置文件的权限反向掩码,遮罩码。在文件的设置为666-umask,在目录中的设置为777-umask。之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1;当umask = 023,则文件的属性为666-023=644,目录的属性为777-023=754

SUID、SGID、SBIT权限说明

前面我们学习了Linux的文件常用权限可写(w)、可读(r)、可执行(x)、同时通过chmod命令可以管理文件的权限,而在日常的操作中还有三种权限及SUID、SGID、sticky-bit,而这三种权限也是通过chmod命令来进行管理。下面就对这三种权限进行介绍。

SUID

当s出现在文件拥有者的x权限位置上时,如我们上面看到的/usr/bin/passwd这个文件的权限时-rwsr-xr-x,此时就被称为SET UID简称SUID。SUID对于一个文件有什么限制和功能呢?

  • SUID权限仅对二进制可执行文件有效

  • 执行者对于该文件具有x的权限

  • 本权限仅在执行该文件的过程中有效

  • 执行者将具有该文件拥有者的权限

说明:例如普通用户用passwd修改自己的命令,实际上最终更改的是/etc/passwd文件。此文件时用户管理配置文件,只有root权限才能更改。

SGID

当s出现在目录或文件所属组的x权限位置上时,此时就称为SET GID简称SGID,那SGID对文件和目录分部有哪些功能呢?

SGID对目录:

  • 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录

  • 使用者在此目录下的群组将会变成该目录的群组

  • 若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同

SGID对文件:

  • SGID 对二进制可执行文件有效

  • 程式执行者对于该文件来说,需具备 x 的权限

  • 执行者在执行的过程中将会获得该文件群组的支援(用于改文件群组的权限)

SBIT

当t出现在目录其他用户的x权限位置上时,此时就称为Sticky Bit简称SBIT,那SBIT有哪些限制和作用呢?

  • 仅对目录有效,对文件无效

  • 当使用者在该目录下建立文件或目录时(有权限的情况下),仅自己与 root 才有权力删除新建的目录或文件

设置SUID、SBID、SBIT属性

操作这些标志与操作文件权限的命令是一样的,都是 chmod。有两种方法来操作:

符号类型改变权限

  • chmod u+s testbin-- 为testbin文件加上setuid标志.

  • chmod g+s testdir-- 为testdir目录加上setgid标志

  • chmod o+t testdir-- 为testdir目录加上sticky标志

数字类型改变档案权限

采用八进制方式. 对一般文件通过三组八进制数字来置标志, 如 666, 777, 644等. 如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字. 如 4666, 2777等. 这一组八进制数字三位的意义如下:
abc

  • a - setuid位, 如果该位为1, 则表示设置setuid 4---

  • b - setgid位, 如果该位为1, 则表示设置setgid 2---

  • c - sticky位, 如果该位为1, 则表示设置sticky 1---

设置完这些标志后, 可以用 ls -l 来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如:

  • rwsrw-r-- 表示有setuid标志

  • rwxrwsrw- 表示有setgid标志

  • rwxrw-rwt 表示有sticky标志

那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)

lsattr、chattr

有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。如果要查看被chattr改变的文件属性,需用lsattr命令。

这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下模式:

  • A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。

  • a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。

  • c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。

  • d:即no dump,设定文件不能成为dump程序的备份目标。

  • i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件系统的安全设置有很大帮助。

  • j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。

  • S:硬盘I/O同步选项,功能类似sync。

  • s:保密性地删除文件或目录,即硬盘空间被全部收回。

  • u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。

chattr命令参数说明

  • -R 递归处理,将指定目录下的所有文件及子目录一并处理。

  • -v<版本编号> 设置文件或目录版本。

  • -V 显示指令执行过程。

  • +<属性> 开启文件或目录的该项属性。

  • -<属性> 关闭文件或目录的该项属性。

  • =<属性> 指定文件或目录的该项属性。
    ‘’

lsattr命令参数

  • -a  显示所有文件和目录,包括以"."为名称开头字符的额外内建,现行目录"."与上层目录".."。

  • -d  显示,目录名称,而非其内容。

  • -l  此参数目前没有任何作用。

  • -R  递归处理,将指定目录下的所有文件及子目录一并处理。

  • -v  显示文件或目录版本。

  • -V  显示版本信息。

文件ACL权限设置

ACL即Access Control List 主要的目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。如,某一个文件,不让单一的某个用户访问。
控制命令:

  • getfacl:取得某个文件/目录的ACL设置项目

  • setfacl:设置某个文件/目录的ACL设置项目

setfacl 参数

  • -m:设置后续acl参数

  • -x:删除后续acl参数

  • -b:删除全部的acl参数

  • -k:删除默认的acl参数

  • -R:递归设置acl,包括子目录

  • -d:设置默认acl

使用举例:
在linux系统中我们在用普通用户(cangls)编辑文本文件时,可能要编辑别的普通用户(bols)的文件,通常情况下我们会想到下面两个解决方法:1、用root用户把普通用户(cangls)添加到要编辑文件的所属组(bols)中,然后可以更加属组的写权限就可以编辑文件。2、若我们不想用root用户更改权限则可以让被编辑文件所属主(bols)在文本的other权限中添加写权限。上面的两个解决方法虽然都能可以解决问题但是root权限在生产服务器上一般不会随便登录的,而第二种虽然能解决问题但由于其他用户也有写权限,若被有心人利用就得不偿失了,今天就向大家介绍个能同时避免上面两个问题的解决方法即使用setfacl命令。
使用setfacl命令赋予的属主的权限进行更改文件:

[bols@hpf-linux test]$ getfacl bols.txt
# file: bols.txt
# owner: bols
# group: bols
user::rw-
group::rw-
other::r--
[bols@hpf-linux test]$ setfacl -m u:cangls:rw- /tmp/test/bols.txt
Try `getfacl --help' for more information.
[bols@hpf-linux test]$ getfacl bols.txt
# file: bols.txt
# owner: bols
# group: bols
user::rw-
user:cangls:rw-
group::rw-
mask::rw-
other::r--
[bols@hpf-linux test]$ ls -l bols.txt
-rw-rw-r--+ 1 bols bols 12 7月 9 08:33 bols.txt
[cangls@hpf-linux test]$ echo "cangls" > bols.txt
[cangls@hpf-linux test]$ cat bols.txt
cangls
[bols@hpf-linux test]$ setfacl -x u:cangls bols.txt //取消权限
[bols@hpf-linux test]$ getfacl bols.txt
# file: bols.txt
# owner: bols
# group: bols
user::rw-
group::rw-
mask::rw-
other::r--
[cangls@hpf-linux test]$ echo "bols" > bols.txt
-bash: bols.txt: 权限不够

使用setfacl命令赋予的属组的权限进行更改文件:

[bols@hpf-linux test]$ setfacl -m g:cangls:rwx bols.txt
[bols@hpf-linux test]$ getfacl bols.txt
# file: bols.txt
# owner: bols
# group: bols
user::rw-
group::rw-
group:cangls:rwx
mask::rwx
other::r--
[bols@hpf-linux test]$ ls -l bols.txt
-rw-rwxr--+ 1 bols bols 12 7月 9 08:33 bols.txt
[cangls@hpf-linux test]$ echo "bols" >> bols.txt
[cangls@hpf-linux test]$ cat bols.txt
cangls
bols
[bols@hpf-linux test]$ setfacl -x g:cangls bols.txt
[bols@hpf-linux test]$ getfacl bols.txt
# file: bols.txt
# owner: bols
# group: bols
user::rw-
group::rw-
mask::rw-
other::r--
[cangls@hpf-linux test]$ echo "bols" > bols.txt
-bash: bols.txt: 权限不够

-R递归目录用法举例:

[bols@hpf-linux tmp]$ setfacl -R -m  u:cangls:rwx /tmp/test/
[bols@hpf-linux tmp]$ getfacl /tmp/test/bols.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/test/bols.txt
# owner: bols
# group: bols
user::rw-
user:cangls:rwx
group::rw-
mask::rwx
other::r--
[bols@hpf-linux tmp]$ getfacl /tmp/test/
getfacl: Removing leading '/' from absolute path names
# file: tmp/test/
# owner: bols
# group: bols
user::rwx
user:cangls:rwx
group::rwx
mask::rwx
other::r-x [bols@hpf-linux tmp]$ ls -ld test/
drwxrwxr-x+ 2 bols bols 4096 7月 9 08:00 test/
[cangls@hpf-linux test]$ echo "cangls" >> bols.txt
[cangls@hpf-linux test]$ cat bols.txt
cangls
bols
cangls

Linux权限管理.md的更多相关文章

  1. Linux系列教程(十六)——Linux权限管理之ACL权限

    通过前面的两篇博客我们介绍了Linux系统的用户管理,Linux用户和用户组管理之相关配置文件 讲解了用户管理的相关配置文件,包括用户信息文件/etc/passwd,用户密码文件/etc/shadow ...

  2. 【Linux】 Linux权限管理与特殊权限

    Linux权限管理 权限管理这方面,非常清楚地记得刚开始实习那会儿是仔细研究过的,不知道为什么没有笔记留痕..除了一些基本的知识点早就忘光了,无奈只好从头开始学习一遍.. ■ 基本权限知识 这部分实在 ...

  3. Linux基础知识之用户和用户组以及 Linux 权限管理

    已经开始接触Linux用户管理,用户组管理,以及权限管理这几个逼格满满的关键字.这几个关键字对于前端程序猿的我来说真的是很高大上有木有,以前尝试学 Linux 的时候看到这些名词总是下意识的跳过不敢看 ...

  4. Linux权限管理之ACL权限

    注:转载自:https://www.cnblogs.com/ysocean/p/7801329.html 目录 1.什么是 ACL 权限? 2.查看分区 ACL 权限是否开启:dump2fs ①.查看 ...

  5. [Linux 003]——用户和用户组以及 Linux 权限管理(一)

    嗬!没想到吧!学习 Linux 的第三天,我们已经开始接触用户管理,用户组管理,以及权限管理这几个逼格满满的关键字.这几个关键字对于前端程序猿的我来说真的是很高大上有木有,以前尝试学 Linux 的时 ...

  6. 用户和用户组以及 Linux 权限管理

    1.从 /etc/passwd 说起 前面的基本命令学习中,我们介绍了使用 passwd 命令可以修改用户密码.对于操作系统来说,用户名和密码是存放在哪里的呢?我们都知道一个站点的用户名和密码是存放在 ...

  7. Linux权限管理(用户、组、文件管理)

    一. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 1. 文件查看类命令cat,tac, head, tail, more, less, ls ,file: -ls : l ...

  8. linux权限管理-特殊权限

    目录 linux权限管理-特殊权限 一,特殊权限 Linux权限属性chattr概述 linux进程掩码umask linux权限管理-特殊权限 一,特殊权限 1.suid(4000) SetUID( ...

  9. linux权限管理-基本权限

    目录 linux权限管理-基本权限 权限修改命令chmod linux权限管理-基本权限 权限 针对某些文件和进程,对用户进行限制 权限与用户的关系 rwx rwx r-x User Group Ot ...

随机推荐

  1. Eclipse中Python开发环境搭建

    Eclipse中Python开发环境搭建  目 录  1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...

  2. Atitit.atiagent  agent分销系统 代理系统 设计文档

    Atitit.atiagent  agent分销系统 代理系统 设计文档 1. 启动项目1 2. 首也2 3. 登录功能2 4. 用户中心2 5. 充值查询3 6. 授权下级代理4 7. 我的提成5 ...

  3. jquery图片播放切换插件

    点击这里查看效果可自定义数字样式和左右点击按钮 这个更好:移入按钮切换版本 更多图片轮播 以下是HTML文件代码: <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  4. Jquery中的Ajax

    AJAX: * jQuery中的Ajax * 封装第一层 - 类似于原生Ajax的用法 * $.ajax() - 最复杂 * 选项 * url - 请求地址 * type - 请求类型,默认为GET ...

  5. 详解JavaScript中的this

    JavaScript中的this总是让人迷惑,应该是js众所周知的坑之一. 个人也觉得js中的this不是一个好的设计,由于this晚绑定的特性,它可以是全局对象,当前对象,或者…有人甚至因为坑大而不 ...

  6. 未能加载包“Microsoft SQL Server Data Tools”

    直接在vs2013里的App_Data目录创建数据库,在服务器资源管理器中查看时报错: 未能加载包“Microsoft SQL Server Data Tools” 英文: The 'Microsof ...

  7. 在SharePoint中创建可自定义属性的文件夹

    概况 阅读时间:约5分钟 适用版本:SharePoint Server 2010及以上 面向用户:普通用户.管理员.开发人员 难度指数:★★★☆☆ SharePoint中的文件夹分为2种,一种是文档库 ...

  8. 在eclipse中把Tomcat 8删掉不能重建问题,启动Tomcat重置本地配置问题

    转载:http://blog.csdn.net/caiwenfeng_for_23/article/details/45480039 PS: 今天手贱,把Eclipse里的tomcat删掉了,然后发现 ...

  9. 一步步搭建react-native环境(苹果OS X)

    因重新升级了系统,一步步搭建react-native环境. 1.安装Homebrew 打开终端命令->ruby -e "$(curl -fsSL https://raw.githubu ...

  10. android 图片性能优化

    本章讲述在android开发中,图片处理方面的优化.包括知识点为大图加载,图片压缩,图片缓存处理及开源图片处理框架Universal-Image-Loader. 1.图片引发的内存不足 当在andro ...