目录
1.Linux 权限
1.1shell命令以及运行原理
1.2 Linux权限的概念
1.3权限管理
1.4文件访问权限的相关设置方法
1.4.1对普通文件的操作
1.4.2 对目录的权限操作
1.Linux 权限
广义上,Linux发行版=Linux内核+Linux发行版。
狭义上,Linux=Linux内核
shell是命令解释器的统称 ,Linux使用的是Bash,bash是shell其中之一。程序员和我自己的关系。
1.1shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel)",但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
如何理解:从技术角度,shell的最简单定义:命令行解释器
命令行解释器作用:
将使用者的命令翻译给核心(kernel也就是内核)处理。将核心的处理结果翻译给使用者。
对于非法请求,shell是有权利拒绝的:保护内核,不会传递到内核。
shell创建子进程(程序运行起来就是一个进程,shell本身就是一个进程)来进行执行具有风险的事情,出现问题(程序挂掉)不会影响shell。就相当于找了一个实习生背锅。
为什么不能直接操作kernel: 需要用户非常了解内核,成本太大了。
如何证明bash是一个进程:
ps-axj显示系统中所有的进程:查看bash进程
每次登录的时候,系统都会创建一个对应的bash进程:
再登录一次:
查看进程:
结束进程:kill -9 31639 。直接结束了。退出了
1.2 Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
超级用户(root):可以在Linux系统做任何事情,不受限制
普通用户:具有一般权限,需要受权限约束的。你所创建的用户(adduser),创建用户只能在超级用户下。
普通用户切换超级用户:su -
切换成功:
切换回原来的用户:输入exit 或快捷键ctrl +d
不要使用su - zhy(超级用户可以随意切换用户,所以设置密码的时候一定要设置复杂一些) ,因为这样会创建bash进程。
在普通用户下sudo 临时权限提升,执行后续命令,以root用户执行。
sudo 没法直接使用,需要添加信任关系。后面整理
1.3权限管理
理解权限是什么:
一瓶水有自身的属性:喝与不能喝,但是权限是:这个人能喝,那个人不能喝。
一间屋子有自身的属性:能进不能进,但是权限是:这个人能进,那个人不能进。
权限约束的是人,文件本身具有的天然的权限属性:r + w + x
权限:一件事情是否允许被特定的人做。权限=人+事物属性。
所以权限操作:人:修改人 属性:修改属性
1.文件访问者的分类(人,认识人)
Linux中的用户类别:
1.拥有者 owner
2.所属组 group
3.其他 other ()
root 和普通用户指的是具体的一个人。拥有者,所属组,other 指的是一种角色身份。
2.文件类型和访问权限(事物属性)
Linux下一切皆文件
1.4文件访问权限的相关设置方法
1.4.1对普通文件的操作
a)chmod修改文件访问权限
用户符号:u:拥有者 g:拥有者同组用 o:其他用户 a:所有用户
+:增加权限 -:取消权限
修改拥有者的权限
修改所属组的权限
修改其他用户的权限
也可以同时修改文件权限:
修改所有的文件权限:
所属用户修改自己的所属文件权限后:所属用户进行操作时发现读写执行都是被拒绝的。
那我使用root用户呢?
file.txt文件,其他用户设置的权限是r--,只有只读的权限,cat读ile.txt文件的内容,确实是可以的,也符合我们设置的。
发现root不仅可以直接修改文件的属性,并且不受文件权限的限制,即使file.txt其他用户没有rwx root也可以读写。
只有执行权限是受限制的。但是,root又可以直接修改文件的权限,我加上x就可以了。这不是矛盾吗?实际上在Linux系统中,对可执行是具有强管束,怕执行的文件是有风险,因此需要增加一个步骤,就是超级用户直接自己可以加上可执行。这样就可以执行文件了。
总结:超级用户(root)可以修改权限,并且几乎不受权限约束。上帝视角。
使用root在普通用户里创建一个文件:
b)chown修改文件的拥有者
我想把file.txt文件的所属者修改为root,但是需要经过别人的同意,用sudo,因为我还没有添加信任,因此sudo是不行的。
我直接切换到root用户(root 不受权限限制啊,随便改,不用经过别人同意,给你就拿着),去修改,file.txt的拥有者:
su 切换到root用户,不会更改你所在的路径(这样就不会再去找当前路径)
su - 会修改路径
修改拥有者:
又还给了zhy,不需要你同意,我是超级用户,给你就拿着。
c)修改文件或目录的所属组
修改file.txt的所属组,给别人需要别人同意,因为没有添加信任,所以sudo不行。
切换到root 用户进行操作:
改回去:
1.我是root用户,不需要你的同意,直接改。
2.文件的所属者可以直接要回去
同时修改拥有者和所属组: 一样的,也需要别人同意,这里直接切换到root
修改回来:
文件权限的分析:
所以我们再修改文件权限的时候,可以这样改:使用8进制
创建者不一定是拥有者,不等价,2种概念。
1.4.2 对目录的权限操作
修改目录所属者的权限,所属者没有目录读权限,不能读目录,读取权限是查看这个目录
目录的写权限:向目录里创建文件或目录
这里touch zhy/test.c是需要x权限的:这里主要原因是,你创建文件是需要打开文件,打开文件需要x权限,可以这样理解。
进入目录需要什么权限:需要x权限,打开目录就是执行目录
当目录只有rw权限时,我查看目录,发现是可以查看的,但是查看目录是需要进入目录的,这不是矛盾了,我没有x权限,还是能查看:
其实不是矛盾的,我只有r权限,只让你看看文件名,具体里面的文件属性不会让你看的:
当有r和x时才能ll 显示文件的全部属性:
zhy用户test文件来说是其他用户,zhy对于root_file1文件也是其他用户:
zhy是可以删除这个文件root_file1的,我直接给你删除掉,这不就有问题了,别人创建了一个文件,其他人可以随便删除。
这里的主要原因是,test目录给了其他用户具有写权限:
发现不能删除了
结论:
如果目录本身对other具有w权限,other可以删掉任何目录下的文件
如果目录本身对other没有w权限,other不可以删除掉任何文件
若是我们有一个需求,other可以在特定的目录下创建文件,并写入但是不想让任何人删掉自己的文件:(root又想让人创建文件,并不想让other删除我的root_file1或2或3文件)
所以需要粘(nian)滞位:
可以删除自己创建的文件:
注意:粘滞位只能对目录设置,一般是限制other权限的。对设置了粘滞位的目录,在该目录下的文件,只能(目录和普通)文件拥有者(或root)可以删除,一般这个目录拥有者是root,其他人不能删除。
粘滞位的应用:有时候,有多个人,或者系统会有很多的临时数据,所有的临时数据文件放在系统的/tmp,需要把所有的权限都放开,那所有人都可以删除别人的文件,就乱了啊。但是只想让文件拥有者自己删除自己的文件,所以用到粘滞位。
为什么我创建文件的时候,创建出来的默认权限是现在看到的样子:
默认权限:
普通文件,起始权限(666)
目录文件,起始权限(777)
系统中有一个权限掩码:umask,凡是在umask中出现的,都应在起始权限中去掉
权限掩码:2进制表示,主要看后3位 000 000 010
普通文件的起始权限:666 110 110 110
如何计算?
default=default & ~(mask)
对mask取反:111 111 101
mask取反: 111 111 101
普通文件的起始权限:110 110 110 &
结果: 110 110 100 ,所以普通文件默认是:664,目录文件一样计算。
那我就可以自定义设置默认权限了:
这个权限是本次登录有效,换个用户登录就无效了:root要求严格点,不是0333。