当前位置: 首页 > news >正文

【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.txtroot@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.txthyc@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.txthyc@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.txthyc@hcss-ecs-4ce7:~$ chown root new.txt
chown: changing ownership of 'new.txt': Operation not permittedhyc@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 newhyc@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
newhyc@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里进行。

相关文章:

  • 小程序32-简易双向数据绑定
  • 3DMAX+Photoshop教程:将树木和人物添加到户外建筑场景中的方法
  • Electron-vite【实战】MD 编辑器 -- 文件列表(含右键快捷菜单,重命名文件,删除本地文件,打开本地目录等)
  • 深入详解DICOMweb:WADO与STOW-RS的技术解析与实现
  • React-props
  • Go语言使用阿里云模版短信服务
  • AAAI 2025论文分享│STD-PLM:基于预训练语言模型的时空数据预测与补全方法
  • LVS-DR 负载均衡集群
  • 计算机网络第一章课后练习
  • Spring Boot 3 整合 MQ 构建聊天消息存储系统
  • 板凳-------Mysql cookbook学习 (九)
  • 正则化-深度学习
  • ReactHook有哪些
  • 云原生应用架构设计原则与落地实践:从理念到方法论
  • 漫画Android:事件分发的过程是怎样的?
  • 浏览器的渲染原理
  • 多功能文档处理工具推荐
  • 常见跨域问题解决
  • Go语言接口:灵活多态的核心机制
  • 指数函数的泰勒展开可视化:从数学理论到Python实现
  • 淄博网站制作哪家好/个人网页怎么制作
  • 山东网站seo公司/网站百度百科
  • 设计师效果图网站/深圳专业seo
  • 设计网红打卡/seo系统培训哪家好
  • 做网站都需要哪些费用/域名比价网
  • 网站建设栏目图片/网站推广如何收费