1.Linux下的用户
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
总结:
- 普通用户切换成root,需要输入root密码。
- root回退到普通用户:exit或者ctrl+d(logout)。
- root账号变成普通,不用认证。
- 普通用户变成另一个普通用户,需要对方的密码。
su - :以root身份重新登录一次。
su :用户身份切换为root。
如果我们所有人都有root密码,每个人都可以删除用户添加信息,但是总不能排出有新手误删了,此时对数据就会造成不可挽回的影响,所以一般拥有root密码的是Linux管理员。
sudo:对指定的指令进行提权。
普通用户不想切换为root,但是想以root权限执行指令:sudo touch file1.txt,然后输入普通用户的密码。
我们后面再以root权限执行指令:sudo touch file3.txt,我们会发现此次不需要输出普通用户的密码就创建出文件了,这是因为曾经sodu输过密码,并且Linux会短暂的记录用户在一段时间执行过sudo命令,是已经做过认证的,所以后面就不需要再输入密码。
如果我们输入sudo就可以以root的身份执行指定的命令,root的密码是否就毫无意义呢?我们去执行一下sudo ls
如果我们将用户添加到该配置文件中,那用户是否可以执行sudo吗?当然可以,但是该配置文件(白名单)是root文件,我们普通用户无法自己添加该配置文件,要添加该配置文件必须以root的身份添加。所以能够执行sudo的,一定是历史上曾经经过管理员允许的用户,才能执行sudo,我们上面之所以能执行sudo是因为将sudo touch命令添加到该配置文件
2.Linux权限管理
首先了解一个概念,权限一定是限制人的,比如优酷会员,买了会员就可以看一些付费的电视剧。 对应的操作对象,一定要有对应的满足人的需求的属性。比如:优酷就专门看电视剧,csnd专门学习。
01.文件访问者的分类(人)
- 文件和文件目录的所有者:u---User
- 文件和文件目录的所有者所在的组的用户:g---Group
- 其它用户:o---Others
为什么会存在一个所属组
假设当张三这个拥有者写了一份非常优秀的代码,他的领导是属于其他普通用户,领导觉得张三的代码非常好,想看一下,于是张三想打开了权限,让其他用户可以看到,但是同为竞争者的李四也是其他普通用户也就能看到,于是张三拥有者就和领导这个普通用户搭建了一个所属组,该组的所属者为张三,将其组内的内容对领导这个普通用户设置可见,只能让领导这个普通用户看到。
02.文件类型和访问权限(事物属性)
a) 文件类型
- d:文件夹 -:普通文件
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
b)基本权限
- i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- iv.“—”表示不具有该项权限
03.文件权限值的表示方法
a)字符表示方法
Linux表示 | 说明 | Linux表示 | 说明 |
r-- | 只读 | -w- | 仅可写 |
--x | 仅可执行 | rw- | 可读可写 |
-wx | 可写可执行 | r-w | 可读可执行 |
rwx | 可读可写可执行 | --- | 无权限 |
b)8进制数值表示方法
权限符号(读写执行) | 八进制 | 二进制 |
r | 4 | 100 |
w | 2 | 010 |
x | 1 | 001 |
rw | 6 | 110 |
rx | 5 | 101 |
wx | 3 | 011 |
rwx | 7 | 111 |
--- | 0 | 000 |
04.文件访问权限的相关设置方法
a)chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
- R -> 递归修改目录文件的权限
- 说明:只有文件的拥有者和root才可以改变文件的权限
修改权限:chmod ugoa+=rwx FILE
验证有无权限,对比是什么?
当我们没有权限的时候,就不能以该方式访问该文件,直接被拒绝访问。有对应的权限才能做对应的事。对于可执行来说,不一定拥有可执行的权限就可以执行该文件。
当我们去掉拥有者的可执行权限,whb用户就不能执行文件了,可是我们发现所属组拥有可执行权限,而且所属组的用户还是whb用户,此时whb用户以所属组的身份去执行为什么不能执行此文件呢?
这是因为一个用户在去访问这文件的时候,Linux系统默认当前的用户的身份是拥有者,只会去看拥有者的权限,而且Linux系统的这种匹配只会匹配一次,匹配到了拥有者就不能再次匹配到所属组了。
此时拥有者就切换为了gaobo这个用户,但是此时登录的还是whb,此时Linux系统根据当前的用户whb就去匹配到了所属组,从而也就可以执行这个文件了。
当我们切换到gaobo这个普通用户,此时Linux系统又会再次匹配,此时匹配的就是拥有者,此时就没有可执行的权限。
我们再切换为whb用户,此时我们对file.txt文件删除所有权限
然后我们切换超级用户root,此时root归属于other,root此时依然没有任何权限
上面图片观察到,尽管root没有权限,但是依然能够访问到该文件,说明权限对超级用户root形同虚设。
同时根据8进制数值表示法,我还可以用8进制进行权限修改。
b)chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
我们修改一个文件的权限,将文件的拥有者权限给别人,需要获取这个人的同意吗?很明显,如果你给别人的是一份非常烂的代码,别人肯定不会成为这个文件的拥有者。但是在Linux下我们不能商量,也没办法得到别人的允许,就算得到了别人的允许,我们也给不了拥有者身份,此时只能通过sudo进行指令提权。
同时我们也可以切换成root身份,进行拥有者身份的变化。
c)chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
该指令和上面的chown用法一样,因为我们当前为root,所以可以直接修改。修改拥有者和所属组的同时other也在改变,所以Linux也有修改other身份的指令。
我们可以同时修改拥有者和所属组,用户之间以:分隔-。
d)umask
解释:定制一个文件被创建的时候的默认权限,从起始权限中去掉(不是减法)在umask中出现的权限!
功能: 查看或修改文件掩码 新建文件夹默认权限=0666 新建目录默认权限=0777 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
验证一下普通用户创建的普通文件权限是664
通过公式:mask & ~umask即可求出实际创建的出来的文件权限
3.file指令
我们可以同时修改拥有者和所属组,用户之间以:分隔-。
第一个字符,表示文件类型。在Windows下,我们同样也具有文件类型,通常是通过后缀名标识,文件类型用来判定文件属于哪一个类别,可以用哪些软件操作。但是Linux的文件类型不通过后缀区分(不代表Linux不用后缀)
我们首先看一下有哪些文件类型
块设备文件 -> 磁盘:支持随机访问
字符设备文件 ->键盘显示器:不支持随机访问
链接文件:类似于Windows下的快捷方式
我们上面删除了链接文件但是可执行程序还在,所以Windows下我们想删除一个软件删除桌面的那个快捷方式不算删除,必须要去删除源文件。
管道文件 -> 传递信息
Linux的文件类型不通过后缀区分。
Linux的文件类型不通过后缀区分,但是不代表Linux指令gcc等其他指令不用后缀。对于Linux文件类型后缀,虽然Linux不通过它识别文件类型,但是我们依然推荐使用后缀去标识文件!因为工具需要,同时后缀也方便用户观看。
功能说明:辨识文件类型。
语法:file [选项] 文件或目录...
常用选项:
- -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
- -z 尝试去解读压缩文件的内容。
使用 sudo分配权限
(1)修改/etc/sudoers 文件分配文件
# chmod 740 /etc/sudoers # vi /etc/sudoer
格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令
(2)使用 sudo 调用授权的命令
$ sudo –u 用户名 命令
实例:
$ sudo -u root /usr/sbin/useradd u2
4.目录的权限
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件属性内容.
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
- 这些权限对于超级用户root是没有限制的.
我们来看一下下面的图片
于是, 问题来了~~我们的root创建的文件,为什么能被whb这个普通用户删除呢?
换句话来讲, 就是只要用户whb具有目录的写权限, whb用户就可以删除目录中的文件, 而不论自己是否有这个文件的写权限. 这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?这就相当于我李四的房子给你张三住,张三要出差一段时间,让李四不要动他东西,李四自己的房子不能动吗?肯定能动,你张三创建的文件在我李四的目录下,我对我自己的目录有写权限,我自己目录下的文件我自己不能删!!!所以root虽然没有给whb用户文件的任何权限,但是该文件是在whb这个用户目录下创建的,且whb对该目录还有读写执行权限,所以他就可以删除了。
总结:一个文件能否被删除,并不取决于文件本身,而取决于文件所处的目录的拥有者是否具有写权限。
为了防止上面的情况出现,Linux对每个用户的家目录下都做出权限的管理,其他用户都无法进入家目录中写文件,也就避免了上面的删除问题。
如果未来gaobo用户对whb
用户说,我想看一下你写的文件,你把读权限打开,写权限关掉,并且让我能找到该文件,Linux为了实现文件的共享,root下提供了temp目录,可以允许任何用户把要共享的文件建到该目录下。
于是就实现了文件的共享
未来某一天,我们不想将文件再给任何人看,于是我们就取消了该文件的所有权限,当gaobo用户此时再来观看这个文件的时候,却发现已经不能看到该文件了,于是一怒之下就将该文件删掉了。
这里很奇怪,gaobo用户没有读写执行权限,为什么可以删除呢?这就是我们上面讲到的,root创立temp文件的时候,对other用户给予了读写执行权限,other作为该目录下的具有读写执行权限,那么当然可以删除里面的文件了。
那我们可以去掉temp目录下的other的w权限吗?很明显,不能,虽然w权限不能让别人删除文件,但是我们自己也写不了文件,我们自己也是普通用户,对于root来说,我们也是other。
为了解决这个不科学的问题, Linux引入了粘滞位的概念
5.粘滞位
粘滞位:给目录中的other设置的一个权限位,具有x权限的意义,同时进一步对目录的权限进行特殊限定。
[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),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
6.关于权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这 个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限
- 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
本章结束啦!下章见,拜拜。