权限管理
在Linux系统中,一切皆文件,用户在命令行中输入的命令也是一个文件。用户在命令行中输入命令,此命令若要执行,用户则必须要有相应执行权限,否则就会报权限不足的错误。待命令执行后,系统会将命令发起为一个进程,该进程会根据命令之后的参数执行相应的操作。比如用户在命令行中输入“cat /etc/passwd”,确定之后系统就会判断用户是否有cat命令的执行权限,若有则发起一个进程,该进程读取/etc/passwd文件并显示在标准输出上。那么,系统又是如何判断该进程是否有操作该文件的相应权限呢?
进程的安全上下文
在linux系统中每个进程均以某个用户的身份运行,进程访问资源的权限取决于发起此进程的那个用户的权限。
权限模型
从文件系统的角度来看,系统上的用户分为三类:
属主(owner):通过‘u’表示,一般为创建该文件的用户,管理员可修改
属组(group):通过‘g’表示,一般为用户所在的基本组,管理员可修改
其他(other):通过‘o’表示,不属于以上两种的用户
每个文件针对每类访问者定义了三种权限:
r: Readable w: Writable x: eXcutable
同样的权限作用于不同类型文件是所代表的意义有所不同,在这只针对普通文件和目录:
文件:
r:可以使用内容查看类的命令显示文件内容
w:可以使用编辑器修改文件内容
x:可以将其发起为进程
目录:
r:可以使用ls命令查看目录内容
w:可以创建和删除文件
x:可以使用ls -l命令查看目录内容并且可以使用cd命令切换此目录为工作目录
权限表示方法
字符型表示:文件对于某类用户有相应的权限就在相应的权限位用相应的字符表示,用户不拥有某位权限,则使用-占位
八进制表示:每类用户的权限使用三位二进制数的八进制表示,三位二进制数从左至右依次对应rwx的权限,0为有相应的权限,1为无相应的权限
权限应用模型
- 判断运行此进程的用户是否与被访问的资源的属主相同,如果相同,则运用属主的权限,如果不同,则
- 判断运行此进程的用户是否属于被访问资源的属组,如果是,则应用属组权限,如果不是,则
- 应用其他权限
文件权限管理命令
修改文件属主,属组:chown,chgrp
修改文件权限:chmod
修改遮罩码:umask
- chown
NAME
chown - 修改文件属主和属组,仅管理员可以修改
SYNOPSIS
chown [OPTION]... [OWNER][{.|:}[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
DESCRIPTION
若FILE是目录,默认不改变目录中文件的属主和属组
OPTIONS
-R:递归修改目录中的文件的属主,属组
--reference=RFILE:参照RFILE的属主,属组修改
- chgrp
NAME
chgrp - 修改文件属组
SYNOPSIS
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
OPTION
-R:递归修改目录中的文件的属组
--reference=RFILE:参照RFILE的属组修改
- chmod
NAME
chmod - 修改文件权限
SYNOPSIS
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
DESCRIPTION
1.操作三类用户的权限
chmod [OPTION]... OCTAL-MODE FILE...
2.操作指定类别用户的权限,使用u,g,o,a来赋权,基于=,+,-进行
=:操作指定类别用户的权限,eg:(u=rw),(ug=),(u=,g=)
+/-:操作指定类别用户的单个权限,eg:u+w,a-w
OPTION
-R:递归修改目录下的文件权限
--reference=RFILE:参照某文件修改文件权限
- umask
NAME
umask - bash的内置命令,用来查看和设置文件的遮罩码
SYNOPSIS
umask [-p] [-S] [mode]
DESCRIPTION
创建文件时文件权限为666-umask,但是文件默认绝不允许出现执行权限,若有执行权限则加一;
创建目录时目录权限为777-umask;