6. Linux 文件权限

[TOC]

Unix 系统的特性:多任务、多用户系统。

文件读取、写入和执行

对于文件和目录的访问权限是根据读访问,写访问,和执行访问来定义的。

文件属性

1. 第一列10个字符——文件的属性

列表的前十个字符是文件的属性,这十个字符的第一个字符表明文件类型。Linux 中一共有 7 种文件类型:

属性 文件类型
- 普通文件
d 目录文件
l 符号链接,注意对于符号链接文件,剩余的文件属性总是 "rwxrwxrwx",而且都是虚拟值。真正的文件属性是指符号链接所指向的文件的属性。
c 字符设备文件。这种文件类型是指按照字节流,来处理数据的设备。 比如说终端机,或者调制解调器。
b 块设备文件。这种文件类型是指按照数据块,来处理数据的设备,例如一个硬盘,或者 CD-ROM 盘。
s 本地域套接字文件(socket),用于进程间通信。
p 有名管道
  • 剩下的九个字符,叫做文件模式,代表着文件所有者,文件组所有者,和其他人的读,写,执行权限。
  • 后边的 9 位,每三个为一组。均为 rwx 三个参数的组合。其中 r 代表可读,w 代表可写,x 代表可执行。
    • 前三位:所属主(user,即文件的拥有者)的权限;
    • 中间三位:所属组(group,即该文件所属主所在的一个组)的权限;
    • 最后三位:其他非本群组(others)的权限;
  • 对于一个目录来讲,打开这个目录即为执行这个目录,所以任何一个目录必须要有 x 权限才能打开并查看该目录。

2. 第 2 列——连接占用的节点(inode)

若为目录时,通常与该目录下还有多少子目录有关系,关于连接(link)在以后章节详细介绍。

3. 第 3 列——该文件的所属主

4. 第 4 列——该文件的所属组

5. 第 5 列——该文件的大小

6. 第 6、7、8 列

该文件的创建日期或者最近的修改日期,分别为月份日期以及时间。

7. 第 9 列——文件名

如果前面有一个. 则表示该文件为隐藏文件。

chmod 更改文件模式

  • 更改文件或目录的模式(权限),可以利用 chmod 命令。
  • 只有文件的所有者或者超级用户才能更改文件或目录的模式。
  • chmod 命令支持两种不同的方法来改变文件模式:八进制数字表示法、符号表示法。

1⃣️ 八进制表示法

  • 使用八进制数字来设置所期望的权限模式。
  • 使用用八进制表示法来表示3个二进制数非常有优势。
  • 通过使用 3 个八进制数字,可以设置文件所有者,用户组,和其他人的权限
Octal Binary File Mode
0 000 ---
1 001 --x
2 010 -w-
3 011 -wx
4 100 r--
5 101 r-x
6 110 rw-
7 111 rwx

语法:chmod [-R] xyz 文件名,(xyz表示数字,777)

r=4,w=2,x=1,-=0,默认目录权限755(drwxr-xr-x)、默认文件权限644(-rw-r--r--)。

权限符 读取(r) 写入(w) 执行(x)
八进制 4 2 1

如果你创建了一个目录,而该目录不想让其他人看到内容,则只需设置成 rwxr----- (740) 即可。

# 修改私钥文件权限为只读属性
chmod 400 ~/.ssh/mykeypair.pem

2⃣️ 符号表示法

  • 符号表示法分为三部分:更改会影响谁,要执行哪个操作,要设置哪种权限。
  • 通过字符 “u”,“g”,“o”,and “a” 的组合来指定要影响的对象。
  • 符号表示法的优点:允许你设置文件模式的单个组成部分的属性,而没有影响其他的部分。
字符 描述
u user,文件或目录的所有者。
g group,用户组。
o others,其他所有的人。
a all,是 “u”,“g”,和 “o” 三者的联合。

如果没有指定字符,则假定使用 “all”。执行的操作可能是一个 “+” 字符,表示加上一个权限, 一个 “-”,表示删掉一个权限,或者是一个 “=”,表示只有指定的权限可用,其它所有的权限被删除。

chmod 符号表示法示例 作用
u+x 为文件所有者添加可执行权限。
u-x 删除文件所有者的可执行权限。
+x 为文件所有者,用户组,和其他所有人添加可执行权限。等价于 a+x。
o-rw 除了文件所有者和用户组,删除其他人的读权限和写权限。
go=rw 给群组的主人和任意文件拥有者的人读写权限。如果群组的主人或全局之前已经有了执行的权限,他们将被移除。
u+x,go=rw 给文件拥有者执行权限并给组和其他人读和执行的权限。多种设定可以用逗号分开。

