【Linux】权限相关指令

前言:

上两篇文章我们讲到了,关于Linux中的基础指令。

【Linux】初见,基础指令-CSDN博客【Linux】初见,基础指令-CSDN博客

本文我们来讲Linux中关于权限中的一些指令

shell命令

Linux严格来说是一个操作系统,我们称之为"核心"(kernel)。而作为用户的我们并不能直接与核心交流,这时候就有一个中间人的角色出现:将我们的指令翻译为核心可以看懂的符号,交由核心执行,并将执行结果翻译并返回给我们。

这个中间人就是"包裹"在核心外的"外壳程序",介于我们和核心之前。我们称之为:shell命令

从技术层面来讲,shell的最简单定义就是:命令解释器。其主要功能就是:

1.将命令翻译后交给核心执行

2.将核心执行的结果翻译并返回给我们

形象理解shell

假如小y过年回家打算相亲了,打算小y并不擅长与异性交流,这时候就拜托了媒人王姨作为中间人,帮忙小y和异性之前传话。这时候王姨就是"外壳程序"shell。

为什么要有shell?

1.方便用户使用

2.作为外壳程序,保护核心

补充

权限概念

Linux中权限分为两种:root账号、普通账号

root账号:为超级权限账号,不受任何权限限制

普通账号:受到权限限制,在Linux中只能做有限的事

su

命令:su 用户名

功能:切换账号

复制代码
hyc@hcss-ecs-4ce7:/$ whoami
hyc

#切换root账号执行su即可
hyc@hcss-ecs-4ce7:/$ su
#输入root账号密码
Password: 
root@hcss-ecs-4ce7:/# whoami
root

#切换普通账号:su 用户名(不需要密码)
root@hcss-ecs-4ce7:/# su hyc
hyc@hcss-ecs-4ce7:/$ whoami
hyc

补充:普通用户 -> root账号,除了su可以实现,su -也可以实现。但是区别是?

复制代码
hyc@hcss-ecs-4ce7:/$ pwd
/
hyc@hcss-ecs-4ce7:/$ su
Password: 
root@hcss-ecs-4ce7:/# whoami
root
root@hcss-ecs-4ce7:/# pwd
/


hyc@hcss-ecs-4ce7:/$ pwd
/
hyc@hcss-ecs-4ce7:/$ su -
Password: 
root@hcss-ecs-4ce7:~# whoami
root
root@hcss-ecs-4ce7:~# pwd
/root

#我们可以看到su、su-,都成功的切换到了root。
#不同的是su切换账号并不会改变之前所处路径,既su不会改变位置
#而su-会改变位置,之前是/下,切换之后在/root下

sudo:短暂的指令提权

如果我们需要使用root权限来执行一些指令,但是却没有root密码怎么办?

在指令最前面加上sudo ,就可以使用root权限执行命令

复制代码
hyc@hcss-ecs-4ce7:~$ sudo ls
[sudo] password for hyc: 

这样确实方便,但是有一个问题:那岂不是人人都可以使用root权限了?这不乱套了?

Linux设计者当然考虑到了这个问题,普通用户如果想要使用sudo进行指令提权。必须要root账号给予普通账号提权权限才行。所以并不是什么普通账号都可以进行提权

没有提权权限的账户,就会显示以下报错

复制代码
hyc@hcss-ecs-4ce7:~$ sudo ls
[sudo] password for hyc: 
hyc is not in the sudoers file.  This incident will be reported.

总结:

普通 -> root:su(不会改变位置)

su-(会改变位置:默认切换至家目录)

root -> 普通:su 用户名

sodu : 指令提权

权限管理

权限的本质是:能做或者不能做什么事情(控制用户行为,防止错误操作)

理解:

1.权限限制的是人

2.权限要求目标必须具备对应属性:权限:角色+目标属性(权限)

属性

对于Linux中的属性来说主要为三个:读、写、执行

读:r

写:w

执行:x

之前我们说过第一个字母代表文件属性,而后面的一串字符则代表该文件的权限。

r:对文件来说,代表可以读取文件内容;对目录来说,代表可以浏览目录内容

w:对文件来说,代表可以修改文件内容;对目录来说,代表可以删除目录中的内容

x:对文件来说,代表可以执行该文件;对目录来说,代表可以进入该目录

但是为什么这里有多个wrx呢?这就涉及到角色的问题。

角色

上面我们说了权限=角色+对应属性。

属性代表相应的角色拥有什么权限,那么我们是如何分辨角色呢?如何知道角色对应所拥有的权限呢?

首先我们可以通过命令行得知我们当前的角色、或者使用whoami指令

然后根据当前用户,来判断其说拥有的权限

解释:

我们当前用户是root,对于第一个目录来说,我们就是其拥有者。所对应拥有的权限则是rwx

而什么是所属组?什么是other呢?

所属组就是当前角色不是拥有者,但是与拥有者在同一个队伍中。这时候就会匹配所属组权限,这时候这个角色就是所属者。

