【Linux】文件归属与迁移:chown修改拥有者、chgrp调整所属组,解决团队协作中的权限交接问题

🔥个人主页:爱和冰阔乐
📚专栏传送门:《数据结构与算法》 、【C++】 、【Linux】
🐶学习方向:C++方向学习爱好者
⭐人生格言:得知坦然 ,失之淡然

🏠博主简介

文章目录
- 前言
- 一、shell命令以及运行原理
- 二、Linux的用户
- 三、权限的概念
- 3.1 角色分类及其作用
- 3.2 属性
- 四、文件访问权限的相关设置方法
- 4.1 chmod 指令修改属性
- 4.2 八进制修改属性
- 4.3 chown /chgrp 指令之修改角色
- 五、目录权限的管理
- 5.1 进入目录需要的权限
- 5.2 r与w权限对目录的影响
- 5.3 多用户互相隔离
- 5.4 缺省权限
- 5.5 粘滞位——t
- 总结
前言
本文我们来聊聊 Linux 系统中的权限问题,让我们明白 Linux 中的权限是什么,为什么要有权限,以及怎么操作我们的权限,我们一起来看看吧!!
一、shell命令以及运行原理
Linux严格意义上说的是⼀个操作系统,我们称之为“核心(kernel)“,但我们⼀般用户,不能直接使⽤kernel。⽽是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使⽤kernel?
从技术⻆度,Shell的最简单定义:命令⾏解释器(command Interpreter)主要包含:
将使⽤者的命令翻译给核心(kernel)处理同时,将核⼼的处理结果翻译给使⽤者
对⽐windows GUI,我们操作windows 不是直接操作windows内核,⽽是通过图形接⼝,点击,从⽽完成我们的操作(⽐如进⼊D盘的操作,我们通常是双击D盘盘符.或者运⾏起来⼀个应⽤程序)(图形窗口是外壳)
shell 对于Linux,有相同的作⽤,主要是对我们的指令进⾏解析,解析指令给Linux内核。反馈结果在通过内核运⾏出结果,通过shell解析给用户(命令行是外壳)
举例:
帮助理解:如果说你是⼀个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你⼼动的MM⼩花。你看上了⼩花,但是有不好意思直接表⽩,那就让你你家⼈找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给⼩花,⽽我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使⽤的bash(bash是属于shell的一种)
注意:在本故事中,小花就是操作系统,你就是用户,因为用户不擅长和操作系统内核打交道,那么王婆就是外壳shell,因此如果用户输入错误指令是通过shell进行返回给用户的
总结:
使用外壳程序的原因便是:
1.方便用户操作
2.同时为防止用户输入非法指令,外壳程序会拦住指令不传给内核,变向的保护了内核
二、Linux的用户
Linux下有两种用户:超级用户(root)、普通用户
- 超级用户:可以再linux系统下做任何事情,
不受限制 - 普通用户: 在linux下做有限的事情
- 超级用户的命令提⽰符是“
#”,普通用户命令提⽰符是“$”。
命令: su [用户名] / su -
功能: 切换用户
例如,要从root用户切换到普通用户user,则使⽤ su user。
要从普通用户user切换到root⽤⼾则使⽤ su root(root可以省略),此时系统会提⽰输⼊root用户的⼝令。
注意:su命令不会让用户重新登录,只是身份的切换,即不影响当前所处的目录下,su -则是以root/user身份重新登录,即用户所处的当前路径发生变化
热键: ctrl +d
功能: 退出当前用户,回到原用户,等同于输入exit

命令:sudo
作用:用来进行指定的短暂提权的
作用:安装软件,安装到系统时,需要管理员root权限——安装的所有程序其实只安装了一份,允许大家同时使用
在sudo提权时输入的是普通用户的密码,那么代表人人都是root?
举例:

那肯定不是!我们需要在root权限中,进行 vim /etc/sudoers将普通用户添加到sudoers中,输入自己的密码是为了验证 当前操作是否为该用户本人发起,这里不做仔细介绍,在后续vim使用的文章会有详细介绍
三、权限的概念
权限的本质是:能或者不能做什么事情
权限的作用:
1.控制用户的行为,防止错误的发生,如法律
2.权限首先限制的是角色(人)
3.权限要求目标必须具备对应的属性(如:在牛客上看不了电影,其没有视频播放的属性)
总结·:权限= 角色 + 目标权限属性
Linux下一切问题,面对的都是文件,而文件涉及到的权限属性便是:读,写,执行
3.1 角色分类及其作用
角色分为两类:
1.拥有者(创建的 和 属于者)
2 所属组(⽂件和⽂件⽬录的所有者所在的组的⽤⼾)
3 other(在Linux中不被记录)

