权限的概念通常是指行事权利的界限和范围。在linux中权限是指什么样的人可以做什么样的事或者拥有什么样的权利。
那么这里的什么样的人在linux中可以分为两类:
一种是超级用户:可以再linux系统下做任何事情,不受限制
另一种是普通用户:在linux下做有限的事
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
如何进行超级用户和普通用户之间的切换:
从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码。
这里拥有什么样的的权利指:
拥有对某种文件的读,写,执行三种属性的权利,下面会细讲。
对单条指令进行提权:
因为创建的的普通用户是不能直接sudo操作的需要以下几步:
1、切换root用户,并切换到etc文件下。
2、找到sudoers,因为/etc/sudoers文件默认是只读的,要添加写权限 chmod u+w sudoers。
3、进入到sudoers,编辑文件,找到 root(ALL)=(ALL) ALL
在它下面添加创建的普通用户 xxx (ALL)=(ALL) ALL 如果在执行sudo命令的时候不想输入密码可 在第二个(ALL)后面加上NOPASSWD: 如图:
4、撤销sudoers文件写权限命令
chmod u-w sudoers
文件和文件目录的所有者:u—User
文件和文件目录的所有者所在的组的用户:g—Group
其它用户:o—Others
如下图:
第一个nza是指文件的拥有者。
第二个nza是指文件所属组。
root&&user与他们的关系是什么样的人扮演什么样的角色。
文件属性是由文件类型和文件权限组成。
文件类型指下图的第一位,-表示普通文件类型:
-:普通文件
d:文件夹
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
r:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
w:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
x:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限 。
—:表示不具有该项权限 。
每三个一组属于一个角色拥有的权限,第一组是文件拥有者的权限,第二组是文件所属组的权限,第三组是指其它用户的权限。
比如第一行 rw-表示文件拥有者有读写没有执行的权限,w-表示文件所属组有读写没有执行的权限,r–表示其它用户有读没有写没有执行的权限。
(1)chmod
它可以设置文件的访问权限 采用chmod 用户表示符+/-=权限字符+ 文件名 格式。
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:文件拥有者
g:文件所属组
o:其它用户
a:所有用户
还有第二种方法八进制数设置权限:
可以把是否有权限用1或0表示,把每三个二进制数转换成八进制数表示一个权限,例如
rwx是 111八进制数是7
rx是101八进制数是5
rw是110八进制数是6
wx是011八进制数是3
r是100八进制数是4
w是010八进制数是2
x是001八进制数是1
—是000八进制数是0
格式还是chmod 八进制数 文件名。
前面讲的是如何修改访问者角色对应的3个个权限,这里讲如何修改访问者角色。但以下修改时如果是普通用户不能修改,需要sudo一下或者切换root用户。
(1)修改文件拥有者
指令是chown,格式是 chown 修改后的拥有者名字 文件名。如下图所示:
(2)修改文件所属组
指令是 chgrp ,格式是 chgrp 修改后的所属组名字 文件名。如下图所示:
目录中字母代表的权限含义:
r:显示目录下的内容
w:在目录下创建对应的文件
x:进入目录
x是最基本的权限,如果要读或者修改目录的前提得能进入到目录中,没有x,执行r或w权限会被拒绝。
默认权限是我们创建完目录或文件所看到的最终权限 如下图:
上图目录的最终权限用八进制表示是775
文件的最终权限用八进制表示是664
那这个默认权限是如何得出的,需要引入一个新指令 umsak。
系统为了更好的控制文件权限有默认 权限掩码的概念,umask是权限掩码的意思,是一个4位数字,影响用户创建的文件或目录的默认权限。如下图本系统的默认权限掩码是0002,只关注后三位,把它看成八进制数,转换为二进制数是00000010。
还要引入一个概念起始权限:它是系统设定的,规定文件的起始权限是666(二进制是110 110 110),目录的起始权限是777(二进制是111 111 111)。
那么默认权限也即是最终权限=起始权限&(~umask)。
例如:文件起始权限是110 110 110,对umask按位取反得出111111101,最后与得出110 110 100 转换为八进制数是664。
目录起始权限是 111 111 111,对umask按位取反得111111101,最后与得出 111 111 101 转换为八进制数是775。
权限掩码也可以更改 直接umask 更改之后的权限掩码四位数即可。
在使用linux的时,未来可能会有一些共享目录,被所有的普通用户共享,来保存用户产生的数据,共享目录都是有root提供的,但是文件被所有人共享的时候,受权限约束,拦不住别人删除自己的文件。也就是规定拥有目录的写权限,就可以删除目录的任何文件,即便自己是其他用户,没有该文件的任何权限,依然可以删除该文件。
如下图:
此时,为了让大家共享文件,且不让他人随便删除自己的文件,就要给该共享目录添加粘滞位,起到保护作用。
指令格式: chmod +t 文件名字(如果是普通用户前面加sudo)
拦不住别人删除自己的文件和只能给目录添加粘滞位的原因:
能否删除别人的文件并不是由文件本身决定的,由所处的目录的w权限决定的,有w就能删除和创建别人的文件,但是又不能去掉w,因为这是一个共享目录,要被大家所正常使用,所以要添加粘滞位。这个被删除的问题是由目录写导致的,所以之只能给目录添加粘滞位。
谁可以删除:
1、root用户
2、文件拥有者
shell是什么:
Linux严格意义上说的是一个操作系统,我们称之为“核心” ,kernel,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序shell与它进行沟通。
Shell的最简单定义:命令行解释器,主要包含一下两点:
1、将使用者的命令翻译给核心(kernel)处理。
2、同时,将核心的处理结果翻译给使用者。
windows下的“shell”和linux下的shell:
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
shell存在的意义:
1、帮忙进行命令传递和返回结果
2、保护操作系统
3、创建子进程,让子进程进行命令行解释,这样子进程有问题不会影响到父进程shell。
为什么借助shell和kernel交互:
直接和操作系统交互是难度很大的事,大多数人并不擅长。需要找一个中间人帮助我们。