所属组的存在是为了更精细化的权限管理。举例:a组和b组都在同一台Linux机器上开发项目,a组项目代码需要公开出来让a组全体成员都能看见,但是不希望b组看见。这时候就只需要将a组全体成员纳入所属组中,然后将other权限关闭,就可以实现。(现在很少用到了,了解即可)

other就是既不属于拥有者,也不属于所属者的角色。这时候就会匹配other权限。

如何描述文件权限信息?

复制代码
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt

对于new.txt这个文件来说权限的描述应该为:拥有者权限为rw,所属组权限为r,other权限为r。

文件权限表示方法

1.字符表示法

3个字母为一组,分别为:r、w、x,如没有对应权限则用 " - "表示。其顺序是固定的不可交换

2.8进制表示法

chmod指令

语法:chmod 参数 权限 文件名

功能:改变文件权限(只有root或者文件拥有者才有资格修改权限)

选项:

-R:递归的将目录下的文件权限全部修改

参数:

u:拥有者

g:所属组

o:other

a:有所用户

实际操作展示 :

复制代码
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root  4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt

#关闭u的w权限
root@hcss-ecs-4ce7:~# chmod u-w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root  4096 May 20 13:58 new
-r--r--r-- 1 root root 22902 May 18 11:51 new.txt

#开放u的w权限
root@hcss-ecs-4ce7:~# chmod u+w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root  4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt


#关闭u的多条权限
root@hcss-ecs-4ce7:~# chmod u-rw new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root  4096 May 20 13:58 new
----r--r-- 1 root root 22902 May 18 11:51 new.txt

#开放u的多条权限
root@hcss-ecs-4ce7:~# chmod u+rw new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root  4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt

#开放g的w权限
root@hcss-ecs-4ce7:~# chmod g+w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root  4096 May 20 13:58 new
-rw-rw-r-- 1 root root 22902 May 18 11:51 new.txt

#关闭g的w权限
root@hcss-ecs-4ce7:~# chmod g-w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root  4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt

#以此类推,其他的权限操作类似

另外也可以通过八进制来实现多个用户权限的修改:

复制代码
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root  4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt

#通过3个8进制数字实现,对多个用户权限修改
root@hcss-ecs-4ce7:~# chmod 000 new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root  4096 May 20 13:58 new
---------- 1 root root 22902 May 18 11:51 new.txt


root@hcss-ecs-4ce7:~# chmod 663 new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root  4096 May 20 13:58 new
-rw-rw--wx 1 root root 22902 May 18 11:51 new.txt

修改权限注意事项

1.任何人都可以修改文件权限吗?

只有root和文件拥有者才能修改权限!

2.如果在进行相应操作时没有权限会怎么样?

系统会拒绝我们的指令请求

复制代码
hyc@hcss-ecs-4ce7:~$ ls -l
total 0
-rw-rw-r-- 1 hyc hyc 0 May 24 23:07 new.txt

hyc@hcss-ecs-4ce7:~$ chmod u-r new.txt
hyc@hcss-ecs-4ce7:~$ ls -l
total 0
--w-rw-r-- 1 hyc hyc 0 May 24 23:07 new.txt

hyc@hcss-ecs-4ce7:~$ cat new.txt
cat: new.txt: Permission denied

3.确定权限信息时,系统会先确认谁?

先确认拥有者权限,再确认所属组,最后是other。权限只会确定一次,不会多次确定,第一次匹配上的权限既为我们当前角色所拥有的权限。

4.root账号权限?

拥有最高权限,不受一切权限的限制。所有设定的限制只针对普通账号有用。

5.可执行权限?

我们之前所讲的例子中都没有可执行样例,其实可执行程序是.exe文件。普通文件一般没有x权限,当然即使拥有x权限也无法执行,因为其本身就不是可执行文件。

chown与chgrp指令

语法:chown 用户名 文件名

功能:改变文件或目录的拥有者

选项:-R 递归的修改目录中所有文件的拥有者

语法:chgrp 所属组名 文件名

功能:修改文件或目录的所属组

选项:-R递归修改目录中所有文件的所属组

使用chown修改拥有者、chgrp修改所属组出现问题?

复制代码
hyc@hcss-ecs-4ce7:~$ ls -l
total 0
-rw-rw-rw- 1 hyc hyc 0 May 24 23:07 new.txt

hyc@hcss-ecs-4ce7:~$ chown root new.txt
chown: changing ownership of 'new.txt': Operation not permitted

hyc@hcss-ecs-4ce7:~$ chgrp root new.txt
chgrp: changing group of 'new.txt': Operation not permitted

原因:

系统并不支持随意的将文件的拥有者或所属组修改,这一操作只有root权限才能被允许。所以在要在这句指令前加上sodu,或者切换为root账号。

下面我切换为root账号作为演示:

