Linux下有两种用户:
超级用户(root) :可以再linux系统下做任何事情,不受限制
普通用户 :在linux下做有限的事情
命令:su [用户名]
功能:切换用户
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su
root(root可以省略),此时系统会提示输入root用户的口令
su:如果路径不想变化就用su
su - :让root用户重新登陆
root变普通用户只用su+普通用户名字,不需要输入密码
普通用户和root用户密码最好不要设置为一样的。因为root权限太高了,万一你的普通用户密码流出了,那么root密码也就流出了,这样是非常不安全的
其次我们长时间使用linux的时候,如果要多次输入密码,有可能我们自己都不知道是普通用户还是root用户
最后提醒大家一定要记住root密码,不要轻易更改(因为之前我就忘记了root密码)
1、找到你所购买云服务的官网
2、登录上你的云服务器
3、点击修改密码就行,一定要是默认系统,因为默认系统是root
大家尽量使用普通用户,因为root用户操作不善影响太大了。其次,以后大家进公司也接触不到root
那么,如果我想要执行一条指令,但是权限不够,又不想使用root用户怎么办呢?
这个时候sudo就产生了
作用
进行提权操作。不切换到root,让普通用户以root的身份进行操作
sudo提权的时候要输入我们自己普通用户的密码,这是为什么呢?
我们可以理解为linux中有一张黑白名单,白名单上面的用户可以使用sudo,而黑名单上面的用户不能使用sudo。所以,白名单的用户,就是受信任的用户。这个时候sudo提权,输入我们自己普通用户的密码,就是为了提供最少的执行障碍
所以,sudo普通用户使用的时候需要进行设置,因为如果人人都使用sudo提权不就人人都是root了?这是不可能的。这里的设置等我们后面讲完vim再和大家细讲。
大家只要知道,sudo提权之后的用户基本上相当于root用户了,两者差别不大
另外,sudo对用户进行一次提权之后的5到10分钟左右可以不需要输入密码,直接使用就行
权限是约束人的(一个人或者一群人)
目标对象(各种app),本来就没有对应的属性(业务)
个人理解为:
一件事情是否允许被谁做
谁就是上面被约束的人,做就是目标对象
文件权限 = 人 + 文件属性
人的本义不是人,而是角色:
举个例子:
我们能够看vip电影,并不是因为我们叫某某某,而是因为我们是vip角色;
我们能够进入学校,并不是我们叫某某某,而是因为我们是该学校的学生
校长进入校长办公室,并不是因为校长叫某某某,而是因为他是校长,所以可以进入
linux里面把所有用户分为三种人,也就是三种角色:
1、拥有者(owner)
2、所属组(grouper)
3、其他人(other)
拥有者:文件和文件目录的所有者(主人)
所属组:文件和文件目录的所有者所在的组的用户(比如说:我们所在项目组的队员和组长)
其他人:除了拥有者和所属组之外的用户
很多人是不是好奇为什么会有所属组这个东西呢?
举个例子说明:
一家公司开发了一个项目或者软件,公司内部的小组A和小组B都很看好,那么公司就决定两个小组比较一下,谁做的好就选择该小组。A小组先完成了,这个时候要给领导看成果。如果只有拥有者和其他人两种角色的话,其他人的权限肯定要放开,不然领导看不到,这个时候所有人都可以看到A小组的内容了,也包括B小组,那么B小组就可以通过A小组的成果进行进一步的提升
所以,所属组就出现了,我们可以把一些用户和自己放在所属组内,那样组内人员可以看到,其他人都看不到
补充:
linux中,文件名后缀不起什么作用,使用后缀只是用来提醒用户,本质上后缀名是文件名的一部分;
但是,linux中gcc等工具对文件后缀是有要求的,这一点很重要
文件属性:
linux中,文件有三种属性:可读(r),可写(w),可执行(x)
我们之前不是都通过文件或者目录名字的颜色来判断是文件或者目录的吗,今天就来讲讲另外一种方法
linux中有许多类型的文件,最基本的就是d开头的文件夹(目录)和-开头的普通文件,下面我会列出文件类型表,大家目前只用掌握上面的d和-,剩下的我们后面会遇到
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
p:管道文件
管道文件有很多种形式,我们前面见的|是一种,后面会补充
s:套接口文件(socket文件)
后9个字符:
所以说,不同角色对一个文件的操作权限就在这里显示出来了
提问:我们该如何阅读权限呢?
文件111.c的拥有者是keli,拥有者不能读,只能够写和执行;所属组是keli,不能够读,只能够写和执行;其他人只能读,不能写和执行
便于我们系统进行管理的
u/g/o/a ± rwx
修改文件权限必须是拥有者或者是root
我们下面的一系列修改文件权限操作,在root用户下都可以执行
有一些文件的确没有r、w、x属性,比如说普通文件没有x属性,不能够执行;
但是我们可以将普通文件修改为可执行文件,虽然执行时会报错,但是我们的的确确可以修改
角色 | 简称的操作字符(对不同的角色修改不同的文件权限,角色在指令中采用下面的字符) |
---|---|
拥有者 | u |
所属组 | g |
其他人 | o |
所有人 | a |
chmod | 用于对文件权限的修改 |
案例1:删除拥有者的可读权限
案例2:添加拥有者的可执行权限
虽然该文件不能够被执行,但是我们仍然可以把它权限修改为可执行。能不能进行操作是一回事,能不能修改权限又是一回事
修改拥有者,所属组和其他人这三种角色对文件的权限,方法是一样的,就是把简称字符换一下
案例4:删掉拥有者和所属组的全部权限
案例5:拥有者和所属组添加可读可写权限,其他人删掉可读可写权限
再来看看
提问:上面图片中拥有者和所属组名字一模一样,为什么拥有者没有的权限,所属组有,但是不执行呢?
因为系统会将我们的用户名(whoami的结果)拿去从左到右进行匹配:先匹配拥有者,再匹配所属组,前面都没匹配上就是其他人,每次只能匹配上一个角色的权限,所以上面虽然拥有者没有的权限,所属组有,但是因为先匹配到拥有者了,所以与所属组的权限无关了。这么做是为了我们自己添加删除自己的权限,随便我们怎么操作,反正不影响到组内其他人员
我们可以对文件的r、w、x权限进行修改,那么也就可以对拥有者,所属组和其他人进行修改
指令 | 作用 |
---|---|
chown | 对拥有者进行修改(也可以改所属组) |
chgrp | 对所属组进行修改 |
其他人不需要修改,因为修改了拥有者和所属组,其他人也就自动改了 |
我们也可以采用加上sudo的方法
八进制方法
rwx要么有,要么没有,有就用1表示,没有就用0表示
再把二进制的值转换为8进制,我们可以将上面的u/g/o/a ± rwx替换成为八进制的值
功能说明:辨识文件类型。
语法:file [选项] 文件或目录…
常用选项:
-c 详细显示指令执行过程,便于排错或分析程序执行的情形
-z 尝试去解读压缩文件的内容
为什么我们创建的目录或者普通文件,默认的权限是我们看到的样子?
(简单来说就是:为什么我们创建一个目录或者文件的默认权限是固定的?)
这里目录的默认权限为什么是rwx rwx r-x(775);普通文件的默认权限为什么是rw- rw- r–(664)???
linux规定,目录的起始权限为777;文件的起始权限为666
但是这也不与上面图片中的目录/文件默认权限相同啊?
这就要提出新知识点:权限掩码umask
umask=0002;umask+新数字 就是更改umask
系统会自动配置好umask
权限掩码:凡是在umask中出现的权限,都必须在起始权限中去掉
最终权限=起始权限 & (~umask) —— 最终权限等于权限掩码取反,再按位与上起始权限
可执行权限:如果目录没有可执行权限, 则无法cd到目录中.
可读权限 :如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容
可写权限 : 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
于是, 问题来了~~
换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限
简单来说:
只要用户有了文件上一级目录的写(r)权限,那么该用户就可以删除该目录下的任何文件,不管用户有没有目录下任何文件的任何权限
这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉? 我们用下面的过程印证一下
[root@localhost ~]# chmod 0777 /home/
[root@localhost ~]# ls /home/ -ld
drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/
[root@localhost ~]# touch /home/root.c
[root@localhost ~]# ls -l /home/
总用量 4
-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c
drwxr-xr-x. 27 litao litao 4096 9月 19 15:53 litao
-rw-r--r--. 1 root root 0 9月 19 15:59 root.c
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[litao@localhost ~]$ exit
logout
为了解决这个不科学的问题, Linux引入了粘滞位的概念
粘滞位出现背景:
1、linux系统中有很多人,我们需要在一个公共的目录下,对临时文件进行增删查改等操作(一定是在一个公共的目录下,大家一起进行文件操作)
[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由:
1、超级管理员删除
2、该目录的所有者删除
3、该文件的所有者删除
如果我们要进入一个目录,需要用到什么权限???
答案是:x权限!
可执行权限:如果目录没有可执行权限, 则无法cd到目录中.
可读权限 :如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容
可写权限 : 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
为什么目录起始权限是777 ?
因为所有目录创建出来一般都支持可以进入,所以必须有x权限,至于可读可写权限要什么需求,通过权限掩码umask来解决
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限
所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。