权限管理

基本权限

权限基本知识

什么是权限?

权限就是用来约束用户能对系统所做的操作。也就是说,权限是指某个用户对系统操作的权力。

为什么要有权限?

系统中一定会存在多个用户,权限主要是为了保护每个用户的隐私和工作环境,所以就有了权限。

权限与用户之间的关系

在linux系统中,权限只要用来定义用户能做什么,不能做什么。前面我们提到过有关用户权限的内容,如下图:
在这里插入图片描述
我们可以看到,图中有rw-------的字样,这一段就表示权限。
权限一般用rwx来表示。他们三位一组分别表示所属主(文件所有人)权限、所属组权限、其他人权限,他们每一种身份都对应三种权限r(读4)w(写2)x(执行1)。
用户访问文件的流程如下:

  1. 判断用户是否为文件的属主,如果是则按所有者的权限进行访问。
  2. 判断用户是否为文件的属组成员,如果是则按组的权限进行访问。
  3. 如果既不是属主也不是属组的成员,则按其他人权限进行访问。

权限对于文件以及目录的影响
在这里插入图片描述
注意:对于文件来讲,如果不给文件赋予r权限,那么赋予它别的权限也就没有意义了。
常用的文件权限有rw和rx,rw权限常用于配置文件的权限,rx常用于命令文件的权限,rwx常用于目录的属主权限。对目录来讲,如果不给目录x权限,那么赋予它别的权限同样没有意义。常用的目录权限有rx(进入目录,浏览目录,不能新增或删除文件)。
系统中文件默认的权限是644,而目录默认的权限是755。

修改权限

我们为什么要修改权限

我们是为了把权限赋予某个用户或组,从而决定让用户或组中成员能够以什么方式来访问某个文件。
注意:只有root用户可以变更所有文件的权限,普通用户只能变更属于自己的文件的权限。

怎样修改权限

我们修改权限使用的命令是chmod

使用ugo的方式来修改权限

u表示属主权限,g表示属组权限,o表示其他人权限。
示例如下:

[root@oldboy ~]# chmod u=rwx,g=rw,o=r a.txt 
[root@oldboy ~]# ll a.txt 
-rwxrw-r--. 1 root root 129 Mar 13 18:24 a.txt

这种方式并不常用。

使用数字的方式来修改权限

r = 4 w = 2 x = 1 三位一组,相加后写到指定的权限位置即可。
示例如下:

[root@oldboy ~]# chmod 766 a.txt 
# 修改a.txt的属主权限为rwx、属组权限为rw、其他人权限为rw。
[root@oldboy ~]# ll a.txt 
-rwxrw-rw-. 1 root root 129 Mar 13 18:24 a.txt

chmod -R命令表示递归修改,也就是说修改目录以及目录下的所有文件的权限。
使用示例如下:

[root@oldboy ~]# chmod 777 job/ -R
[root@oldboy ~]# ll job/
total 0
drwxrwxrwx. 3 root hr 117 Mar  4 15:28 oldboy

注:进程能够以何种方式访问一个文件,取决于进程所运行的用户身份对该文件是否拥有对应的权限。

特殊权限

suid

Linux中每个人都可以修改自己的密码,然而修改密码的操作需要更改/etc/shadow文件,而普通用户本来是没有对这个文件修改的权限的。那么我们为什么可以修改密码呢?
通过查看我们可以看到,我们的passwd命令权限中有一个s权限,这个权限表示用户在执行这个命令时,会以该命令的属主的身份去执行这个命令。然后这个命令的属主是root,root拥有最高权限,因此我们就可以去修改自己的密码了。
suid权限用数字表示是4000。
只有可执行的二进制程序才能设置suid权限。

[root@oldboy ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

[root@oldboy ~]# ll /etc/shadow
----------. 1 root root 674 Mar  4 14:36 /etc/shadow

我们来验证一下:
当我们的普通用户使用passwd修改自己的密码时,我们去查看进程信息得到的消息如下:

[root@oldboy ~]# ps aux | grep "passwd" 
root      41969  0.1  0.2 170712  1996 pts/0    S+   09:44   0:00 passwd
root      41975  0.0  0.0 112708   972 pts/2    R+   09:44   0:00 grep --color=auto passwd

由上面的执行结果可以看出,passwd这个命令哪怕是被普通用户执行实质上也是被root这个用户执行的。
添加s权限的方法:

[root@oldboy ~]# chmod 4755 /usr/bin/passwd
或者
[root@oldboy ~]# chmod u+s /usr/bin/passwd

sgid(使用极少)

只有可执行的二进制程序才能设置sgid权限。
sgid用数字的方式表示是2000。
与suid基本类似,区别在于sgid表示以属组身份去运行。
如果目录有用sgid权限,那么在其下创建的所有文件都将都与这个目录的属组保持一致。
方便我们去共享一个目录下的所有文件。
添加sgid权限的方法:

[root@oldboy ~]# chmod 2755 /usr/bin/passwd
或者
[root@oldboy ~]# chmod g+s /usr/bin/passwd

sbit

针对目录,表示粘滞位:
目录一旦被赋予了粘滞位,只有root可以删除所有的文件,其他用户就只能删除自己的文件。
作用:在我们要初始化mysql时,会创建一些临时文件到/tmp目录下,当初始化完毕后,自己会清理掉里面的数据,别人无法清理。(如果这个目录不是粘滞位,那么初始化mysql就会报错。)
sbit用数字的方式表示是1000。

[root@oldboy ~]# ll /tmp/ -d
drwxrwxrwt. 10 root root 4096 Mar 17 09:19 /tmp/

添加sbit权限的方法:

[root@oldboy ~]# chmod 1755 /tmp
或者
[root@oldboy ~]# chmod o+t /tmp

文件属性

lsattr 表示查看文件的特殊属性。

chattr

用于修改文件的特殊属性,凌驾于rwx基础权限之上的授权。
格式:
chatrr [±=] 选项 文件或目录名
选项 a:让文件或目录仅可追加内容(一般用于日志类文件,如:sudo日志)
i:不可任意变更文件或目录

umask默认权限

系统中默认创建的目录权限为什么是755,默认创建的文件权限是644呢?又是为什么默认创建一个用户,他的家目录权限是700呢?
要知道,系统默认的权限为: 目录 777 文件666
原因在于这些文件权限都是由umask来控制的。
假设我们的umask为0022,那么我们最终创建出来的文件和目录就是:
目录755 文件644
可以看出,我们创建文件或目录他们的默认权限就是系统默认的权限减去我们的umask值所得到的。

umask涉及到的相关文件:
/etc/login.defs 这个文件可以修改创建用户的家目录的默认权限,在这个文件中我们可以看到umask值为077,因此我们的家目录的权限默认就是700。如果我们想修改用户的家目录的默认权限,我们只需要修改这个文件中的umask值就可以。

/etc/profile 这个文件可以修改用户创建的文件或目录的默认权限,文件中与umask相关的代码如下图:
在这里插入图片描述
我们都知道,我们创建的用户无论是普通用户还是系统用户,他们的uid都是大于199的,因此分析上面的代码可以看出,我们创建的用户所创建的文件的默认umask值为022,而系统默认就有的用户如root创建的文件的默认的umask值为002。
这里的umask值可以进行修改,但是生产过程中没有这样的必要。
如果我们要临时修改umask值可以使用umask命令来进行修改。
使用示例如下:

[root@oldboy ~]# umask 045

注意:在使用umask计算文件权限时,如果存在奇数位的umask值,那么正常计算后需要给对应的位置+1,如果没有奇数位的umask值,那么直接计算即可。在计算目录权限时,则直接计算即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值