一、用户/用户切换
Linux下有两种用户:超级用户(root)、普通用户。
Linux中的所有用户都要有密码。
超级用户:可以在Linux系统下做任何事情,不受限制。
相当于Windows下的管理员
普通用户:在linux下做有限的事情。
我们自己创建的用户(adduser)
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
切换用户
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su
root(root可以省略),此时系统会提示输入root用户的口令。
身份变化:普通用户变到root 直接用su 依旧是在家目录下
重新登陆root:用 su -
root变成普通用户 不需要输入密码
普通用户之间切换 需要输入密码
给一条指令做提权 后面的一定时间内 给这条指令提权就暂时不需要输入密码了
一开始我们用的普通用户,没有办法执行sudo,系统不信任。
除非将普通用户添加到系统信任白名单中。
二、权限
1.概念
什么叫做权限?
一件事情是否允许被你做
1.权限认证的是身份(权限和“人”有关)
角色权限身份:
1.文件拥有者
2.文件所属组
3.其他人
root和普通用户是具体的人
root和普通用户分别可以是文件拥有者、文件所属组、其他人。
2.权限也和事物“属性”有关
文件属性: 可读、可写、可执行
文件的类型:
windows通过文件的后缀来区别类型 如:.c .txt 等。
Linux系统中文件名后缀没有直接意义。(当然,不代表不用)
gcc是一款编译器(软件),Linux操作系统不需要后缀,不代表Linux系统上运行的其他软件不需要后缀。
-:普通文件 文本、可执行程序、库基本都属于普通文件。
d:目录文件
b:块设备文件 磁盘文件
c:字符设备文件 键盘、显示器文件等。
p:管道文件 用来通信的
……
在Linux中如何看待后缀问题?看用户需求
r:可读
w:可写
x:可执行
-:对应的权限位置,没有权限
如图:三三为一组
第一组(红色)为拥有者权限
第二组(橙色)为所属组权限
第三组(绿色)为其他人权限
r/- w/- x/-
读权限 写权限 执行权限
1.位置的含义是确定的
2.每一个位置只有是或者否,具有指定的权限
拥有者、所属组:
others:
root不受权限约束
将所有权限取消
root依旧不受影响
2.权限修改问题
更改权限的两种人:
1.文件的拥有者
2.root
命令:
a)chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod
① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
八进制方案修改权限
b)chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
如果是普通用户则需要提权
或者直接用root
不是文件的拥有者了 不可以修改权限 所以要用root
将group修改为可读
c)chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
一次性改拥有者和所属组
3.其他问题
在进行角色认证时,只能选择一个角色认证。
如:既是拥有者又是所属组,那么认证了拥有者之后 不会再认证所属组
lll既是拥有者又是所属组,拥有者身份有读的权限,所属组身份有读和写的权限,但是只认证一组,也就是一个身份,即为拥有者。
将拥有者改成whw 那么lll就是所属组 可读可写
问题1:起始权限问题
为什么我们创建文件的默认权限是我们现在所看到的样子?????????
为什么普通文件权限是664?????
为什么目录文件权限是775??????
1.默认给普通文件的起始权限其实是666
2.默认给目录文件的起始权限其实是777
umask(权限掩码):
凡是在umask中出现的权限,不会在最终的文件权限中出现。
普通文件
起始文件 110 110 110 666
umask 000 000 010 002
最终文件 110 110 100 664
目录文件
起始文件 111 111 111 777
umask 000 000 010 002
最终文件 111 111 101 775
这个计算不是减法
证明:
把umask改成0001
如果是减法:
110 110 110
000 000 001
110 110 101 ->665
但是根据图中所示,图中为666,并不是665
所以这个计算不是减法。
最终权限计算:
最终权限=起始权限&(~umask)
测试:
将文件权限设置为只可以写:
问题2:目录权限问题
读文件权限约束:
读权限不是影响进入目录的权限
读权限是影响查看下面文件列表的内容
读写文件权限约束
目录文件的读和写
r:是否允许查看指定目录下的文件内容
w:是否允许我们在当前目录下进行创建,更改和删除
x:是否允许用户进入对应的目录
可执行权限是影响是否能进入文件的权限
问题3:粘滞位
1.普通用户自己的家目录权限是 700,我在我的家目录创建的文件,别人都看不到!(进都进不去)
2.有时候,我们多个用户想进行文件的共享。
3.一个文件能否被删除,并不由文件本身决定,由这个文件所处的目录决定。
4.我们如果去掉了共享文档的w权限,同时我们也无法创建文件了!
5.粘滞位:给目录设置,一般是共享目录,大家可以在目录中进行各自文件的增删查改,只允许文件的拥有者或者root能删除这个文件,其他人一律不允许删。t是一种特殊的x权限。
根据第一二点 --> 我们所建立的共享文档,不能在任何一个人的家目录下。
实现数据共享:
root在根目录下创建目录 将权限改为777
lll在shared里创建test.txt并写入内容
whw可以看到并读取文件内容
lll把test.txt的权限改为600
whw不能查看也不能写 但是可以删除
whw可以删除的原因:shared对于others来说是可读可写可执行的。
解决方法(不可行版):不能删除的同时,也不能创建文件了。
所以,我们想要所有人都可以创建目录/文件,但是不是自己文件就不可以删。
所以我们需要使用粘滞位。
如果粘滞位需要删除,只能由:
一、超级管理员删除
二、该文件的所有者删除
root不受权限约束。
在根目录下,普通用户不能创建文件/目录
在Linux中,共享文档不需要创建,tmp就是共享文档。(也是唯一有粘滞位的)