Linux文件权限学习

主要内容:

  1. 理解Linux安全性
  2. 使用Linux组
  3. 解读文件权限

1. Linux安全性

Linux安全系统的核心是用户账户。每个能进入Linux系统的用户都会被分配唯一的用户账户。用户对系统中各种对象的访问权限取决于他们登录系统时用的账户。

用户权限是通过创建用户时分配的用户ID (User ID,通常缩写为UID)来跟踪的。UID是数值,每个用户都有唯一的UID,但在登录系统时用的不是UID,而是登录名 。登录名是用户用来登录系统的最长八字符的字符串(字符可以是数字或字母),同时会关联一个对应的密码。

Linux系统使用特定的文件和工具来跟踪和管理系统上的用户账户。在我们讨论文件权限之前,先来看一下Linux是怎样处理用户账户的。

主要涉及一些系统用户,密码修改,添加用户的内容,不做过多的介绍。

  passwd test//修改test用户的密码
 // chpasswd,chsh,chfn,change 等等
  finger 可以非常方便的查看Linux系统上的用户信息。

2. Linux组

用户账户在控制单个用户安全性方面很好用,但涉及在共享资源的一组用户时就捉襟见肘了。为了解决这个问题,Linux系统采用了另外一个安全概念—— 组 (group)。

/usr/sbin/groupadd shared //新建一个组
/usr/sbin/usermod -G shared rich //给组添加用户
/usr/sbin/groupmod -n sharing shared //修改组名

//mac 下面查看所有组和用户
dscacheutil -q group

mac

3. 理解文件权限

3.1 使用文件权限符

ls命令可以用来查看系统上面的文件、目录、设备的权限

ls -l 

输出结果的第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象的类型:

  1. - 代表文件
  2. d 代表目录
  3. l 代表链接
  4. c 代表字符型设备
  5. b 代表块设备
  6. n 代表网络设备

之后有3组三字符的编码。每一组定义了3种访问权限:

  1. r代表对象是可读的
  2. w 代表对象是可写的
  3. x 代表对象是可执行的

若没有某种权限,在该权限位会出现单破折线。这3组权限分别对应对象的3个安全级别:

  1. 对象的属主
  2. 对象的属组
  3. 系统其他用户

3.2 默认文件权限

文件创建之后的默认权限是怎么来的呢,这个与umask命令有关,umask命令用来设置所创建文件和目录默认权限。

我们先了解一下Linux文件的权限码:

权限|二进制|八进制|描述

---|000|0|无权限

--x|001|1|只有执行权限

-w-|010|2|只有写入权限

-wx|011|3|写和执行权限

r--|100|4|读权限

r-x|101|5|读取和执行的权限

rw-|110|6|读取的写入的权限

rwx|111|7|所有权限

e.g.:664代表属主和属组有读写,其他的只有读取。

那么对于文件 666 表示最大权限 对于目录777表示最大权限

➜  ~ umask
022
➜  ~ touch dd
➜  ~ ls -l dd
-rw-r--r--  1 zhanglinyu  staff  0  9 18 15:27 dd  //644
➜  ~

644=666-022 //现在我们应该知道umask的作用了

4. 改变安全性设置

chmod 命令用来改变文件和目录的安全性设置。

该命令的格式如下: chmod options mode file。
八进制模式符号模式

4.1 使用八进制模式:
chmod 666 dd //表示所有读写权限都开放
4.2 使用符号模式:

[ugoa…][[+-=][rwxXstugo…]
u:代表用户
g:代表组
o:代表其他
a:代表上述所有

下一步,后面跟着的符号表示你是想在现有权限基础上增加权限(+),还是在现有权限基础上移除权限(-),或是将权限设置成后面的值(=)。

最后,第三个符号代表作用到设置上的权限。你会发现,这个值要比通常的rwx 多。额外的设置有以下几项。

X :如果对象是目录或者它已有执行权限,赋予执行权限。
s :运行时重新设置UID或GID。
t :保留文件或目录。
u :将权限设置为跟属主一样。
g :将权限设置为跟属组一样。
o :将权限设置为跟其他用户一样。

chmod o+r dd //给dd文件其他用户赋予读取权限
4.3 改变所属关系

有时你需要改变文件的属主,比如有人离职或开发人员创建了一个在产品环境中需要归属在系统账户下的应用。Linux提供了两个命令来实现这个功能:chown 命令用来改变文件的属主,chgrp 命令用来改变文件的默认属组。 chown 命令的格式如下。

chown options owner[.group] file

chown zhanglinyu dd //属主变成zhanglinyu
chown zhanglinyu.staff dd//属主和属组都改变
chown .staff dd//改变属组
chown test. dd //如果你的Linux系统采用和用户登录名匹配的组名,可以只用一个条目就改变二者。

chown 命令采用一些不同的选项参数。
-R 选项配合通配符可以递归地改变子目录和文件的所属关系。
-h 选项可以改变该文件的所有符号链接文件的所属关系。

说明  只有root用户能够改变文件的属主。任何属主都可以改变文件的属组,但前提是属主必须是原属组和目标属组的成员。

chgrp shared newDirective //改变文件或者目录的默认属组

用户账户必须是这个文件的属主,除了能够更换属组之外,还得是新组的成员。现在shared组的任意一个成员都可以写这个文件了。这是Linux系统共享文件的一个途径。然而,在系统中给一组用户共享文件也会变得很复杂。