前言:
上两篇文章我们讲到了,关于Linux中的基础指令。
【Linux】初见,基础指令-CSDN博客【Linux】初见,基础指令-CSDN博客
本文我们来讲Linux中关于权限中的一些指令
shell命令
Linux严格来说是一个操作系统,我们称之为“核心”(kernel)。而作为用户的我们并不能直接与核心交流,这时候就有一个中间人的角色出现:将我们的指令翻译为核心可以看懂的符号,交由核心执行,并将执行结果翻译并返回给我们。
这个中间人就是“包裹”在核心外的“外壳程序”,介于我们和核心之前。我们称之为:shell命令
从技术层面来讲,shell的最简单定义就是:命令解释器。其主要功能就是:
1.将命令翻译后交给核心执行
2.将核心执行的结果翻译并返回给我们
形象理解shell:
假如小y过年回家打算相亲了,打算小y并不擅长与异性交流,这时候就拜托了媒人王姨作为中间人,帮忙小y和异性之前传话。这时候王姨就是“外壳程序”shell。
为什么要有shell?
1.方便用户使用
2.作为外壳程序,保护核心
补充:
权限概念
Linux中权限分为两种:root账号、普通账号
root账号:为超级权限账号,不受任何权限限制
普通账号:受到权限限制,在Linux中只能做有限的事
su
命令:su 用户名
功能:切换账号
hyc@hcss-ecs-4ce7:/$ whoami
hyc
#切换root账号执行su即可
hyc@hcss-ecs-4ce7:/$ su
#输入root账号密码
Password:
root@hcss-ecs-4ce7:/# whoami
root
#切换普通账号:su 用户名(不需要密码)
root@hcss-ecs-4ce7:/# su hyc
hyc@hcss-ecs-4ce7:/$ whoami
hyc
补充:普通用户 -> root账号,除了su可以实现,su -也可以实现。但是区别是?
hyc@hcss-ecs-4ce7:/$ pwd
/
hyc@hcss-ecs-4ce7:/$ su
Password:
root@hcss-ecs-4ce7:/# whoami
root
root@hcss-ecs-4ce7:/# pwd
/
hyc@hcss-ecs-4ce7:/$ pwd
/
hyc@hcss-ecs-4ce7:/$ su -
Password:
root@hcss-ecs-4ce7:~# whoami
root
root@hcss-ecs-4ce7:~# pwd
/root
#我们可以看到su、su-,都成功的切换到了root。
#不同的是su切换账号并不会改变之前所处路径,既su不会改变位置
#而su-会改变位置,之前是/下,切换之后在/root下
sudo:短暂的指令提权
如果我们需要使用root权限来执行一些指令,但是却没有root密码怎么办?
在指令最前面加上sudo,就可以使用root权限执行命令
hyc@hcss-ecs-4ce7:~$ sudo ls
[sudo] password for hyc:
这样确实方便,但是有一个问题:那岂不是人人都可以使用root权限了?这不乱套了?
Linux设计者当然考虑到了这个问题,普通用户如果想要使用sudo进行指令提权。必须要root账号给予普通账号提权权限才行。所以并不是什么普通账号都可以进行提权
没有提权权限的账户,就会显示以下报错
hyc@hcss-ecs-4ce7:~$ sudo ls
[sudo] password for hyc:
hyc is not in the sudoers file. This incident will be reported.
总结:
普通 -> root:su(不会改变位置)
su-(会改变位置:默认切换至家目录)
root -> 普通:su 用户名
sodu : 指令提权
权限管理
权限的本质是:能做或者不能做什么事情(控制用户行为,防止错误操作)
理解:
1.权限限制的是人
2.权限要求目标必须具备对应属性:权限:角色+目标属性(权限)
属性
对于Linux中的属性来说主要为三个:读、写、执行
读:r
写:w
执行:x
之前我们说过第一个字母代表文件属性,而后面的一串字符则代表该文件的权限。
r:对文件来说,代表可以读取文件内容;对目录来说,代表可以浏览目录内容
w:对文件来说,代表可以修改文件内容;对目录来说,代表可以删除目录中的内容
x:对文件来说,代表可以执行该文件;对目录来说,代表可以进入该目录
但是为什么这里有多个wrx呢?这就涉及到角色的问题。
角色
上面我们说了权限=角色+对应属性。
属性代表相应的角色拥有什么权限,那么我们是如何分辨角色呢?如何知道角色对应所拥有的权限呢?
首先我们可以通过命令行得知我们当前的角色、或者使用whoami指令
然后根据当前用户,来判断其说拥有的权限
解释:
我们当前用户是root,对于第一个目录来说,我们就是其拥有者。所对应拥有的权限则是rwx
而什么是所属组?什么是other呢?
所属组就是当前角色不是拥有者,但是与拥有者在同一个队伍中。这时候就会匹配所属组权限,这时候这个角色就是所属者。
所属组的存在是为了更精细化的权限管理。举例:a组和b组都在同一台Linux机器上开发项目,a组项目代码需要公开出来让a组全体成员都能看见,但是不希望b组看见。这时候就只需要将a组全体成员纳入所属组中,然后将other权限关闭,就可以实现。(现在很少用到了,了解即可)
other就是既不属于拥有者,也不属于所属者的角色。这时候就会匹配other权限。
如何描述文件权限信息?
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt
对于new.txt这个文件来说权限的描述应该为:拥有者权限为rw,所属组权限为r,other权限为r。
文件权限表示方法
1.字符表示法
3个字母为一组,分别为:r、w、x,如没有对应权限则用 " - "表示。其顺序是固定的不可交换
2.8进制表示法
chmod指令
语法:chmod 参数 权限 文件名
功能:改变文件权限(只有root或者文件拥有者才有资格修改权限)
选项:
-R:递归的将目录下的文件权限全部修改
参数:
u:拥有者
g:所属组
o:other
a:有所用户
实际操作展示 :
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt
#关闭u的w权限
root@hcss-ecs-4ce7:~# chmod u-w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-r--r--r-- 1 root root 22902 May 18 11:51 new.txt
#开放u的w权限
root@hcss-ecs-4ce7:~# chmod u+w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt
#关闭u的多条权限
root@hcss-ecs-4ce7:~# chmod u-rw new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
----r--r-- 1 root root 22902 May 18 11:51 new.txt
#开放u的多条权限
root@hcss-ecs-4ce7:~# chmod u+rw new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt
#开放g的w权限
root@hcss-ecs-4ce7:~# chmod g+w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-rw-r-- 1 root root 22902 May 18 11:51 new.txt
#关闭g的w权限
root@hcss-ecs-4ce7:~# chmod g-w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt
#以此类推,其他的权限操作类似
另外也可以通过八进制来实现多个用户权限的修改:
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt
#通过3个8进制数字实现,对多个用户权限修改
root@hcss-ecs-4ce7:~# chmod 000 new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
---------- 1 root root 22902 May 18 11:51 new.txt
root@hcss-ecs-4ce7:~# chmod 663 new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-rw--wx 1 root root 22902 May 18 11:51 new.txt
修改权限注意事项
1.任何人都可以修改文件权限吗?
只有root和文件拥有者才能修改权限!
2.如果在进行相应操作时没有权限会怎么样?
系统会拒绝我们的指令请求
hyc@hcss-ecs-4ce7:~$ ls -l
total 0
-rw-rw-r-- 1 hyc hyc 0 May 24 23:07 new.txt
hyc@hcss-ecs-4ce7:~$ chmod u-r new.txt
hyc@hcss-ecs-4ce7:~$ ls -l
total 0
--w-rw-r-- 1 hyc hyc 0 May 24 23:07 new.txt
hyc@hcss-ecs-4ce7:~$ cat new.txt
cat: new.txt: Permission denied
3.确定权限信息时,系统会先确认谁?
先确认拥有者权限,再确认所属组,最后是other。权限只会确定一次,不会多次确定,第一次匹配上的权限既为我们当前角色所拥有的权限。
4.root账号权限?
拥有最高权限,不受一切权限的限制。所有设定的限制只针对普通账号有用。
5.可执行权限?
我们之前所讲的例子中都没有可执行样例,其实可执行程序是.exe文件。普通文件一般没有x权限,当然即使拥有x权限也无法执行,因为其本身就不是可执行文件。
chown与chgrp指令
语法:chown 用户名 文件名
功能:改变文件或目录的拥有者
选项:-R 递归的修改目录中所有文件的拥有者
语法:chgrp 所属组名 文件名
功能:修改文件或目录的所属组
选项:-R递归修改目录中所有文件的所属组
使用chown修改拥有者、chgrp修改所属组出现问题?
hyc@hcss-ecs-4ce7:~$ ls -l
total 0
-rw-rw-rw- 1 hyc hyc 0 May 24 23:07 new.txt
hyc@hcss-ecs-4ce7:~$ chown root new.txt
chown: changing ownership of 'new.txt': Operation not permitted
hyc@hcss-ecs-4ce7:~$ chgrp root new.txt
chgrp: changing group of 'new.txt': Operation not permitted
原因:
系统并不支持随意的将文件的拥有者或所属组修改,这一操作只有root权限才能被允许。所以在要在这句指令前加上sodu,或者切换为root账号。
下面我切换为root账号作为演示:
root@hcss-ecs-4ce7:~# ls -l
total 24
-rw-rw--wx 1 root root 22902 May 18 11:51 new.txt
root@hcss-ecs-4ce7:~# chown hyc new.txt
root@hcss-ecs-4ce7:~# ls -l
total 24
-rw-rw--wx 1 hyc root 22902 May 18 11:51 new.txt
root@hcss-ecs-4ce7:~# chgrp hyc new.txt
root@hcss-ecs-4ce7:~# ls -l
total 24
-rw-rw--wx 1 hyc hyc 22902 May 18 11:51 new.txt
目录权限问题
1.rwx对于目录来说意味这什么?
没有r权限,无法查看其内容
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
drwxrwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ chmod u-r new
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
d-wxrwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ ls new
ls: cannot open directory 'new': Permission denied
没有w权限,无法在其内部创建文件
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
drwxrwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ chmod u-w new
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
dr-xrwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ ls
new
hyc@hcss-ecs-4ce7:~$ touch ./new/my.txt
touch: cannot touch './new/my.txt': Permission denied
没有x权限,无法进入目录
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
drw-rwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ cd new
bash: cd: new: Permission denied
rwx这三个权限都与目录的正常使用相关,所以我们创建的目录默认权限这三个都有。
2.理解Linux中多用户是如何相互“隔离”的?
root@hcss-ecs-4ce7:~# ls -l /home
total 8
drwxr-x--- 3 hyc hyc 4096 May 26 15:41 hyc
drwxr-x--- 2 ye ye 4096 May 26 16:03 ye
所有用户的other权限都是全部关闭的,任意用户都无法进入。这就带来了“隔离”
3.缺省权限
对于普通文件:默认起始权限是666
对于目录:默认起始权限是777,带x
但我们看到的默认权限一般都不是我们说所的起始权限 ,这是为什么?
root@hcss-ecs-4ce7:~# ls -l
total 4
drwxr-xr-x 2 root root 4096 May 26 16:59 new
-rw-r--r-- 1 root root 0 May 26 16:40 new.txt
因为Linux中存在一个东西叫做权限掩码(umask)
root用户的权限掩码为:022
普通用户的权限掩码为:002
root@hcss-ecs-4ce7:~# umask
0022
(最前面的0表示八进制)
最终的权限=起始权限&(~umask)
umask的目的是什么?
凡是出现在umask上的权限,都不会出现在最终的权限上面。
umask为什么会出现?
可以让我们自定义默认权限,是一种灵活满足需求的表现
4.文件的删除由谁决定?
一个文件是否可以被删除与文件本身无关,而在于目录的w权限。
粘滞键
如果有两个或者多个用户需要在文件层面上的相互合作,那么所创建的文件就不能在私人目录下。将目录创建根目录下,这样所有用户就都可以访问并写入自己的内容。
但是这里存在一个问题,就是如果在众多用户中存在隔壁公式派来的内鬼(bushi),内鬼可以删除自己的文件也可以删除被人的文件(文件是否可以被删除与自己无关,与文件的w权限有关)!
这该怎么办??关闭w权限吗?不行,这会影响其他用户的正常使用,那怎么办?
Linux给粘滞键有效的解决这一问题
chmod +t
给权限加上粘滞位,加上粘滞位的目录有以下效果:
1.文件只能被root删除
2.文件只能被其拥有者删除
3.文件只能有该目录的拥有者删除
其实系统已经为我们准备好了这一特殊目录,就是根目录下的temp目录
我们可以看到temp的other权限最后一个字母是t,这就代表粘滞位。
一般需要文件上的多人合作,都是在temp里进行。