目录
权限
Linux作为一种多用户操作系统,说明可以同时多个用户同时登录,各自操作互不影响。
随着用户的增加,伴随而来的也会有很多问题,比如说修改他人文件……所以为了避免这样的问题产生,系统进行了权限的控制。
这就意味着用户能够操作的内容得到了限制和规范,有利于维护系统整体的整体性和完整性。
1 系统操作权限
主要将用户分为两类用户:
- 管理员用户(root用户)
- 其他普通用户
普通用户在系统上的操作都是受到限制的,比如说安装或者卸载软件,修改系统时间等。
1.1 系统操作指令
- su:切换用户
- useradd:添加用户
- userdel:删除用户
- passwd:设置用户密码
作为普通用户,不可避免的会产生一些需要管理员权限的操作,比如安装一个工具便需要管理员操作权限,但是频繁的切换操作权限过于繁杂。
所以有:
- sudo:不是单独的指令,用于为普通用户当前的操作进行临时提权
sudo存在一定的前提条件:时用户需要被添加到sudoers配置文件中。
2 文件操作权限
系统将对文件访问的用户分为了三类:
- 文件所有者-u(默认文件创建者):文件访问权限都是文件所有者进行控制
- 文件所属组-g:某一类用户可以对该文件进行某些操作
- 其他用户-o:除文件所有者和文件所属组成员外的用户
系统将能够对文件进行的操作分为了三类:
- 可读-r:可以查看文件内容(对于目录而言,就是能够查看目录中的文件信息)
- 可写-w:可以修改文件内容(对于目录而言,就是能够在目录中创建和删除文件)
- 可执行-x:可以执行这个文件(对于目录而言,就是能够进入该目录中)
在实际的Linux环境当中,对于权限的表示如下所示:
rwx/rwx/rwx,其中实际的显示中并无/符号,不过这里为了将其分隔开来而使用了它。
对于权限标识而言,前三位标识文件所有者的操作权限;中间三位标识文件所属组的组内成员操作权限;后三位标识其他用户的操作权限。
当某个位置是 - 符号,则表示不具备对应权限。
例如,当存在某个文件的权限标识为:rw-r--r--。则对该文件而言,它的所有者有可读可写的操作权限;而它的文件所属组成员和其他用户都只有可读的操作权限。
3 权限的另类标识
权限如果以字符形式存储,会比较耗费磁盘空间,因为权限至少要占据9个比特位来进行存储。
所以为了减少磁盘存储的压力,我们从用户是否具备权限的角度出发,采取二进制的比特位来进行标识,即通过使用0和1来标识是否具备某个权限。
例如可以将这样的权限标识:rwxrw-r--,写为:111110100,即为764。
此时的三个比特位刚好就是一个八进制数组,所以某类用户的操作权限,也可以使用八进制数字来标识。
4 权限的相关指令
4.1 umask
- umask:查看或设置文件的创建权限掩码
掩码影响了文件创建出来的默认权限,默认权限是掩码取反(仅相遇命令行终端中使用命名创建)
实际的计算方式为:创建文件时给定的权限,与掩码取反的值进行相与。
例如,当我们通过使用touch命令来创建文件,其中touch命令默认给定权限时666,umask的掩码默认是002。
则,~002 = 775(111 111 101) & 666(110 110 110) = 664(110 110 100)。
还存在一种简单的权限计算方法:在命令行中创建文件,默认权限便是使用777减去掩码的值。
即777 - 002 = 664。
4.2 chmod
- chmod:修改一个已存在的文件权限
该命令可以给指定用户添加或移除指定的权限:
chmod [augo](用户类别选项) [+-](添加和删除选项)[rwx](修改权限类别)。
例如:chomd u+x file,即为file文件中的文件所有者添加可执行权限。
同样的,我们也可以直接使用八进制数字进行权限的设置,chmod 777 file,这样操作便会使所有用户都具有全部权限。
在了解完大概的Linux操作指令之后,我们需要了解一个叫做“粘滞位”的概念。
5 粘滞位
在实际操作中,公司为避免某个用户对代码库进行删除导致财产损失,因此诞生了一种需求:其他用户在一个目录下,可以创建文件,可以删除自己的文件,但不能删除别人的文件。
这便是粘滞位的功能:
- 只针对其他用户
- 不能删除别人文件
实际操作方式为:chmod +t dir。其中 t 字符便为粘滞位特有的标识。