本期我们来学习Linux的权限内容
目录
Linux权限
1.认识Linux下用户的分类
2.什么是权限
3.没有权限是什么现象
4.权限的修改问题
chmod
chown
chgrp
umask
粘滞位
file指令
我们在使用xshell登录后,会有下面的东西
我们来介绍一下,以我的登录为例
前面的bai是用户名,@iZ2ze5efragbpzbk87kkvkZ是主机名,~是当前目录,最后的$是命令行提示符,这一行我们统称为bash命令行
我们输入指令的过程,本质就是输入字符串,我们暂时先不管字符串是如何转换为指令的
而指令的本质,就是编译好的程序和脚本,一定在特定的路径下存放
我们所有的指令,最终都要在OS(操作系统)内部运行,但是我们直接使用OS难度太高,比如我们现在的图形化界面这些都不能用了,那难度可太高了,所以我们是不会直接使用OS的
所以我们需要有一个图形化界面或者命令行解释器,上面的bash命令行就是命令行解释器
所以我们和操作系统的关系就是
举个例子,这三者的关系就像是一对相亲的人和媒婆,其中用户是我们,操作系统是我们的相亲对象,我们可能由于各种原因,比如不善于表达感情等等而没有直接去找相亲对象,就需要一个媒婆来帮助我们,这里的媒婆就是命令行解释器
命令行解释器( command Interpreter )主要包含:将使用者的命令翻译给核心( kernel )处理。同时,将核心的处理结果翻译给使用者。
命令行解释器的存在意义是:
1.进行命令行解释
2.保护操作系统,对于用户的非法请求直接拦截
第一个意义我们上面解释了,第二个意义我们继续用例子来解释,假设我们上面的相亲对象叫小红,我们的用户叫做小明,可是小红并不喜欢小明,小红喜欢隔壁家的高富帅小帅,当媒婆去访问小红家里时,正好看到了小帅和小红一家人在一起其乐融融的吃饭,这时媒婆就会回去告诉小明,你还是死心吧,你和小红是不可能的。如果这里媒婆在小帅和小红一家人一起吃饭时再进行说媒,就有点破坏别人家庭了,所以媒婆这里就相当变相的保护了小红的家庭
比如我们这里cd了一个不存在的路径,这里就是有bash进行拦截
我们经常可以听到什么命令行解释器,命令行,bash,sh,shell,那这些是什么呢?我们来简单介绍一下
命令行解释器是一个统称,其实在Linux下就叫做命令行,或者bash,sh,shell
在Windows下就叫做图形化界面
我们上面的例子中,我们把为我们说媒的媒婆叫做王婆,那么bash就是王婆,而shell是媒婆,sh就是李婆,也就是shell是所有命令行的统称,bash和sh是不同种类的解释器
Linux里有各种Linux应用,命令行解释器,Linux内核等等,我们宏观上把这些整体叫做Linux,而当我们后面学习时,我们将Linux内核叫做Linux(只是叫法的区别)
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于 Linux ,有相同的作用,主要是对我们的指令进行解析,解析指令给 Linux 内核。反馈结果在通过内核运行出结果,通过shell 解析给用户。
Linux权限
1.认识Linux下用户的分类
我们在Linux下可以将用户分为两类,一类是root用户,即超级用户,在Windows下也是有的
这个管理员就是超级用户
第二类就是我们的普通用户,我们可以在root账号下通过adduser来添加普通用户
那他们的差别是什么呢?
root基本不受权限的约束,而普通用户会受到权限的约束
Linux的root是比Windows的root权限要大很多的,基本就是真的管理员
下面我们来看这两个用户间是如何切换的
我们先来看普通用户如何切换为root用户
我们直接su即可,然后输入root账号的密码即可切换为root账号(这里建议root密码和自己账号的密码设置为不同的)
另外,这里的切换只是身份的变化,而我们所处的位置是不变的,比如我们之前就处于家目录下,切换为root后仍然在家目录下
如果我们想要退回到普通用户的话
我们只需exit或者ctrl+D即可
如果我们su - 的话,就是重新登录,路径就变为了/root,退回普通用户仍然是exit或者ctrl+D
那如果我们是root,如果切换为普通呢?
我们直接su + 用户名即可,而且是不需要输入密码的(所以说root权限非常大),退回与之前相同
如果我们是普通用户,比如上面有两个,一个是admin,另一个是bai,假设我们是bai,要切换为admin,我们一样可以su + 用户名,不过这里切换是需要有admin的密码的
如果我们是普通用户,想暂时对一条命令提权,比如yum安装时是需要root权限的,普通用户是不可以的,我们就可以
sudo+指令,我们就可以让该指令以root的权限跑了,这里的密码是自己当前的用户,我这里失败的原因是我这个账号现在不在root的白名单里,如果在白名单的话,这里就会显示出root
如何添加到白名单,我们在vim的时候来讲
Linux 下有两种用户:超级用户( root )、普通用户。超级用户:可以再 linux 系统下做任何事情,不受限制普通用户:在 linux 下做有限的事情。超级用户的命令提示符是 “#” ,普通用户的命令提示符是 “$” 。命令 : su [ 用户名 ]功能 :切换用户。例如,要从 root 用户切换到普通用户 user ,则使用 su user 。 要从普通用户 user 切换到 root 用户则使用 suroot ( root 可以省略),此时系统会提示输入 root 用户的口令。
2.什么是权限
什么是权限?比如我们在视频网站上想看一部电影,发现要vip,当我们充值成为vip后,就可以看了,这就是一种权限,权限就是一件事情是否允许被你做
权限认证的是身份,比如学校的校长叫做张三,张三可以进校长办公室是因为他是校长,而不是因为他叫张三
权限也和事物的属性有关,比如我们平时访问各种磁盘,但是我们不可能把磁盘像面包一样咬一口,因为磁盘本身不具备那样的属性
我们ls -l或者ll会显示出很长的一行,我们之前简单介绍过,下面我们重点来看最前面的
这里我们数一下,一共有10个符号,其中第一列的第一个字符叫做文件的类型,如第一行的d,第二行的 -
文件的类型在Windows下是通过文件的后缀来确定的,比如.txt ,.doc等等,而Linux中文件名后缀是没有直接的意义(当然,不代表不用)
文件类型:
d :文件夹- :普通文件l :软链接(类似 Windows 的快捷方式)b :块设备文件(例如硬盘、光驱等)p :管道文件c :字符设备文件(例如屏幕等串口设备)s :套接口文件
其中,普通文件就是文本,各种可执行程序,库等等
块设备文件是磁盘之类的
我们看到,这里就是以b开头的(这是虚拟机的磁盘,所以是vda1)
字符设备就是键盘,显示器文件等等
为什么叫字符设备呢?因为在输入输出时,是按字符一个一个喂给内容或者进程的
下面我们再看看管道文件
这种管道文件是用来通信的,后面我们会详细讲解
此时我们再回过头来看看什么是Linux文件名的后缀没有直接意义
我们写一段代码,然后用gcc编译,会出现a.out的文件,我们就可以运行代码了
而当我们把a.out的名字随意修改后,代码仍然可以运行
而当我们把test.c改为test.txt后再使用gcc编译,发现不能通过了
这里是不是冲突了呢?
其实不是,我们说的是Linux中后缀没意义,而gcc是一款软件,Linux不管,不代表在Linux下运行的软件也不需要
所以我们在Linux中对后缀的态度是取决于用户的
3.没有权限是什么现象
我们再回过头来看,文件类型的后面是有很多字母的,我们看到基本都是rwx-
r是可读,w是可以写,x是可执行,-是对应的权限位置没有权限
权限是和人有关的,这里的人是一种权限身份,Linux将角色划分为三种,第一种是文件的拥有者,第二种是所属组,第三种是其他人
举个例子,张三和李四是一个小组的,张三研发了一个软件,张三就是这个软件的拥有者,李四
和张三都是所属组,而又有一个外人王五,王五就是其他人
我们看上面这张图,就可以解释一行的内容是什么了
我们举个例子,比如这张图里的drwxr-xr-x,就代表文件的拥有者可读可写可执行,而所属组的人可读,可执行,不能写,其他人也一样,不能写
读,写,执行,这三个权限的位置是确定的,每一个位置只有是或者否,具有指定的权限
如果是---,那就是不能读,不能写,不能执行,rwx就是可读可写可执行
另外,root是不受权限约束的,想干啥就干啥
我们接着往下看
我们使用chmod,然后减去所有的权限,u是用户,g是所属组,o是其他人,使用加减号即可
当权限变为---时,我们即使是拥有者,也无法查看 ,无法写入,这就叫我疯起来连我自己也打
不过root仍然不受影响(这里就不演示了,大家只要明白root对于这些玩意就是降维打击即可)
我们使用chmod给拥有者加上读权限,就可以读了
4.权限的修改问题
修改权限的一般有两种人,一种是文件的拥有者,另一种就是root
简单的加减权限我们已经介绍了,使用加减号即可,下面我们看一些不一样的
我们想要给所有人减去权限,就可以a-权限,加权限同理,a+权限即可
a是所有人的意思 ,这就是对权限的修改,这是第一种对权限的修改,下面我们再看第二种
我们上面说rwx以及三种角色的位置是固定的,而且只有是和否,对应的rwx或者-,是两种状态
所以我们可以把这个序列看作二进制序列,比如111,表示可读可写可执行,010表示不可读,可写,不可执行,我们使用8进制即可表示拥有者的权限,推而广之,111 110 110就可以写成766
直接chmod 000 即可把所有权限都去掉
100的8进制是4,所以我们444可以给所有人加上读权限,其他权限去掉
777是所有人所有权限都添加,这就是第二种的权限修改方式
这两种方案,大家自行选择
文件的拥有者,以及所属组也是可以修改的,下面我们来详细看看
我们可以使用chown,但是此时我们发现,这个操作是不允许的,我们把一个东西给别人,或者把一个东西从别人那里拿过来,都是需要征得别人的允许的
我们把东西给别人,除了征得同意,还可以强制给
有root的权限即可,下面我们换成root账号来试一试
此时,test.txt这个文件的拥有者就变成了张三
拥有者是张三,而我就是此时的所属组
而当我们此时再修改文件的权限时,发现不让修改了,因为我们并不是拥有者
那我们想把组也给张三呢?
我们只需chgrp即可,此时bai就变成了相对这个文件的其他人
如果我们想要同时修改拥有者和所属组呢?
我们只需chown 用户:所属组 文件 即可
另外,所属组是可以添加很多用户的,毕竟一个小组里一般是会有很多人的
下面总结一下这几条指令
chmod
功能: 设置文件的访问权限格式: chmod [ 参数 ] 权限 文件名常用选项:R -> 递归修改目录文件的权限说明:只有文件的拥有者和 root 才可以改变文件的权限chmod① 用户表示符 +/-= 权限字符+: 向权限范围增加权限代号所表示的权限-: 向权限范围取消权限代号所表示的权限=: 向权限范围赋予权限代号所表示的权限用户符号:u :拥有者g :拥有者同组用o :其它用户a :所有用户②三位 8 进制数字实例:chmod 664 /home/abc.txtchmod 640 /home/abc.txt
chown
功能 :修改文件的拥有者格式 : chown [ 参数 ] 用户名 文件名
chgrp
功能 :修改文件或目录的所属组格式 : chgrp [ 参数 ] 用户组名 文件名常用选项 : -R 递归修改文件或目录的所属组
下面我们再来看一些奇怪的例子
我们是这个文件的拥有者和所属组,但是拥有者权限是没有写权限的,所属组有,于是我们试一试看能不能写入,结果是不可以
我们将角色分为拥有者,所属组和其他人,在一个角色权限认证时,只能认证一个,所以这里是认证了拥有者,而其他两个是不会再看的,所以,如果我们把文件的拥有者改为张三,那就可以写入了,三个权限,优先认证拥有者,其次是所属组,最后是其他人
我们接着往下看
umask
我们创建两个普通文件,我们发现权限都是rw-rw-r--,对应的8进制是664
我们再创建两个目录,权限都是rwxrwxrwx,对应的8进制是775
为什么是这样呢?
在Linux中,默认给普通文件的其实权限的666,默认给目录文件的是777
但这和我们上面的不一样,下面我们来进行讲解
在Linux中,存在一个umask,我们叫做权限掩码
第一个0我们不管,我们看后三位,这就是一个8进制
权限掩码:凡是是umask中出现的权限,不会在最终文件权限中出现
umask就相当于漏斗,先获得默认权限,再根据某种计算,去掉权限
我们先看普通文件,默认权限是666,写成2进制是110 110 110,而umask是002,写成2进制是000 000 010
然后通过某种计算,就变成了110 110 100,也就是664
再看777的,写成2进制是111 111 111,所以就变成了111 111 101,也就是775
我们直观的看,这个某种运算好像是减法,但其实不是
我们验证一下,我们把umask改成001,如果是减法的话,666会变成665
此时的权限是666,说明并不是减法
其实是先对umask按位取反,然后按位与起始权限,最终权限 = 起始权限 & (~umask),大家简单试试就行了,这里我就不演示了
有了umask,我们就可以完成很多事,比如我们想要让我们创建文件都没有读,没有写
我们就可以umask 0555,这样我们创建的文件或者目录都不会具有读写权限
umask功能 :查看或修改文件掩码新建文件夹默认权限 =0666新建目录默认权限 =0777但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是 mask ,则实际创建的出来的文件权限是 : mask & ~umask格式 : umask 权限值说明 :将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022 ,普通用户默认为0002 。
我们接着看
我们创建目录后,发现目录相比普通文件有有很多的权限,但是普通文件的读写可执行我们都明白,但是目录的读写可执行是什么呢?
我们可以进入dir这个目录里
我们减去所有的读权限,还是可以进入,但是此时我们再ls -al,就不能查看了
我们再touch一个文件,然后ls,发现他不让我们看
所以,读权限并不是影响是否进入这个目录,而是影响查看文件下面,文件列表的操作
我们再把写权限去掉,然后我们进入dir,此时我们创建文件都是不允许的
我们清空一下
我们用root在这个目录下创建一个文件 ,并修改拥有者和所属组为我自己
切换回账号,我们对这个文件进行mv或者删除也是不允许的
我们再看可执行
我们把目录的权限改成666,发现我们现在都不能进目录了,但是我们仍然可以ls看到里面有test.txt
这就相当于我们没钱进游乐园玩,但我们可以在外边看,有一种奇怪的感觉
总结一下
目录文件的读:是否允许我们查看指定目录下的内容
目录文件的写:是否允许我们在当前目录下进行创建,更改,删除
目录的可执行:是否允许用户进入对应的目录
从这里也可以明白为什么默认权限为什么是666和777了,因为普通文件一般不需要可执行,而目录是需要进入的
我们再看新的知识
这是home下的目录,我们发现,用户的目录除了拥有者外,其他权限都是没有的,所以其他人想要来你的目录下建一个文件或者干什么操作都是不可能的
普通用户的家目录权限是700,所以我在我的家目录下创建的文件,别人都是看不到的
但是在实际中,我们多个用户是需要进行数据共享的,所以我们建立的目录是不能在任何一个人的家目录下
所以我们在根目录下建立一个shared的目录,然后我们chmod 777 将这个目录的权限放开
然后我们就可以通过各种操作来完成数据共享
有一天我们把这个文件的权限改为700
张三再看的时候发现他不能读也不能写,一看权限是700,一气之下就把我的这个文件给删除了
一个文件不是我建立的,但是在共享目录下被我删除了,这是不合理的
一个文件能否被删除,并不由文件本身决定,而是有文件所属的目录决定
这里有人就会想到,我们把这个目录的写权限去掉不就好了吗?但是写权限去掉后,我们自己也什么都干不了了,所以是不行的
我们想要的是共享的,但是不属于自己的是不能删除的,但我们又不能通过修改目录权限来解决
所以我们引入一个新的权限位,叫做粘滞位
粘滞位
通过chmod o+t来完成,我们就可以看到,shared的权限最后一位就由x变为了t
我们再创建一个文件
此时张三就不能删除我们的文件了
粘滞位:给目录设置,一般是共享目录,大家可以在目录中进行各自的增删查改,只允许文件拥有者或者root能删除这个文化,其他人不能删除,t是一种特殊的x权限
另外,上面这些各种权限对root来说都是摆设,无任何作用,还和之前一样,所以说root对于其他来说是降维打击
另外,在根目录下有一个文件叫做tmp,这个文件是唯一一个带t的
最后再补充一个file指令
file指令
功能说明 :辨识文件类型。语法 : fifile [ 选项 ] 文件或目录 ...常用选项 :-c 详细显示指令执行过程,便于排错或分析程序执行的情形。-z 尝试去解读压缩文件的内容
以上即为本期全部内容,希望大家可以有所收获
如有错误,还请指正