语法:用户组+/-权限 、 用户组=权限、用户组1=用户组2

# 用户组+/-权限 
$ chmod u+x days    # 增加属主对文件的执行权限
$ chmod a-x days    # 删除所有人对文件的执行权限

# 用户组=权限
$ chmod ug=rw,o=r days    # 赋予属主和属组的读取/写入权限,其他人只有读取权限

# 用户组1=用户组2
$ chmod o=u days   # 设置其他人的权限与属主权限完全相同

umask 设置默认的文件权限

  • umask 命令使用八进制表示法来表达:从文件模式属性中删除一个位掩码
  • umask 命令设置的掩码值只能在当前 shell 会话中生效,若当前 shell 会话结束后,则必须重新设置。

检查创建文件的默认权限掩码:

# 默认以八进制形式显示当前的掩码
$ umask
0022

# 以字符形式显示当前的掩码
$ umask -S
u=rwx,g=rx,o=rx

$ touch test01.txt
-rw-r--r--  1 root    root         0 Jan 14 14:18 test01.txt

掩码 0022 的含义:

umask 的过程 示例 示例 示例 示例
初始文件模式 --- rw- rw- rw-
掩码(0022) 000 000 010 010
结果(rw-r--r--) --- rw- r-- r--

解读:掩码的二进制形式中,出现数字 1 的位置,相应地关掉该位置的文件模式权限。

chattr 修改文件的特殊属性

lsattr 列出文件/目录的特殊属性

语法:lsattr -[aR] [文件/目录名]

参数 含义
-a 类似与 ls 的 -a 选项,即连同隐藏文件一同列出;
-R 连同子目录的数据一同列出

su 以另一个用户的身份来运行 shell

语法:su [-[l]] [user]

  • 如果包含 "-l" 选项,加载此用户的 shell 环境,并且工作目录会更改到这个用户的主目录。
  • 如果不指定用户,那么就假定是超级用户。
  • 选项 "-l" 可以缩写为 "-"

⚠️ Ubuntu Linux 的限制非常严格,必须使用 sodu -s 来获得 root 访问权。

$ sudo -s    # 将自己提升为root用户 (Ubuntu Linux 系统)
$ su         # 同上
$ su -       # 同上
$ su alice   # 切换到 alice 账户

$ su -c 'command' # 只执行单个命令

$ exit       #回到先前的用户状态

sudo 以另一个用户的身份来执行命令

  • 管理员能够配置 sudo 命令,从而允许一个普通用户以不同的身份(通常是超级用户),通过一种非常可控的方式来执行命令。
  • sudo 命令不要求超级用户的密码。使用 sudo 命令时,用户使用他/她自己的密码来认证。
  • susudo 之间的一个重要区别是:sudo 不会重新启动一个 shell,也不会加载另一个用户的 shell 运行环境。

查看 sudo 命令可以授予哪些权限:

$ sudo -l
Matching Defaults entries for root on localhost:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User root may run the following commands on localhost:
    (ALL : ALL) ALL

需要 root 预先配置 /etc/sudoers

yum install -y sudo    # 安装 visudo 命令
visudo                 # 使用 visudo 命令编辑 sudo 配置文件

# root 用户可以使用 sudo 在任何机器上(第一个ALL)以任何用户身份(第二个ALL)执行任何命令(第三个ALL)
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL    # 所属组权限设置,wheel 组的所有用户都拥有 sudo 权利
test ALL=(ALL) ALL      # 所属主权限设置,test 用户拥有 sudo 权利

sudo 配置文件 / etc/sudoers 详解及实战用法

sudoers 的深入介绍与用户权限控制

chown 更改文件所有者和用户组

chown 命令被用来更改文件或目录的所有者和用户组,使用这个命令需要超级用户权限。
格式:chown [owner][:[group]] file...
参数:-R 改变一个目录及其下所有文件(和子目录)的所有权设置。

示例 结果
chown bob 把文件所有者从当前属主更改为用户 bob。
chown bob:users 把文件所有者改为用户 bob,文件用户组改为用户组 users。
chown :admins 把文件用户组改为组 admins,文件所有者不变。⚠️ 注意 :不能省略
chown bob: 文件所有者改为用户 bob,文件用户组改为,用户 bob 登录系统时,所属的用户组。

chgrp 更改文件组所有权

在旧版 Unix 系统中,chown 命令只能更改文件所有权,而不是用户组所有权。为了达到目的, 使用一个独立的命令,chgrp 来完成。

语法:chgrp [组名] [文件名]

参数:-R :改变一个目录及其下所有文件(和子目录)的所有权设置。

你可能感兴趣的:(6. Linux 文件权限)