注意:用户账号(root,普通用户)与角色并不冲突,把用户账号理解为张三(具体的人),其扮演的角色是校长,两者并不冲突,是互相补充的
所属组:更精细化的权限管理,首先要有更精细化的身份角色
帮助理解:程序员A和B在同一家公司的不同组中,各自开发相同的程序,若A开发成功则公司奖励A,如果在开发过程,属于A组的组长想看A写的代码,而Linux的角色中只有拥有者和other概念,那么只能把权限公开给other,而组长和B均属于other范围,那么便会导致内容泄密,因此就需要所属组只开放权限给其组内成员
3.2 属性
对于任意一个文件必定包括:读,写,执行,这三个属性,在Linux中的读是 r ,写是 w ,x 是可执行

权限位:由于每个权限位均有三个字符,在world.txt文件中,如果允许读 / 写 /执行便出现对应的 r / w / x,不允许便是 -,注意第一个只能是读,第二个是写,不能颠倒顺序
到这,我们便学完了权限的角色和属性,我们便可以小试牛刀来描述下world.txt的权限信息是什么了
该文件的拥有者是root,该文件的拥有者具备读和写文件但不能执行,该文件的所属组是root,其可以对当前文件进行读,不能写和执行,other只能进行读
四、文件访问权限的相关设置方法
4.1 chmod 指令修改属性
功能: 设置⽂件的访问权限
格式: chmod [参数] 权限 ⽂件名
常用选项:
- R -> 递归修改⽬录⽂件的权限
- 说明:只有⽂件的拥有者和root才可以改变⽂件的权限
chmod命令权限值的格式:
- 用户表⽰符+ /- = 权限字符
- +: 向权限范围增加权限代号所表⽰的权限
- -: 向权限范围取消权限代号所表⽰的权限
- =: 向权限范围赋予权限代号所表⽰的权限
- 用户符号:
- u:拥有者
- g:拥有者同组⽤
- o:其它用户
- a:所有用户
实例:
▪ chmod u+w /home/abc.txt
▪ chmod o-x /home/abc.txt
▪ chmod a=x /home/abc.txt• 三位8进制数字 ◦
实例:
▪ chmod 664 /home/abc.txt
▪ chmod 640 /home/abc.txt
修改权限无非是修改属性和角色,那么我们先进行修改其属性
touch my.txt
#删除拥有者的读
chmod u-r my.txt
#添加拥有者读,写,可执行权限
chmod u+rwx my.txt
#删除所属组的读写权限
chmod g-rw my.txt
#给other加上写的权限
chmod o+w my.txt
#进行多个角色的权限修改
chmod u-rw,g+rw,o+r my.txt
#给所有角色添加读的权限使用a
chmod a+r my.txt


1.用户只能更改自己的文件权限,如果是root账号便可以改旗下的普通用户权限

2.如果没有权限,系统会拒绝让我们访问
举例:
去掉文件的读的权限,但是拥有写的权限
touch ll.txt
#删除其读的权限
chmod u-r ll.txt
cat ll.txt
echo "hello Linux" >ll.txt
echo "hello Linux" >> ll.txt
# 删除其写入权限
chmod u-w ll.txt
echo "hello Linux" >>ll.txt

可以写

最后再去掉其的写入权限

3.确定权限的信息的时候,系统会先确定用户是谁?拥有者,所属组还是other?
在Centos下,用户角色确定只确定一次,通过判文件的拥有者/所属组和用户是谁进行匹配,顺序是:依次查拥有者,所属组,other(如果先确定你是拥有者,那么只查看拥有者的权限,只确定一次,)
pwd whoami
4.rootd用户的权限不受权限的约束
5.理解可执行程序的深层含义
举例:
1.自身不可被执行,但拥有可执行权限
touch hello.txt
ll
echo "你好" >>hello.txt
chmod u+x hello.txt
./hello.txt

2.自身可以被执行,但没有可执行权限
touch cmd.c
nano cmd.c
#include<stdio.h>
int main()
{printf("hello");return 0;
}
gcc cmd.c -o cmd
chmod u-x cmd.c
./cmd.c

总结:中国有句古话说得好:给你机会你不中用,从中我们便可以看出,想要实现某个事情,需要机会+能力,放在权限里便是,给了该文件的可执行权限,只是表示该文件将来可以被执行,但不代表该文件本身是个可执行文件,因此可执行代表是拥有可执行权限并且本身可以被执行
注意:
1.可执行权限不等于文件可以执行(取决于是不是二进制的可执行文件)
2. 给空文件可执行权限,但其自身是不可被执行的,需要注意的是在centos环境下没有报错的原因是:Bash 把它当作空脚本解析时,因无错误而成功退出,所以没有报错
4.2 八进制修改属性
下面我们通过把拥有者,所属组,其他各自对应的3个字符换算成十进制,看做为八进制(因为其最大的111进行换算是7)进行修改属性,因此以后想要修改属性除了上述的u/g/o方法外,还可以使用八进制
举例:
#拥有者,所属组,其他的读写,可执行权限均被限制
chmod ooo cmd
#所有角色的读权限加上了
chmod 444 cmd


