Linux基于centos7基础架构及权限学习


关于shell 


shell是作为一个外壳,即操作系统的外壳
操作系统在广义上可以分为内核跟外壳两部分
我们每次在Linux上敲的指令和在Windows上图形化界面上的操作,本质上都只是在外壳程序上进行。

为什么要有外壳


有人可能会问,那我不用外壳,直接接触操作系统的核心内核不好吗,为什么又要多一个外壳来进行访问。这是因为

1,用户不善于使用操作系统

2,操作系统出于易用程度和安全角度,是不允许用户直接访问的

这个处于安全角度,是指shell外壳可以对用户的一些指令做一定程度的检查,一旦发现你的指令不合规便将指令拦截

外壳是什么

外壳是介于用户和内核之间,需求指令和执行结果之间的中间者

它的核心工作就是

1,将使用者的命令翻译给核心处理

2,将核心的处理结果翻译给使用者

shell本质其实也是也是一个执行起来的程序(进程),系统启动期间,一直存在,它一般完成的是低风险,容易的指令,困难的,不容易的,有风险的指令一般交给其创建的子进程来去运行

shell是所有外壳程序的统称,即比如bash∈shell

使用命令行可以看见当前用户的bash使用情况

ps jax | grep bash

bash和sh一般指的是具体的命令行解释器。

只有用户登陆的时候才有shell,用户不登陆的时候shell没有存在的意义,并且每个用户登录都有一个shell,也就是说你在这个用户下执行kill,将另一个用户所使用的shell,比如bash,杀掉它的进程后,另一个用户不能使用命令行了,而这个用户依旧可以继续使用命令行,这就是每个用户都有一个shell

Linux权限

Linux用户

1,root 超级管理员

2,非root,普通用户

创建普通用户

普通用户切root账号

采用命令行:su - 或者 su

区别在于

 su - 能提供更为详细的信息,让我们以root身份重新登录一次,su只是将用户转为root身份

su - 会将你的路径变为/root,而su不会改变你的路径 ,只是将你所在的路径的权限由原来的普通用户升级为root

普通用户切换成root,需要输入root的密码

[lhl@VM-20-2-centos 716]$ su
Password: 

root账号变为普通是不需要认证的

[root@VM-20-2-centos 716]# su hailiang
[hailiang@VM-20-2-centos 716]$ 

普通用户切换成另一个普通用户,是需要对方的密码的

[hailiang@VM-20-2-centos 716]$ su lhl
Password: 

退回只需CTRL D

sudo指令

对普通用户的语句进行短暂提权,只要输入普通用户的密码,便可对语句以管理员级别进行运行

那么便有人问,你普通用户都能通过sudo来得到管理员级别的权限了,那我的root身份是不是变的毫无意义了

答案并不是的,这是因为Linux有一个配置文件,只有普通用户的用户名在那个文件里才能使用sudo,否则不能使用sudo

验证:

可以看到: lhl is not in the sudoers file. This incident will be reported. 

毫无疑问被拒绝了

这是LINUX的一个配置文件

一个用户的用户名在该配置文件中,才允许这个用户执行sudo

一个用户的用户名不在该配置文件中,不允许这个用户执行sudo

所以这种sudo方式,相当于一份白名单,只有受到信任的普通用户才能使用sudo,从而更好更便捷的管理

Linux文件权限管理

Linux群体角色有三种:拥有者,所属组,other

现在对第一列进行详解

这一列字符串中,每行字符串都有10个字符,先不说第一个字符的含义

把剩余九个字符分成三组,分别是:

 这三组从左到右分别对应的是:拥有者权限,所属组权限,other权限

rwx对应的也是:读,写,执行

修改权限

修改语句:

字母法

chmod u/g/o/a +/- r/w/x file_name

eg:给file.txt的拥有者去掉r权限

chmod u-r  file.txt

给file.txt的管理者去掉w权限

chmod u-w file.txt

给file.txt的管理者加上所有权限

