文章目录
- 一、Linux下用户的分类
- 1. Linux下用户分为两类:
- 2. 这两类用户如何进行切换呢?
- 3. 短暂提权
- 二、何为权限
- 1. 什么是权限
- 2. Linux的文件后缀意义
- 三、修改权限
- 1. 设置文件的访问权限——chmod
- 2. 修改文件拥有者——chown
- 3. 修改文件所属组——chgrp
- 4. 一个问题
- 四、两个面试题
- 1. 问题一:默认权限问题(权限掩码)
- 2. 问题二:用户的文件共享问题(粘滞位)
一、Linux下用户的分类
1. Linux下用户分为两类:
- root:超级用户
基本不受权限的约束 - 普通用户:我们用root新建(adduser)的用户
受权限约束
2. 这两类用户如何进行切换呢?
在普通用户下输入su/su -
:
会让我们输入密码,输入root密码就完成切换了
如果要切回到普通用户,输入exit/ctrl + d
:
无需输入密码。
如果我们要从root切换到指定普通用户,可以用su [目标用户名]
完成切换,无需输入密码。
普通用户切换指定普通用户也亦如此,不同的是需要输入指定普通用户的密码。
注意:Linux中所有的用户都要有密码,无论是root还是普通用户。
建议:root的密码不要和普通用户的密码相同
3. 短暂提权
如果我们想要提权一条指令,可以输入sudo [指令]
进行提权,第一次需要输入你的用户密码验证身份。输入一次后10~20min中内提权无需再输入密码验证。
注意:如果我们用的普通用户没有添加到系统信任白名单内(/etc/sudoers),是没有sudo的权利的,因为系统不信任你。
二、何为权限
1. 什么是权限
一件事情是否允许你做
- 权限认证的是身份(权限与“人(身份/角色)”有关)
权限=具体用户+身份/角色
- 用户分为root和普通用户
- 身份分为:
- 拥有者(u):文件和文件目录的所有者
- 所属组(g):文件和文件目录的所有者所在的组的用户
存在意义:可以给部分人给予特殊权限 - 其他人(o):其它用户
- 所有人(a)
- 权限与事物的“属性”有关
文件的属性:可读r、可写w、可执行x
文件属性:
为什么没有指定其他用户呢?
除了拥有者和所属者后,剩余的就是其他用户了,所以没必要再去指定
开头的首字符是文件类型:
d:目录文件
-:普通文件(文本、可执行程序、库等)
l:软链接(类似Windows的快捷方式)
b:块设备文件(硬盘文件)
p:管道文件(用来进行通信的)
c:字符设备文件(键盘、显示器文件等)
s:套接口文件
基本权限
i.读(r):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除、创建、更改目录内文件的权限
iii.执行(x):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“-”表示不具有该项权限
为了更加便捷,还可以用8进制来表示它们:
注意:
- 位置是什么含义是确定的
- 每一个位置只有是与否,具有指定的权限
2. Linux的文件后缀意义
Linux系统中文件名后缀对文件类型没有直接意义
也就是说:Linux不以文件后缀区分文件类型
后缀以用户需求来决定:用户使用软件,软件会要求文件后缀。
eg:gcc不能编译后缀.txt文件,要求后缀为.c。这和Linux无关,这是软件需求(用户需求)。
三、修改权限
1. 设置文件的访问权限——chmod
chmod [参数] 权限 文件名
常用选项:
- R : 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod有两种设置权限格式:
① 用户表示符+/-/=
权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
用户符号: - u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
②三位8进制数字
2. 修改文件拥有者——chown
格式:
chown [参数] 用户名 文件名
实例:
chown user1 f1
chown -R user1 filegroup1
3. 修改文件所属组——chgrp
chgrp [参数] 用户组名 文件名
4. 一个问题
hanhe666这个用户具有进入这个目录的权限吗?
答案是没有。
因为权限在进行认证的时候,只能选择一个角色进行认证!
认证顺序:
拥有者->所属组->其他
四、两个面试题
1. 问题一:默认权限问题(权限掩码)
为什么我们创建文件的默认权限是这样的?
为什么普通文件是664?
为什么目录文件是775?
预备知识:
- 默认给普通文件的起始权限是666
- 默认给目录文件的起始权限是777
其实这和权限掩码umask有关
第一位的0忽略
凡是在umask中出现的权限,不会在最终的文件权限中出现
最终权限 = 其实权限 &(~umask)
- ~:按位取反
- &:按位与
所以,如果我们要修改默认权限,修改umask就可以了
2. 问题二:用户的文件共享问题(粘滞位)
可以看到,普通用户自己的家目录是700,我们在自己的家目录下创建文件,别人是看不到的。
但我们需要多个用户进行文件数据的共享,怎么办呢?
- 可以用root在家目录下创建一个权限为777的共享目录,完成文件共享。
- 但是存在一个问题:你创建的文件,其他用户居然可以删除,这合理吗??
注意:一个文件是否能被删除,并不由文件本身决定,而是由这个文件所在的目录决定! - 如果我们去掉共享目录的w权限,会导致我们无法创建文件,那么这个共享文件就失去共享功能了。
- 这里我们需要用到粘滞位,可以很好地解决这个问题,实现共享功能。
粘滞位(t):是一种特殊的x权限。给目录设置,一般是共享目录,所有用户可以在该目录进行各自文件的增删查改,只允许拥有者和root能删除这个文件。