为什么要给文件设置权限
首先,Linux是多用户操作系统,一台服务器,可能有开发、运维、测试等多个部门构成,同时还有有一个超级管理员root,也就是项目负责人CTO负责整个项目的进度周期。
然而,Linux中的命令十分灵活,专业度要求也很高,如果一个刚刚实习的程序员拥有root权限,不小心删除了重要文件或者数据,就可能导致整个项目付之一炬。或者员工离职跑路直接删除公司数据库,这样的案例业内屡见不鲜。
因此,就要给每个用户分配不同权限,比如,每个用户对自己创建的文件拥有最高权限,同时,开发组内用户对组内文件可以进行修改。每个操作都有日志记录。然而,开发组员工进入运维组目录,只可以观看,不可以更改。每个部门再设置一个共享目录,共享目录都不可以修改,只有将内容拷贝到自己的目录下才可以修改。
这样,才可以更好的保障Linux系统的安全性,一方面防止自己内部人员危险操作,另一方面也可以防止黑客入侵,即时黑客破解了某个用户的账号密码,由于权限有限,也难以进行大规模损害操作。
权限的基本概念
Linux下一切皆文件,不同的用户对文件拥有不同的权限。在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。
在Linux 中分别有读、写、执行权限:
权限针对文件 | 权限针对目录 | |
读r | 表示可以查看文件内容 | 表示可以查看目录中存在的文件名称 |
写w | 表示可以更改文件的内容 | 表示是否可以删除目录中的子文件或者新建子目录( |
执行x | 表示是否可以开启文件当中记录的程序,一般指二进制文件(.sh) | 表示是否可以进入目录中 |
查看文件权限
Linux中,不同用户角色创建文件默认权限不同,root用户创建文件默认权限如上图所示。
- -代表文件类型是一个普通文件
- 红框代表文件拥有者user
- 绿框代表文件所属组group组内其他用户
- 蓝框代表其他用户other
- 如果是目录,文件类型为d
文件类型
Linux一共有7种文件类型,分别如下:
- -:普通文件
- d:目录文件
- l: 软链接(类似Windows的快捷方式)
- b:block,块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件
- s:套接口文件/数据接口文件
文件权限设置-字母
权限设置:
1:确认要给哪个身份设置权限,u、g、o、ugo(a)
2:确认是添加权限(+)、删除权限(-)还是赋予权限(=)
3:确认给这个用户针对这个文件或文件夹设置什么样的权限,r、w、x
文件权限设置-数字
权限 | 对应数字 | 意义 |
r | 4 | 可读 |
w | 2 | 可写 |
x | 1 | 可执行 |
- | 0 | 没有权限 |
文件拥有者和所属组设置
拥有者设置
所属组设置
同时修改拥有者和所属组
特殊权限
冒险位SETUID(针对二进制文件)
作用:为了让一般使用者临时具有该文件所属主/组的执行权限。
例如:/usr/bin/passwd在执行它的时候需要去修改/etc/passwd和/etc/shadow等文件,这些文件除了root外,其他用户都没有写权限,但是又为了能让普通用户修改自己的密码,那么该如何操作?
去除S位权限
添加S位权限
强制位SETGID(针对目录)
作用:如果一个目录有强制位,那么任何用户在该目录里所创建的文件属组都会继承该目录的属组。
去除S位权限
添加S位权限
粘附位T(针对目录)
作用:只允许文件的创建者和root用户删除文件(防止误删除权限位)
去除粘附位
添加粘附位
umask
umask表示创建文件时的默认权限(即创建文件时不需要设置而天生的权限)
我们创建一个普通文件最高权限666,而创建一个文件夹其最高权限777。
实际文件权限 = 最高权限 - umask的值
获取用户umask值
修改umask值(一般不要更改)
临时修改
永久修改
ACL权限
ACL,是 Access Control List(访问控制列表)的缩写,在 Linux 系统中, ACL 可实现对单一用户或者某个组设定访问文件的权限,ACL优势就是让权限控制更加的精准。
安装acl
获取ACL权限
设置ACL权限
mask权限设置:
目录递归授权