Linux权限管理

明月清风 2016-10-09 248浏览 0条评论
首页/正文
分享到: / / / /

权限划分的基本理念

在计算机中,无论是出于安全还是隐私,我们都需要划分各类的权限来便于管理,现在让我们来整理一下 Linux 中的权限管理。

我们知道 Linux 中,每个用户都有自己的账户,都有自己的用户组,而有了用户与用户组的概念之后,我们就可以针对文件,依据账户和用户组划分权限,这就有了所有者与所属组的权限划分,而既不是文件所有者,又不是文件所属组的用户,就归为文件的其他人。

这就是 Linux 中权限划分的基本理念,基于这个理念我们延展出了一套权限划分管理机制,现在让我们来看看详细的权限管理:

Linux文件属性

通过 ls -al ,我们可以查看当前文件夹的所有文件的权限与属性。

[root@ZhangSir ~]#ls -al
总用量 68
dr-xr-x---. 17 root root 40 9 6 10月 24 20:02 .
dr-xr-xr-x. 18 root root 40 9 6 10月 21 15:45 ..
-rw-------. 1 root root 218 10月 24 17:28 .bash_history
-rw-r--r--. 1 root root 18 12月 2 9  2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 2 9  2013 .bash_profile
-rw-r--r--. 1 root root 175 10月 17 1 9 :48 .bashrc
drwx------. 6 root root 57 10月 11 17:13 .cache
drwxr-xr-x.  9  root root 40 9 6 10月 12 10:36 .config
-rw-r--r--. 1 root root 100 12月 2 9  2013 .cshrc
drwx------. 3 root root 24 10月 11 16:5 9  .dbus
-rw-------. 1 root root 35 10月 24 17:27 .lesshst
drwxr-xr-x. 3 root root 18 10月 11 17:01 .local
drwx------. 2 root root 24 10月 20 10:53 .ssh
-rw-r--r--. 1 root root 12 9  12月 2 9  2013 .tcshrc
-rw-------. 1 root root 6036 10月 23 1 9 :54 .viminfo
......(省略)

我们来看看各个属性代表了什么:

img

  • 1.文件类型。
    • -:文件(普通文件、纯文本文件ASCII、二进制文件、数据格式文件)。
    • d:目录。
    • l:链接文件。
    • b:块设备文件。
    • c:字符设备文件。
    • s:套接字文件。
    • p:管道文件。
  • 2.权限。
  • 3.连接数。 表示有多少文件链接到此i-node。
  • 4.文件所有者。
  • 5.文件所属组。
  • 6.文件大小,默认单位为B。
  • 7.文件创建时间或最近一次修改时间。
  • 8.文件名。

权限的表示方式

在上述格式中,我们了解到在文件类型标识符后的 9 位为该文件的权限。

权限分别为读权限(read)、写权(write)限、执行权限(execute),对应表示表示为r、w、x。

而所有者、所属组、其他人,每个类别对应三种权限,依次合起来就有了 9 位标示符。

若是对应类别没有相应权限,则用“-”标示,细心的朋友发现后面还有一个“.”,这个点则是衍生出来表述ACL状态。

其实我们可以用数字来表述三种权限: r:4 w:2 x:1 而权限又分为了三组,所以在平时我们使用数字表示权限时,则可以将其累加组合起来。

例如:rwxr-xr-- 所有者权限为读写执:rwx=4+2+1=7 所属组权限为读和执:r-x=4+1=6 其他人权限位读权限:r=4 组合起来就可以表述为764,注意依次为所有者、所属组、其他人,顺序不能乱。

这就是Linux中,基础的权限表述方式。

目录与文件权限的意义

目录是一种特殊文件,可以抽象的理解为它只是一个映射表,映射着其内文件的位置信息,目录本身并不存放数据。而它与数据文件的权限区别又是怎样的呢?

权限对文件的意义

文件是实际含有数据的地方,包括一般文本文件、数据库文件、二进制可执行文件等等,它的意义如下:

读权限(read):可读取此文件的实际内容。

写权限(write):可以编辑、新增、或是修改该文件的内容。