chmod u-rwx file.txt

八进制表现法:

由于rwx三个权限要么有,要么没有,要么有,那么就可以用二进制0和1来表示,有三组,分别是拥有者,所属组,other,那么就可以用0和1来表示8进制

权限限制的依次顺序是,拥有者,所属组,other

也就是说,当你是拥有者时,且你没有r权限,就算你在的所属组有r权限,你也读不了

这些只能匹配一次

root的权限大于一切 

在root面前没有权限可言!

修改拥有者和所有组

chown 新拥有者 file_name

chgrp 新所属组 file_name

一般要用sudo,毕竟你给别人东西你得经过他人的同意,不想协商的话,就要用root权限强塞了

文件类型

文件类型能够说明文件属于哪一类别,可以被那些软件应用打开

比如mp4文件,它能够被播放器打开

文件类型在Linux三组权限,九个字符的前面,即第一个位置

Linux的文件类型不通过后缀区分,但这并不代表Linux不用后缀,只能说明Linux文件的后缀与文件类型关系不大

Linux常见的文件类型有:

-:普通文件,比如文本,源代码,图片,视频,库,可执行文件等等

d:目录文件

b:block ,块设备文件

c:char 字符设备文件

l:链接文件

p:管道文件

s:socket文件

b类型文件

最常见的块设备就是磁盘,上述展示的就是磁盘文件

块设备一般都是支持随机访问的

字符设备一般是不支持随机访问的,比如键盘显示器,终端一般也是

例如我在键盘上敲入我爱学习,我们是不允许它读到 ”爱我学习“ ,”爱习学我“等随机顺序的东西

b块文件是明显少于字符设备文件的 

链接文件

一般就类似于Windows的快捷方式,就拿Windows的快捷模式做例子,我们将快捷模式删除之后,这个软件或者程序依旧存在,并不会说你把快捷模式删了就没有了。所以,链接文件也一样,我们将链接文件删除之后,它所指明路径的某个文件依旧是存在的

管道文件可以将想要操作的内容从一个终端走到另一个终端

Linux系统不关心后缀,但并不代表Linux系统之上的其他工具,如编译器 ,指令等不需要后缀

对于文件后缀的态度应该是

虽然Linux不通过它识别,但依旧推荐使用!

一方面是因为工具需要,比如gcc,一个 .c 文件,如果改为 .txt 文件的话,虽然Linux系统不会说什么,但是当编译的时候遇到gcc时,便无法成功编译

另一方面是人需要

那么,接下来的另一个问题便是,比如 -类型文件有那么多种,文本,源代码,图片,视频等等等等,我咋知道具体的类型是什么呢

那这就要用到file指令

格式:file + file_name


探索访问目录权限

现在的文件对于拥有者来说可读可写可执行

进出目录权限实验

那么我们采取控制变量法,先将拥有者的读权限去掉

验证

恢复读权限,禁止写权限

 验证

恢复写权限,禁止执行权限

验证

结合实验,得出结论,目录的进入权限是通过执行权限来限制的

那么读写权限对于目录来说又是什么呢 ?

读写目录权限实验

继续试验:恢复目录的正常权限,给目录里创建一个普通文件

将读权限给禁止

验证

  

操作目录权限实验

恢复写读权限,禁止写权限

但是改这个文件的属性还是可以的

所以 x权限决定是否可以进入目录

        r权限决定是否可以进行对文件属性信息进行查看的权利

        w权限决定是否可以对文件进行删除和修改,以及创建

注意:root怎么都行,它不受权限控制

 那么看到这里又有一个问题:

为什么普通文件的默认权限不是777,而是664

为什么目录文件的默认权限不是777,而是775

umask

每种文件都有它自己的起始权限

普通文件的起始权限是666,因为我们很多文件都是可以不用x权限的,只有少量的才需要x权限

目录文件的起始权限是777

文件出了有起始权限,还拥有umask(权限掩码),umask可以自己定制创建文件时的默认权限

