6. Linux 文件权限

2019-02-05  本文已影响2人  独木舟的木

[TOC]

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

文件读取、写入和执行

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

文件属性

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

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

属性 文件类型
- 普通文件
d 目录文件
l 符号链接,注意对于符号链接文件,剩余的文件属性总是 "rwxrwxrwx",而且都是虚拟值。真正的文件属性是指符号链接所指向的文件的属性。
c 字符设备文件。这种文件类型是指按照字节流,来处理数据的设备。 比如说终端机,或者调制解调器。
b 块设备文件。这种文件类型是指按照数据块,来处理数据的设备,例如一个硬盘,或者 CD-ROM 盘。
s 本地域套接字文件(socket),用于进程间通信。
p 有名管道

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

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

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

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

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

6. 第 6、7、8 列

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

7. 第 9 列——文件名

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

chmod 更改文件模式

1⃣️ 八进制表示法

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 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
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]

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

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

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

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

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

查看 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 :改变一个目录及其下所有文件(和子目录)的所有权设置。

上一篇下一篇

猜你喜欢

热点阅读