执行权限(execute):改文件具有可被系统执行的权限。

权限对目录的意义

目录主要的内容是记录文件名列表,而文件名则和i-node节点关联,所以如果针对目录是,权限的意义如下:

读权限(read):可读取目录结构,查询其内文件名数据。

写权限(write):拥有修改该目录结构列表的权限(新建、删除、重命名、移动之类改变文件目录结构操作)。

执行权限(execute):目录只是记录文件名,无法执行,在此代表了能否进入此目录,并对目录内容进行操作(若只有读写权限,而无执行权限,同样无法对此目录内拥有权限的文件进行操作)。

chmod:改变文件权限

了解完基础权限之后,我们再来学习如何改变文件的权限,chmod是一个更改文件权限的命令,下面是其用法说明: 例如给file1这个文件其他人添加读和写权限:

img

[root@ZhangSir ~]#ls -l file1 
-rw-rw----. 1 root root 0 10月 24 23:11 file1

则可以 chmod o+rw file1 这样修改 也可用数字修改 chmod 666 file1 取掉相应权限,可以用“-”来操作,或者也可以用数字来操作。

chmod常用选项有:

  • -R:递归操作,改变文件夹权限时,递归改变其文件夹内的文件权限(若加执行权限用大写的“X”可以跳过文件,只对文件夹生效,但是若文件之前就有执行权限,则不会跳过)。
  • -v:显示过程。

chown:改变文件所有者

chown 选项 账户名称 文件或目录【改变文件的所有者】 chown 选项 账户名称:组名称 文件或目录【改变文件的所有者与所属组】 通过“.”或者“:”分隔,我们可以一并修改文件的所有者和所属组,若符号后省略所属组,则默认使用所设所有者的主组,若省略所有者,则默认不改动所有者。

常用选项:

  • -R:递归改变,连同子目录下的所有文件都修改。
  • -h:若目标是链接文件,则仅改变链接文件本身。
  • -v:显示过程。

chgrp:改变文件所属组

chgrp 选项 组名 文件或目录

常用选项:

  • -R:递归改变,连同子目录下的所有文件都修改。
  • -h:若目标是链接文件,则仅改变链接文件本身。
  • -v:显示过程。

umask:文件默认权限

当我们创建文件的时候,都有着权限,而它们的权限设定又是怎么来的呢?

这就与 umask 有关了,基本上,umask 就是指定“当前用户在新建文件或目录时候的权限默认值”,那么如何得知或设置umask值呢?可以通过以下方式:

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

新建文件默认权限:

若用户创建文件时默认没有执行权限,也是就是最大权限为:rw-rw-rw-[666]

而我的umask=0022,其中与一般权限有关的是后三位【022】=----w--w-,默认最大权限减去umask便是创建文件时的默认权限:

rw-rw-rw- 新建文件默认最大权限

----w--w- umask

rw-r--r-- 得出新建文件的默认权限

新建目录默认权限:

用户新建目录时,最大权限为:rwxrwxrwx[777]

rwxrwxrwx 新建目录默认最大权限

----w--w- umask

rw-r-xr-x 得出新建目录的默认权限

从上我们可以看出,umask表示的是创建文件或目录时需要拿掉的权限,而我们用所对应的默认最大权限减掉umask,得到的权限便是创建时的默认权限啦。

文件隐藏属性管理:chattr、lsattr

chattr 命令的作用很大,其中一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多功能不能实现。另外,通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/var目录。并且此命令只能变存放在ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs等文件系统上的文件或目录属性,而且此命令默认只有root才能设置。

chattr [+-=]参数 文件或目录,命令接[+-=]来表示添加、删除、仅有后面的参数。

常用选项:

  • a:文件数据只能追加,不可删除、覆盖、修改。若目录有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
  • i:文件将不能进行任何修改,也不能删除。若目录有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
  • A:即Atime,告诉系统不要修改对这个文件的最后访问时间(atime)。
  • S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
  • d:当dump程序执行时,该文件或目录不会被dump备份。
  • s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
  • u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
  • c:将文件或目录压缩后存放。

