Linux:权限

简介: Linux:权限

用户

所谓权限,就是通过一定条件来拦住一部分人,让另外一部分人访问资源的权利。简单来说,就是能与不能的关系。那么毫无疑问,权限会与人有关,我们先来看看Linux中有那些种类的用户。

在Linux中,只存在两种用户:

root:超级管理员

user:普通用户

root用户在Linux中几乎无所不能,甚至可以把整个根目录给删掉,因此十分危险。那么我们要如何在Linux中创建普通用户?

创建用户

指令adduser+用户名,即可创建一个用户:

以上代码就创建了一个名为me的用户,我们可以到/home目录下查找当前存在的用户:

随后我们要为这个用户设置密码,指令为passwd + 用户名:

随后输入你的密码即可,一般来说Linux会向你确认两次密码。

如果你想要删除一个用户了,则用指令userdel -r + 用户名:

此时我们再去/home目录下查找,就找不到该用户了。这里不要漏掉-r选项,不然会有用户的残留文件,下次创建相同名字的用户时,有可能就会创建失败了。

创建好用户后,我们要如何进行用户的切换呢?

用户切换

su xxx变为xxx用户,比如我现在要从root变为一个名为box-he的用户:

其中,whoami指令可以输出当前的用户名。

从以上图片可以看出:

  1. root用户变为普通用户无需密码
  2. root状态下,命令行末尾是#user状态下,命令行末尾是$

现在再尝试从普通用户变为其它普通用户,我这里从box-he变为hxy用户:


可以看到:普通用户变为普通用户,是需要密码的

那么普通用户可以变成root用户吗?也是可以的,有两种方式:

指令su,暂时提升为root用户:

该方法提升为root有以下特点:

  1. 提升为root后,工作目录不会改变
  2. 是临时性的提升,可以通过ctrl + D退出当前状态

另外一种方式为su -,该方法则是切换为root用户:

该方法提升为root有以下特点:

  1. 提升为root后,工作目录会变成root的家目录
  2. 是用户的转变,相当于用root身份重新登陆了一次

不过Linux的权限远远不止取决于这个用户是谁,在学校中,你可以进入学校的大门,因为你是学校的学生;在餐馆中,你可以享受美食,因为你是消费者;在电视上,你可以跳过广告,因为你是VIP。可见你能不能享受一个服务,并不取决于你是谁,而取决于你在该环境下的身份。

文件的权限

身份

在Linux中,对于任意一个文件,都只有三种身份:拥有者own所属组group其它other。而这个身份,我们可以直接通过ll指令看到:

上图中,第三项和第四项就分别代表拥有者和所属组,即box-he box-he。说明这两个文件的拥有者和所属组都是box-he用户。


那么为什么这个文件没有写other呢?因为除了拥有者和所属组,其他用户的身份都是other。


那么我们要如何对文件的拥有者和所属组进行修改呢?

chown

chown指令用于修改文件的拥有者,语法如下:

chown 新拥有者 文件名

该指令需要root权限才能执行,要么就在root身份下执行,要么就使用sudo进行指令提权

在此,我直接切换为root进行该操作,接下来我们尝试把test.txt的拥有者改成root

可以看到,test.txt文件的拥有者变成root了。

chgrp

chgrp指令用于修改文件的所属组,语法如下:

chgrp 新所属组 文件名

chown相同,该指令需要root权限才能执行

接下来我把test.txt的所属组也改成root

这下test.txt文件的所属组也变成root了。

那么我们知道了对于一个文件,不同的用户有不同的身份,那么每个身份又有怎样的权限呢?这就和文件的权限值相关了。


权限值

当我们用ll输出当前目录下的文件信息时,其实就可以看到文件的权限值了:

其中,每个文件前的第一项,就是该文件的权限值。比如test.txt的权限值为-rw-rw-r--testdir的权限值为drwxxrwxr-x

testdir为例,一个文件的权限值可以拆为:

第一个字符d:表示文件类型

第2,3,4个字符rwx:表示拥有者的权限

第5,6,7个字符rwx:表示所属组的权限

第8,9,10个字符r-x:表示other的权限

除了第一个字符表示文件的类型,常见的文件类型及标识符如下:

  • d:目录文件
  • -:普通文件
  • b:块设备文件
  • c:字符设备文件
  • p:管道文件
  • l:链接文件