我们查看我们系统的默认掩码时

同样只需要关心后三位,002

002 ->000 000 010

权限掩码的意思是从起始权限中去掉在umask中出现的权限!

这边的计算方式是,起始权限&(-umask) = 最终权限(默认) 

修改umask

直接在umask命令后面添加上自己想要的umask码即可

探索目录权限功能及共享文件平台

用lhl这个身份在Linux Study目录下创建一个716的目录

drwxrwxr-x 2 lhl lhl 4096 Jul 16 20:02 716

目录文件位d

权限为rwx        rwx        r-x

拥有者为lhl        所属组为lhl

接着进到716目录

分别用lhl 和 root身份给716这个目录,创建文件

接着换成hailiang这个身份,尝试给这个目录添加文件

失败的原因是 

切换为root身份,将root创建的所有文件的权限都禁止掉

[root@VM-20-2-centos 716]#  chmod 000 r_file*

 

回到lhl这个身份,发现此时的文件它是既看不了有写不了

 

但能不能删呢?

 

这就好比什么,716这个文件是lhl这个身份创建的,716就相当于lhl的房子,突然有一天root带着它的三个行李,分别是r_file1,2,3.txt丢到716这个房屋里面,并跟716的主人lhl说,你不可以动他 ,甚至不能看它一眼,lhl心想这能忍?欺负到头上来了:“好!我不看你的!也不动你里面的东西!我把它丢出去!!!”

因此 一个文件能否被删除,并不取决于文件本身,而取决于文件所处的目录拥有者是否有写权限

这是家目录文件,对于拥有者来说是rwx,对于所属组和other,什么权限都没有,所以不存在其他用户在我的用户下创建文件(root除外)

那么我想要共享文件又要怎么办呢

为了怕别人乱搞,还是不敢开家目录的其他权限,如此一来为了共享文件,Linux开起了一个tmp的临时文件

 

tmp目录是被所有目录共享的,其它用户可以建立文件到这个目录里,该文件的拥有者是root,所属组也是root

在lhl身份下,tmp目录里创建一个文件,并往里面写入

[lhl@VM-20-2-centos 716]$ cd /tmp
[lhl@VM-20-2-centos tmp]$ ll
total 4
-rw-r--r-- 1 root root    0 Jul 11 09:37 stargate.lock
drwx------ 3 root root 4096 Mar  6 09:12 systemd-private-ceb3095770
[lhl@VM-20-2-centos tmp]$ touch lhl.txt
[lhl@VM-20-2-centos tmp]$ echo "hello mydaring" >> lhl.txt

在hailiang身份下,查看tmp目录里的lhl.txt文件

[root@VM-20-2-centos tmp]# su hailiang
[hailiang@VM-20-2-centos tmp]$ cd /tmp
[hailiang@VM-20-2-centos tmp]$ ll
total 8
-rw-rw-r-- 1 lhl  lhl    15 Jul 17 09:41 lhl.txt
-rw-r--r-- 1 root root    0 Jul 11 09:37 stargate.lock
drwx------ 3 root root 4096 Mar  6 09:12 systemd-private-ceb30957702f4e599695e27270c49b19-ntpd.service-ANU1Zn
[hailiang@VM-20-2-centos tmp]$ cat lhl.txt 
hello mydaring

发现,能通过tmp查看其它账号的文件内容,但只要当文件的拥有者对文件权限进行限制,其它账户想要操作也会变得相对困难

drwxrwxrwt. 8 root root 4096 Jul 17 09:45 /tmp

t:粘滞键,防止其它用户删除我在tmp里创建的文件

tmp 中的t,t是粘滞位

给目录中的other设置一个权限位,具有x的意义,同时也进一步对目录权限进行特殊限定

特殊限定:该目录里面的文件,只有root和目录的拥有者有权利删除,否则不能删除

以上便是此次博客的学习内容,如有错误,还望各位大佬能够指点出来,谢谢大家 

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值