Linux:权限相关知识详解
常用的基本指令已经讲解完毕啦:探索Linux世界:基本指令(文件查看、时间相关、grep、打包压缩及相关知识)
今天接着进行权限相关知识的详解
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义——命令行解释器(command Interpreter)主要包含:
为什么不直接使用kernel?
即考虑到易用性和安全性
Shell程序本身也是一个可执行程序,通常存储在系统的特定路径下(如/bin/bash
、/bin/sh
等)。不同的Shell程序有不同的特性和功能,常见的Shell包括:
注意:
Shell命令是用户在命令行界面输入的指令,用于与操作系统进行交互。Shell命令的运行原理可以简单概括为以下几个步骤:
ls
(列出当前目录下的文件和文件夹)。ls -l
,Shell会识别ls
为命令名称,-l
为选项。ls
程序来列出文件和文件夹。总的来说,Shell命令的运行原理:用户输入命令 -> Shell解析命令 -> 执行命令 -> 输出结果
对于Linux
,我们目前还是对Windows
更熟悉。shell对于Linux就相当于图形化界面对于Windows
windows GUI:我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。 shell 对于Linux:有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户
在Linux系统中,有两种主要的用户身份:超级用户(root)和普通用户。这两者之间有着不同的权限和访问级别。
#
。$
。su
- 切换用户su
- 切换用户
用法:su 用户名
Ctrl + d
**:回到上一个用户登录**su -
:以root身份重新登录(路径会变成默认路径的)su
**:用户切换**su XXX
**:切换到XXX用户**(路径不变,还是当前路径)
su john
上述命令将当前用户切换到
john
用户,系统会提示输入john
用户的密码。
如果要切换到超级用户(root):
su root
然后输入 root 用户的密码
这里我因为是root转普通用户,就没有输入密码这一步
这里普通用户转root,要输入root的密码
sudo
-以超级用户权限执行命令用法:sudo 要执行的命令
说明:
sudo
允许普通用户以超级用户(通常是 root 用户)的权限来执行特定的命令。sudo
命令时,系统会要求您输入当前用户的密码,以验证您的身份。文件访问者的分类也就是对文件权限进行定义的三个主要类别,通常被称为"用户(User)"、"组(Group)“和"其他(Others)”。这是在 Linux 和类 Unix 操作系统中用于管理文件和目录权限的基本概念。
读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
—
**表示不具有该项权限**
Linux Permissions | Explanation | Linux Permissions | Explanation |
---|---|---|---|
r– | 只读 | -w- | 仅可写 |
–x | 仅可执行 | rw- | 可读可写 |
-wx | 可写和可执行 | r-x | 可读可执行 |
rwx | 可读可写可执行 | — | 无权限 |
权限符号 | 八进制 | 二进制 |
---|---|---|
r | 4 | 100 |
w | 2 | 010 |
x | 1 | 001 |
rw | 6 | 110 |
rx | 5 | 101 |
wx | 3 | 011 |
rwx | 7 | 111 |
— | 0 | 000 |
chmod
- 更改文件或目录的权限**功能:**设置文件的访问权限(只有文件的拥有者和root才可以改变文件的权限)
**格式:**chmod 参数 权限 文件名
+
**: 向权限范围增加权限代号所表示的权限**
-
**: 向权限范围取消权限代号所表示的权限**
=
**:向权限范围赋予权限代号所表示的权限**
u
**:拥有者**
g
**:拥有者同组用**
o
**:其它用户**
a
**:所有用户**chmod g+x test1.txt
给test1.txt 文件的group加上x权限
chmod 666 test2.txt
chmod 666 test2.txt
**命令将文件**test2.txt
**的权限设置为**-rw-rw-rw-
**,即所有者、组和其他用户都有读写权限。**
chown
- 更改文件或目录的所有者和格式:chown 选项:组 文件或目录
chown zc -R ../a
chown zc -R ../a
**命令将目录**../a
**及其所有子目录和文件的所有者设置为**zc
**。**
chgrp
- 更改文件或目录的所属组**用法:**chgrp 选项 组 文件或目录
-R,–recursive:递归地更改目录及其子目录下的所有文件和目录的所属组。
x
):**决定是否可以进入目录。如果目录没有可执行权限,则无法使用 cd
命令进入该目录。r
):**决定是否可以查看目录下文件属性信息。如果目录没有可读权限,则无法使用 ls
等命令查看目录中的文件内容。w
):**决定是否可以在目录下进行新建和删除文件。如果目录没有可写权限,则无法在目录中创建文件,也无法删除目录中的文件。首先:我们需要知道在Linux中目录和文件的初始权限分别为777和666
但是:我们新建一个文件发现是664
这里就牵扯到一个指令umask
umask
设置默认文件权限掩码功能:查看或修改文件掩码
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
格式:umask 权限值
在 Linux 系统中,一个文件能否被删除不取决于文件本身的权限,取决于该用户对其所在的目录是否拥有w权限。如果一个用户想要删除一个文件,他需要具有该文件所在目录的写权限,即使他是文件的拥有者。
通常情况下,用户在自己的家目录下创建的目录默认权限是不允许其他用户访问的。但如果需要在特定目录下实现文件的共享,可以创建一个共享目录,在其中放置共享资源。例如,在家目录下创建一个名为 tmp
的共享目录:
mkdir ~/tmp
然后可以将需要共享的文件放置在 tmp
目录下,其他用户即可在该目录中访问这些文件
然而,这也会带来一个问题,即任何人都可以对共享目录中的文件进行删除、修改等操作,这可能会导致潜在的安全风险。
为了解决这个问题,Linux 引入了黏滞位(Sticky Bit),用于限制对目录的删除权限。当黏滞位被设置在一个目录上时,只有目录的所有者、文件的所有者和超级用户才能删除其中的文件。其他用户虽然可能有写权限,但不能删除不属于自己的文件。
要在目录中设置黏滞位,可以使用 chmod
命令,例如:
chmod +t ~/tmp
这样设置了黏滞位之后,即使其他用户对共享目录有写权限,也不能删除其他用户的文件,保护了共享资源的安全性。
好啦!到这里关于权限的问题基本上讲述完毕啦!!感谢大家支持!!!