那么我们的testdir第一个字符为d,说明该文件是个目录。

剩下的九个字符,每三个为一组,其中字符的含义为:

  • r:读取权限
  • w:写入权限
  • x:执行权限
  • -:没有该位置对应的权限

因此drwxxrwxr-x的意思就是,该文件的拥有者可以读,写,执行;该文件的所属组可以读,写,执行;该文件的other可以读,执行,但是不能写入。

比如以下文件test.txt的权限为rwx------,拥有者和所属组都是root,当前用户是box-he

可以看到,我们不能通过echo向文件写入,不能通过cat读取文件,也不能执行文件。

我们再看到以下情况:

现在test.txt的拥有者和所属组都是box-he,但是拥有者的权限是---,所属组的权限是rwx,那么box-he能不能对该文件操作呢?

可以看到,box-he不享有该文件的读写权限。可是box-he明明是该文件的所属组,虽然拥有者的权限是---,但是所属组的权限是rwx,为啥box-he用户无法享有该权限呢?


一个用户的权限只从左向右匹配一次,当一个用户被匹配为了拥有者,那么他就只享有拥有者的权利,而不享有所属组的权利

因此,box-he虽然是所属组,但是由于先匹配到了拥有者,最后就只有拥有者的权限了。


目录的权限

对于目录而言,其权限和普通文件还是有所区别的。

从上图中可见,不论是目录还是文件,都是用rwx来表示权限值的。但是目录的rwx的含义略有不同:

  • r:决定用户能否查看目录内容
  • w:决定用户能否在目录中创建,修改,删除文件
  • x:决定用户能不能进入目录

现在我们有以下目录文件testdir

testsdir的拥有者为root,所属组为box-he,但是box-he所在的所属组的权限为---。接下来我们尝试以box-he的身份来执行进入目录,查看目录的操作:

可以看到,两者都被拒绝了,接下来我们打开r权限与x权限:

现在我们就可以正常的进入以及查看目录了,但是我们现在还不能在目录里面删除与创建文件,这涉及到目录的w权限:

现在我们把testdir的权限改为rwxrwx---,这样box-he就可以在内部增删文件了:

我们再看看tetsdir内部都有啥文件:

testdir内部,有三个文件,这三个文件的拥有者都是root,权限都是rw-------,也就是说当前box-he对这些文件没有任何权限。但是别忘了,只要一个用户有目录的w权限,那么就可以删除目录里面的文件,我们看看box-he能不能把这三个文件删掉:

我们居然可以把一个完全没有任何权限的文件给删掉,甚至这个文件属于root

删除一个文件,与用户也没有这个文件的权限无关,只和这个用户有没有该目录的w权限有关


权限的修改

讲了这么久文件的权限,那么我们要如何修改一个文件的权限呢?

chmod指令

chmod指令用于修改文件的权限值。

语法:

chmod [选项] 权限 文件名

注意:只有文件的拥有者和root可以修改文件的权限

对于chmod指令,其通过+-=来进行修改,通过用户符号来表示对哪一个用户操作:

  • u:拥有者user
  • g:所属组group
  • o:其他用户other
  • a:所有用户all

比如以下语法:

chmod u+r test.txt

test.txtuser增加r权限

chmod o-w test.txt

test.txtother删除w权限

chmod g+rx test.txt

test.txtgroup增加rx权限

chmod a=rwx test.txt

test.txt的所有用户的权限变成rwx


另外的,文件的权限值还支持八进制格式,比如rwxr-x---,可以把每一个权限值视为一个比特位,该位权限有就是1,没有就是0。因此该权限值二进制可以写为111101000,再转化为八进制就是750。

chmod指令还支持八进制形式的修改

语法:

chmod [选项] 八进制值 文件名

比如有以下文件:

那么我们chmod 777 test1.txt,就是把test1.txt的权限值设置为777,二进制对应111111111,也就是rwxrwxrwx。看看效果:

对应的文件就是rwxrwxrwx了。


umask指令

讲解umask指令之前,我们看到一个问题,文件和目录的默认权限值是什么?

我创建一个文件和目录来试验一下:

可以看到,这里目录的默认权限值为rwxrwxr-x,而普通文件的默认权限值是rw-rw-r--

但是你的Linux的默认权限有可能与我不同,这是因为权限的默认设置是会受到权限掩码的影响的,每个人的权限掩码有可能不同。

