Linux权限管理.md

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命令赋予的属主的权限进行更改文件:

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

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

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

-R递归目录用法举例:

[[email protected] tmp]$ setfacl -R -m  u:cangls:rwx /tmp/test/
[[email protected] 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--
[[email protected] 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

[[email protected] tmp]$ ls -ld test/
drwxrwxr-x+ 2 bols bols 4096 7月   9 08:00 test/
[[email protected] test]$ echo "cangls" >> bols.txt
[[email protected] test]$ cat bols.txt
cangls
bols
cangls
时间: 2025-01-18 01:58:17

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

Linux权限管理及用户与用户组

第一部分:Linux权限管理 一.基本权限 linux权限机制采用UGO模式.其中 u(user)表示所属用户.g(group)表示所属组.o(other)表示除了所属用户.所属组之外的情况. u.g.o 都有读(read).写(write).执行(excute) 三个权限,所以UGO模式是三类九种基本权限. 用命令 ls -l 可列出文件的权限,第一列输出明确了后面的输出(后面一列代表 ugo权限).第一个字母对应的关系: "-"    普通文件 "d"   目录

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

Linux权限管理 权限管理这方面,非常清楚地记得刚开始实习那会儿是仔细研究过的,不知道为什么没有笔记留痕..除了一些基本的知识点早就忘光了,无奈只好从头开始学习一遍.. ■ 基本权限知识 这部分实在是比较基础,不想多讲了.主要就是9格权限的理解.搞清楚读权限.写权限和执行权限对于文件和目录来说分别以为着什么,就可以了.下面是一些以前没怎么注意,今天听完培训之后觉得有些意思的点: ●  管理权限的权限 文件权限信息和其他文件信息一样,并不属于文件内容的一部分,而基本的权限是针对文件内容而言的.比

[Linux 004]——用户和用户组以及 Linux 权限管理(二)

到权限了.前面讲到了 Linux 中的用户和用户主管理,其实它们的本质(或者用户和用户组出现的初衷)都是方便权限管理.权限管理对于计算机的重要性不言而喻,权限让每个用户能够安安心心的使用计算机,而不用担心别的用户破坏到自己的资源.如果老王手里有一把你家的钥匙,你是不是很蛋疼呢,如果邻居除了老王,还有老赵,老李,老张...都有你家的钥匙,你是不是更加蛋疼呢.作为多用户的 Linux 而言,权限管理至关重要. 1.Linux 文件权限的规定 前文提到,Linux 规定一个文件必须要有三种权限:文件所

linux权限管理总结

文件或目录的权限 目录和文件拥有:读r.写w.执行x权限. // 使用 ls -l命令查看当前目录的文件权限信息 #ll -rw-r--r-- 1 root root 161 Mar 20 20:39 test.txt // test文件所有者拥有读写权限.所属组和其他用户拥有读权限 drw-r--r-- 1 root root 248 Mar 23 21:03 download 权限对文件的作用 r :读取文件内容(cat.more.head.tail) w:编辑.新增.修改文件内容(vi.e

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

已经开始接触Linux用户管理,用户组管理,以及权限管理这几个逼格满满的关键字.这几个关键字对于前端程序猿的我来说真的是很高大上有木有,以前尝试学 Linux 的时候看到这些名词总是下意识的跳过不敢看有木有,一提起这几个名词马上脑海中总是升腾起无限的崇拜有木有!今天就硬着头皮捯饬捯饬这几个概念,希望能有所收获. 1.从 /etc/passwd 说起 前面的基本命令学习中,我们介绍了使用 passwd 命令可以修改用户密码.对于操作系统来说,用户名和密码是存放在哪里的呢?我们都知道一个站点的用户名

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

一. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 1. 文件查看类命令cat,tac, head, tail, more, less, ls ,file: -ls : list,列出指定目录下的内容 使用语法:ls [option]- [file]- 参数:-a 显示所有文件,包括隐藏文件: -A 显示除.和..之外的所有文件: -l –long,长葛市列表,即显示文件的详细属性信息: 例:-rw-r--r--. 1 root   root     8957 10月

Linux权限管理---特殊权限

目录 Linux权限管理---特殊权限 一.Linux系统特殊权限概述 二.特殊权限suid介绍 三.特殊权限sgid介绍 四.特殊权限sbit介绍 五.特殊权限总结: 六.linux权限属性chattr概述 七.Linux进程掩码umask Linux权限管理---特殊权限 一.Linux系统特殊权限概述 除了r(读). w(写). x(执行)这三种普通权限外,在查询系统文件权限时会发现还有其他的权限字母. 例如: [[email protected] ~]# ll /usr/bin/pass

linux权限管理初探

权限管理 在linux系统上,有个"潜规则",就是一切皆文件.字符设备是文件,目录是文件,套接字,也是文件...那么怎么区别那个文件到底属于哪种类型呢? 大多数文件系统的实现定义了7中文件类型, 分别是 普通文件 目录 字符设备文件 块设备文件 本地域套接字 有名管道 符号链接 用户可以使用命令 ls -l 来查看文件的类型.ls命令输出的第一个字符即为文件类型. [[email protected] ~]$ ls -l 总用量 0 drwxrwxr-x. 2 john john 6

Linux权限管理问题

权限管理是Linux中一个重要的部分.对于初学者来说,假如只有文件的权限管理内容就比较容易理解,但是文件与目录的权限产生的效果不一样,因此就会产生迷惑. 对于文件, r 读权限 允许查看文件内容 w    写权限 允许修改文件内容 x  执行权限   允许执行文件 对于目录, r 读权限 允许列出目录中的内容 w     写权限  允许创建或者删除目录中的文件 x 执行权限  允许进入目录 乍眼一看,感觉没有什么难以理解的或者令人迷惑的.那就举个例子吧.在/home/LuciferMJ文件下,r