一、用户的权限
(一)超级用户和普通用户
Linus下有两种用户,分别为超级用户(root)、普通用户
超级用户(root):有root权限,可以在linus系统下做任何事情,不受限制。
普通用户:没有root权限,在Linus下只能做有限的事情。
超级用户的命令提示符是'#',普通用户的命令提示符是'$'。
(二) 切换用户
命令:su [用户名]
功能:切换用户
例子1:在root用户下切换到普通用户user
因为超级用户root可以做任何事,所以切换用户时可以不输入用户的密码。
例子2:在普通用户下切换到超级用户root,输入指令su - 或 su root
(三)用户提权
普通用户在执行某些指令和操作时会受到限制。如普通用户使用yum安装某软件是不允许的。
如果想执行受限制的指令,在知道root密码的情况下可以使用su -切换到超级用户来执行对应的操作。
也可以不切换root用户,通过用户提权的方法,可在普通用户下执行受限制的指令。
命令:sudo 需要执行的指令
功能:对普通用户执行的一条命令提权
使用方法:
普通用户第一次使用sudo,会遇到下面的情况:
先提示用户输入当前用户的密码,输入成功后会提示用户不在sudoers这个文件里。
简而言之就是当前普通用户不是管理员,不能进行提权操作,我们需要切换到root用户下,在/etc/ 目录下修改一个叫做sudoers的文件,将允许提权的用户添加到sudoers里才能允许提权操作。
下面演示如何添加要给予提权权限用户:
在root用户下用vim文本编辑器打开sudoers文件
修改sudoers文件
强制保存退出(wq!),切换回普通用户user,使用sudo:
二、文件和目录权限的设置
文件和目录访问者的分类
文件和文件目录的所有者(拥有者):u —— User
文件和文件目录的所有者所属组的用户:g —— Group
文件和文件目录的其他用户: o —— Other
文件类型和访问属性
我们来看一个文件所显示的信息都有什么
一个用户既不属于文件所有者也不属于所属组的话,那这用户就肯定为其他人,所以文件属性里只需要存储所属用户和所属组是什么即可。
几种文件类型
-:普通文件d:文件夹l:软链接(类似Windows的快捷方式)b:块设备文件(例如硬盘、光驱等)p:管道文件c:字符设备文件(例如屏幕等串口设备)s:套接口文件
文件和目录的权限 (重要)
1、读( r ): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录内的文件信息的权限。2、写( w ): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除、移动和创建目录内文件的权限3、执行( x ): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限4、无(-): 表示不具有该项权限。文件和目录的权限是独立的一个文件是否能被读、写、以及执行看的是文件的权限。文件在目录内是否能被看到、删除、移动、创建看的是文件所在目录的权限。也就是说如果用户对于某个文件不具有写入的权限,但是对其文件所在的目录具有写入权限,那么这个文件可以被用户所删除。如果我们不想在某个共享文件中创建的文件被其他用户删除,可以设置粘滞位的方法实现。
文件权限值的表达方法
字符表示法
Linus表示法
说明
r--
只读
-w-
仅可写
--x
仅可执行
rw-
可读可写
-wx
可写可执行
r-x
可读可执行
rwx
可读可写可执行
---
无权限
数值表示
权限符号
---
r--
-w-
--x
rw-
r-x
-wx
rwx
二进制
000
100
010
001
110
101
011
111
八进制
0
4
2
1
6
5
3
7
文件访问权限的设置方法
命令:chmod
功能:设置文件的访问权限
常用参数:-R 递归修改目录文件的权限
用法:
1、chmod 用户表示符(u/g/o)加减(+/-)权限表示符(r/w/x) 文件名
例子1:给test文件的其他用户加上可写权限
chmod o+w test
例子2:给test文件的其他用户取消可读可写权限
chmod o-rw test
例子3:给test文件的所有者和所属组增加可执行权限
chmod u+x,g+x test
注意:一个文件能否运行不仅要看该用户在该文件有没有可执行的权限,还得看该文件是不是可执行文件。
例子4:给test文件的所有者和所属组以及其他用户取消掉所有权限
chmod a-rwx test
2、chmod 三位八进制数字 文件名
八进制数字所表示的权限:
权限符号
---
r--
-w-
--x
rw-
r-x
-wx
rwx
二进制
000
100
010
001
110
101
011
111
八进制
0
4
2
1
6
5
3
7
例子1:把test文件的权限数值修改为421
chmod 421 test
例子2:把test文件的权限数值修改为664
chmod 664 test
3、递归修改目录的权限
例子1:
当前目录下有个目录dir1,其拥有的文件的树状图如下所示
dir1的权限为555
dir1里的所有目录和文件fileX的权限也都为555
执行chmod -R 777 dir1
修改结果为目录里的所有文件的权限都修改为了777。
文件拥有者、所属组的设置方法
命令:chown
功能:修改文件的拥有者
常用参数:-R 递归修改目录文件的拥有者
用法:chown [参数] 用户名 文件名
例子1:
修改test文件的拥有者为root,修改拥有者需要root权限,即使文件的拥有者是自己。
chown root test
命令:chgrp
功能:修改文件的所属组
常用参数:-R 递归修改目录文件的所属组
用法:chgrp [参数] 用户名 文件名
例子1:
修改test文件的所属组为root,修改所属组需要root权限,即使文件的拥有者是自己。
chgrp root test
文件掩码umask
在Linus中,新建的文件的权限默认是666,而新建的目录的权限默认为777,但是我们创建文件或目录时,发现权限往往不是默认的666或777,其他人other的权限明显是变小了的。实际上,创建文件或目录的时候还要受到umask的影响。假设默认权限是mask(666或777),则实际创建的出来的文件权限是: mask & ~umask。
命令:umask
功能:查看或修改文件掩码
用法:
例子1:查看当前文件掩码
umask
说明当前文件掩码为0002
实际创建的出来的文件权限是: mask & ~umask = 664。
实际创建的出来的目录权限是: mask & ~umask = 775。
我们来创建一个新的文件和一个新的目录来看看是不是664和775:
例子2:修改umask掩码
当我们把umask掩码修改为0777时,创建出来的新文件和新目录是什么权限都没有的。
umask 0777
对文件和目录的权限的补充
当用户既是拥有者又是所属组时,只认拥有者的权限。
文件的所属组也可以是文件的拥有者,这种情况文件的拥有者自成一组。当一个用户既是一个文件或目录的拥有者和所属组时,Linus系统只看拥有者所具有的权限对用户的操作进行限制。
上面的演示中,当前用户user既是文件的拥有者又是所属组,拥有者不具有该文件的可读属性,而所属组具有该文件的读属性,当我们试图将test文件中的内容用cat打印出来时,发现没有读权限,无法打印test里的内容。
三、粘滞位
假如我们用root账号在家目录下创建了一个共享目录(shareDir),其权限对其他人全部开放。
我们以普通用户user在shareDir里创建一个文件myFile。
我们切换到另一个用户NanChengBeiLi,对user创建的文件myFile尝试删除操作。
我们发现可以删除,因为该文件所在的目录对其他人开放了写入的权限,任何人都可以删除该目录下的所有文件。
但是我们在一个共享文件中,往往是不希望自己创建的文件被他人随意删除的,如果要达到这样的功能,Linus提供了粘滞位的方法来解决该问题。
命令:chmod +t 文件名
功能:当目录被设置了粘滞位后,只有超级用户(root)、该目录的所有者、以及文件的直接所有者才能删除或重命名目录下的文件。这有效防止了其他用户误删除或篡改重要文件的可能性。
使用方法:
将shareDir设置粘滞位
将目录设置为粘滞位后,其他用户的可执行权限x会变成粘滞位t。
这个时候用户NanChengBeiLi在该目录下创建一个文件theFile,然后切换到另一个用户user,user试图删除别的用户创建的文件theFile就因为刚设置的粘滞位而无法删除了。