首先,文件与目录是有起始权限的:

普通文件的起始权限是0666,也就是rw-rw-rw-

目录文件的起始权限是0777,也就是rwxrwxrwx

我们可以直接输入指令umask查看当前权限掩码:

我这台主机当前的权限掩码为0002,去掉第一位,后三位的二进制就是000 000 010。那么权限掩码是如何生效的呢?

算法如下:

最终权限 = 起始权限 & ( ˜umask)

也就是先对权限掩码umask取反,然后再让起始权限与其按位与操作。


比如目录的起始权限为111111111,我的umask为0002,也就是000000010。~umask等于111111101,与起始权限111111111进行按位与得到111111101。因此我最后创建一个目录的默认权限为rwxrwxr-x。


这个权限掩码也可以直接修改,chmod xxx就可以把权限掩码修改为xxx。

这个权限掩码也可以直接修改,chmod xxx就可以把权限掩码修改为xxx


粘滞位

现在来想一个问题,如果我们想要创建一个目录,让多个人在内部进行合作交流。互相可以翻阅文件,也可以在目录内部自由创建文件,应该怎么做?

先创建一个目录:

这个目录tmp就是后续大家相互交流的文件,现在我们希望所有的other都可以在内部创建文件,互相浏览文件,进行交流,那么我们就要开放该目录的w权限:

但是开放了w权限有一个问题,那就是大家不仅可以在目录内部自由创建文件,还可以自由删除文件!!

这就会导致,一个用户可以删除别人的文件,但是我们只希望互相之间可以查阅文件,以及自由创建文件。以我们目前学习的权限知识,没有办法处理这个问题。

Linux为此特别制定了一个粘滞位权限t,其用于替代x权限,t权限的规则如下:

  • 一个文件只能被root目录所有者文件所有者删除

我们可以直接通过chmod增加该权限:

那么对于这个tmp目录内部的文件,就只有root可以删除,文件所有者可以删除,目录所有者可以删除了。这样各个other之间,就不能互删文件了,但是由于目录的w权限开放,大家依然可以自由创建文件。

相关文章
|
2月前
|
Linux Shell
Linux系统文件默认权限
Linux系统文件默认权限
|
25天前
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
38 1
linux特殊权限!!
|
2月前
|
运维 监控 安全
Linux_权限理解(详细PLUS)
【10月更文挑战第3天】本文介绍了Linux系统中的权限管理基础,包括文件系统对象与权限关联、权限的继承性、字符与数字表示法的解读,以及用户、组与权限的动态交互。详细解析了`chmod`命令的高级用法和权限修改的风险,探讨了SUID、SGID和Sticky Bit等特殊权限的作用机制,并提出了基于角色的权限分配和定期权限审计的最佳实践。
69 11
|
2月前
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky
|
2月前
|
Linux 数据安全/隐私保护 Windows
Linux_权限理解(详细PLUS
Linux_权限理解(详细PLUS
|
2月前
|
网络协议 Linux 网络安全
【Linux】用户和权限及实用操作------迅速了解用户和权限及其实用操作
【Linux】用户和权限及实用操作------迅速了解用户和权限及其实用操作
|
2月前
|
Linux Go 数据安全/隐私保护
Linux入门2——初识Linux权限
Linux入门2——初识Linux权限
28 0
|
4月前
|
存储 安全 Linux
Linux权限之谜:一步步教你如何解锁sudo权限并窥视/etc/shadow的神秘面纱!
【8月更文挑战第22天】在Linux中,`sudo`命令让授权用户能以其他用户(通常是root)身份运行命令。关键的安全文件`/etc/shadow`存储用户密码哈希,仅root可读。要使用`sudo`,需确保账户被列入`sudoers`文件中。系统管理员可通过`visudo`编辑此文件来赋予用户权限,例如添加`username ALL=(ALL) NOPASSWD: ALL`行。获得`sudo`权限后,可运行`sudo cat /etc/shadow`查看文件内容,但需谨慎操作以免影响系统安全。遵循最小权限原则,确保安全使用这些强大工具。
105 2
|
4月前
|
Linux 数据安全/隐私保护
在Linux中,什么是文件权限?什么是rwx权限模型?
在Linux中,什么是文件权限?什么是rwx权限模型?
|
4月前
|
Unix Linux Shell
Linux 权限简介
Linux 权限简介
47 1