4.3 chown /chgrp 指令之修改角色
chown:
功能:修改⽂件的拥有者
格式:chown [参数] 用户名 ⽂件名
chgrp:
功能: 修改⽂件或⽬录的所属组
格式:chgrp [参数] 用户组名⽂件名
常⽤选项:-R 递归修改⽂件或⽬录的所属组
举例:
将自己的文件交给别人
chown root cmd

系统默认不允许我们把文件给别人,是合理的
如果想要给别人则必须提高权限,如root
chown hxx1 hello.txt
sudo chown hxx1 hello.txt
``
可以不用chgrp,只用chown进行修改拥有者和所属组
#一次性修改拥有者和所属组:拥有者:所属组
sudo chown root:root cmd
#只修改所属组还是使用chgrp
sudo chgrp root cmd
五、目录权限的管理
5.1 进入目录需要的权限
如果我们想要进入一个目录需要什么权限?
先将文件和用户进行匹配,发现角色为拥有者
whoami

1.先删除拥有者的读权限,其并没有影响进入目录的权限
chmod u-r lesson
cd lesson

2.删除写的权限,不影响进入目录
chmod u-w lesson
cd lesson

3.删除可执行的权限,影响进入目录
chmod u-x lesson
cd lesson

5.2 r与w权限对目录的影响
那么读和写对于目录有什么意义?
删除读的权限,则无法查看该目录的内容
chmod u-r lesson
cd lesson
ll
#但是可以创建
touch 1.txt


如果对目录没有w,无法在指定目录内部新建文件
chmod u-w lesson
cd lesson
touch 2.txt

默认情况下,我们新建的目录,一般情况下要求rwx权限都要有
5.3 多用户互相隔离
Linux下建立许多个互相不影响的用户,为什么?
在LInux系统中每建立的普通账号是放在/home目录下新建一个特定用户名命名的文件夹:/home/hxx1
hxx1文件夹的拥有者与所属者均为我自己hxx1,只对我自己开放所有权限,对于所属组和other权限是关闭的,那么意味着任何用户无法进入其他用户的家目录,因此用户便可以在权限上实现隔离

注意:只有root可以修改
5.4 缺省权限
为什么默认(缺省)权限是我们看到的样子?

对于普通文件来讲:起始权限是从666开始的,默认不带可执行权限
对于目录文件来讲:起始权限是从777开始的,默认携带x
但是在我们自己创建的目录和文件,却和我上述的示例不同,这是因为系统默认会存在一个叫权限掩码的概念
umask

权限掩码的第一个0不用考虑(与用户有关),002为八进制,对应的二进制便是(000,000,010)
公式:最终权限=起始权限&(~umask)
我们以目录的777为例,其对应的二进制便是 111 111 111,umask为 000 000 010,再对其取反为:111 111 101,再对两者按位与为:111 111 101,对应的八进制为775,因此我们创建的hxx目录为775
umask的目的是什么?
希望凡是在umask中出现的权限,都不应该在最终权限中出现
为什么要有umask?
1.解决 “默认权限不可控” 问题:默认情况下,系统会按固定规则(如文件 666、目录 777)分配权限,无法提前调整;而umask 允许用户 / 系统在创建文件前预设 “权限掩码”,通过 “最大默认权限 - umask” 自动计算最终权限
2.特殊情况下,通过配置umask就可以控制文件的默认权限,让我们的代码是可控的
那么我们怎么修改umask?
umask 0777
mkdir ll

5.5 粘滞位——t
一个文件是否能被删除,与文件本身无关,与文件所处的目录权限有关(与文件所处的目录的w权限有关),即毁灭你与你何干
问题:那么如果两个用户之间要进行文件级别的协作,因此协作的文件不能放在任何一个私人账号里,可以放在tmp路径下,文件/目录是共享的,放在根目录/temp下,其权限放开了other的w权限,因此是可以删除文件的,但是我们并不想非文件的拥有者删除对应的文件

需求:任何一个人都能在共享目录下新建文件,但是不能让非文件拥有者删除,因此Linux中创建了一个新的权限标志位:t(粘滞位),
chmod +t temp_backup
rm whb.txt




由于temp已经添加了粘滞位,我们想要创建共享的文件时,只需在这里面创建即可
总结:
特征:只能给需要共享的目录添加粘滞位
当⼀个⽬录被设置为"粘滞位"(⽤chmod +t),则该⽬录下的文件只能由
- 超级管理员删除
- 该⽬录的所有者删除
- 该⽂件的所有者删除
总结
以上便是Linux的权限的介绍,学完本文,一定要注意我们文件和目录的权限设置及其保护,可千万别破坏了自己的重要文件哦!!!
坚持到这里,已经很棒啦,希望读完本文可以帮读者大大更好了解Linux的内容!!!如果喜欢本文的可以给博主点点免费的攒攒,你们的支持就是我前进的动力🎆
资源分享:Linux26个重要指令的介绍