复制代码
root@hcss-ecs-4ce7:~# ls -l
total 24
-rw-rw--wx 1 root root 22902 May 18 11:51 new.txt
root@hcss-ecs-4ce7:~# chown hyc new.txt
root@hcss-ecs-4ce7:~# ls -l
total 24
-rw-rw--wx 1 hyc root 22902 May 18 11:51 new.txt
root@hcss-ecs-4ce7:~# chgrp hyc new.txt
root@hcss-ecs-4ce7:~# ls -l
total 24
-rw-rw--wx 1 hyc hyc 22902 May 18 11:51 new.txt

目录权限问题

1.rwx对于目录来说意味这什么?

没有r权限,无法查看其内容

复制代码
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
drwxrwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ chmod u-r new
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
d-wxrwxr-x 2 hyc hyc 4096 May 26 15:41 new

hyc@hcss-ecs-4ce7:~$ ls new
ls: cannot open directory 'new': Permission denied

没有w权限,无法在其内部创建文件

复制代码
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
drwxrwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ chmod u-w new
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
dr-xrwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ ls
new

hyc@hcss-ecs-4ce7:~$ touch ./new/my.txt
touch: cannot touch './new/my.txt': Permission denied

没有x权限,无法进入目录

复制代码
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
drw-rwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ cd new
bash: cd: new: Permission denied

rwx这三个权限都与目录的正常使用相关,所以我们创建的目录默认权限这三个都有

2.理解Linux中多用户是如何相互"隔离"的?

复制代码
root@hcss-ecs-4ce7:~# ls -l /home
total 8
drwxr-x--- 3 hyc hyc 4096 May 26 15:41 hyc
drwxr-x--- 2 ye  ye  4096 May 26 16:03 ye

所有用户的other权限都是全部关闭的,任意用户都无法进入。这就带来了"隔离"

3.缺省权限

对于普通文件:默认起始权限是666

对于目录:默认起始权限是777,带x

但我们看到的默认权限一般都不是我们说所的起始权限 ,这是为什么?

复制代码
root@hcss-ecs-4ce7:~# ls -l
total 4
drwxr-xr-x 2 root root 4096 May 26 16:59 new
-rw-r--r-- 1 root root    0 May 26 16:40 new.txt

因为Linux中存在一个东西叫做权限掩码(umask)

root用户的权限掩码为:022

普通用户的权限掩码为:002

复制代码
root@hcss-ecs-4ce7:~# umask
0022
(最前面的0表示八进制)

最终的权限=起始权限&(~umask)

umask的目的是什么?

凡是出现在umask上的权限,都不会出现在最终的权限上面。

umask为什么会出现?

可以让我们自定义默认权限,是一种灵活满足需求的表现

4.文件的删除由谁决定?

一个文件是否可以被删除与文件本身无关,而在于目录的w权限。

粘滞键

如果有两个或者多个用户需要在文件层面上的相互合作,那么所创建的文件就不能在私人目录下。将目录创建根目录下,这样所有用户就都可以访问并写入自己的内容。

但是这里存在一个问题,就是如果在众多用户中存在隔壁公式派来的内鬼(bushi),内鬼可以删除自己的文件也可以删除被人的文件(文件是否可以被删除与自己无关,与文件的w权限有关)!

这该怎么办??关闭w权限吗?不行,这会影响其他用户的正常使用,那怎么办?

Linux给粘滞键有效的解决这一问题

复制代码
chmod +t

给权限加上粘滞位,加上粘滞位的目录有以下效果:

1.文件只能被root删除

2.文件只能被其拥有者删除

3.文件只能有该目录的拥有者删除

其实系统已经为我们准备好了这一特殊目录,就是根目录下的temp目录

我们可以看到temp的other权限最后一个字母是t,这就代表粘滞位。

一般需要文件上的多人合作,都是在temp里进行。

相关推荐
cxr8283 小时前
自动化知识工作AI代理的工程与产品实现
运维·人工智能·自动化
·云扬·3 小时前
从零开始搭 Linux 环境:VMware 下 CentOS 7 的安装与配置全流程(附图解)
linux·运维·centos
ReedFoley3 小时前
【笔记】动手学Ollama 第七章 应用案例1 搭建本地AI Copilot编程助手
人工智能·笔记·copilot
长安即是故里4 小时前
Maxwell学习笔记
笔记·学习
晓梦.5 小时前
IPSec 安全基础
服务器·网络·安全
btyzadt6 小时前
虚拟机蓝屏问题排查与解决
linux·运维·网络
咸甜适中6 小时前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十四)垂直滚动条
笔记·学习·rust·egui
小李独爱秋7 小时前
UNIX发展历史与核心技术解析
服务器·操作系统·unix
努力敲代码的小盆友7 小时前
[自用笔记]上传本地项目至github
笔记·github
佩佩(@ 。 @)7 小时前
网络编程-创建TCP协议服务器
服务器·网络·tcp/ip