lsattr【显示文件隐藏属性】

常用参数:

  • -a:连同显示隐藏文件。
  • -d:如果是目录,则仅列出目录属性而非目录内的文件。
  • -R:连同子目录内内容一同显示。

特殊权限:SUID、SGID、SBIT

前面我们一直提到文件的基础权限r、w、x,而基于其上衍生出更为详细与方便的特殊权限SUID、SGID、SBIT。

SetUID

  • 作用于文件所有者的执行(x)权限位。
  • 仅对可执行的二进制程序文件有效。
  • 对此文件有执行权限(x)。
  • 此权限仅在执行本程序执行过程中有效。
  • 执行者将具有此程序的所有者的权限。

SetGID

作用于文件时:

  • 作用于文件所属组的执行(x)权限位。
  • 对可执行进制的二进制程序文件有效。
  • 对此文件有执行权限(x)。
  • 执行者在执行过程中将获得此程序用户组的支持(临时加入此用户组)。

作用于目录时:

  • 当用户对此目录有执行(x)与读权限(r)。
  • 则在此目录中用户的有效用户组将会变成该目录的用户组。
  • 若用户在此目录创建文件或目录时,那么用户所创建的新文件的用户组将会是该目录的用户组

Sticky Bit

  • 作用于目录其他人的执行(x)权限位。
  • 仅对目录有效。
  • 当用户能够在此目录创建文件或目录时(至少具有w,x),其文件只有自己与root有权利进行删除、重命名、移动等操作。

acl的使用

通过前面的了解,文件针对三种用户(所有者、所属组、其他人)划分了三种(读、写、执行)权限,而基于其上的特殊权限(SUID、SGID、SBIT)也做了了解,其中并不能针对某一单一用户或某一用户组来设定特定的权限需求,此时就需要使用ACL这个机制了。 ACL:Access Control List

ACL 可以主要针对如下方面来控制权限:

  • 用户:可以针对用户设置权限。
  • 用户组:针对用户组设定权限。
  • 默认属性(mask):针对文件夹内新建文件或目录时的默认权限。

如何启动acl

ACL是传统的UNIX-like操作系统权限的恩爱支持项目,因此要使用ACL必须要有文件系统的支持才行,目前绝大多数的文件系统都支持ACL的功能,包括ReiserFS、EXT2/EXT3/ETX4、JFS、XFS等等。 查看文件系统是否开启ACL,可以使用 dumpe2fs -h 设备路径

[root@ZhangSir ~]#dumpe2fs -h /fdisk/disk 
dumpe2fs 1.42. 9  (28-Dec-2013)
Filesystem volume name: <none>
Last mounted on: /mnt/disk
Filesystem UUID: 3f252a12-d 9 af-473e-874d-7ab1c23041b6
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash 
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
......(省略)

Default mount options: user_xattr acl 可以看到默认以开启ACL

如果默认没有加上ACL,可以手动添加:

mount -o remount,acl 设备路径 或 tune2fs -o acl 设备路径

这样就能加入了,若是想要每次开机都生效,需要写入配置文件:/etc/fstab

setfacl:设置acl权限

setfacl 选项 参数 文件或目录名 常用选项:

  • -m:添加后续参数。
  • -x:删除后续参数。
  • -b:删除所有acl设置参数。
  • -k:删除默认的acl参数。
  • -R:递归设置acl,若执行权限写为大写“X”,则仅对文件夹设置x权限。
  • -d:设置默认acl参数,只对目录有效,在该目录新建的数据会引用此默认值。【子目录继承】

后续参数:

  • u:用户名:权限
  • g:用户组名:权限
  • m:权限(mask)【新建文件权限无法超越此值,若设置超过此值,便会自动减去其相应权限。】

getfacl:查看acl权限

getfacl 选项

常用选项:

  • -R:递归显示。
  • -l:显示链接文件指向的文件。
  • -n:数字标示用户和用户组。 当设置了ACL权限之后,基本权限位后的小点“.”会变成“+”号。
最后修改:2016-10-09 10:51:54 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

评论列表

还没有人评论哦~赶快抢占沙发吧~