【Linux入门】一、权限的理解

文章目录

Ⅰ. shell命令以及运行原理


Linux 严格意义上说的是一种具体的操作系统( os ),我们称之为 核心(kernel ,但我们一般用户,不能直接使用 kernel 。而是通过 kernel 的**"外壳"程序**,也就是所谓的 shell ,来与 kernel 沟通。如何理解?为什么不能直接使用kernel?

​ 从技术角度,Shell 的最简单定义:命令行解释器(command Interpreter 主要包含:

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

对比 windows GUI ,我们操作 windows 不是直接操作 windows 内核,而是通过图形接口点击,从而完成我们的操作(比如进入 D 盘的操作,我们通常是双击 D 盘盘符.或者运行起来一个应用程序)。

shell 对于Linux ,有相同的作用,主要是对我们的指令进行解析,解析指令给 Linux 内核。反馈结果在通过内核运行出结果,通过 shell 解析给用户。

  • 举个例子:如果说你是一个闷骚且害羞的程序员,那 shell 就像媒婆操作系统内核就是你们村头漂亮的且有让你心动的MM小花 。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的 bash(是 linux 中的一种具体的 shell

shellbash 的区别:

  • shell : 是所有外壳程序的 统称
  • bash : 是一种 具体的 shellLinux 系统下的)

Ⅱ. Linux权限的概念

Linux 下有两种用户:超级用户(root)、普通用户。

  • 超级用户 :可以再 linux 系统下 做任何事情,不受限制
  • 普通用户 :在 linux 下做 有限的事情
  • 超级用户的命令提示符是 #,普通用户的命令提示符是 $

一些常见的用户操作命令:

  • 切换用户:su 用户名
  • 添加用户: useradd 用户名
  • 删除用户:userdel [选项(常用 -r)] 用户名
  • 设置密码:passwd 用户名
  • 退出登录:logout 或者 Ctrl + d 或者 exit

​ 例如,要从 root 用户切换到普通用户 user ,则使用 su user ,但是无需输入密码。 要从 普通用户 user 切换到 root 用户则使用 su root ,此时系统会提示 输入 root 用户的密码

注意: 如果我们单纯的想提升当前指令的权限,可以给指令带上 sudo

Ⅲ. Linux权限管理

一、文件访问者的分类(角色)

  • 拥有者(u --- User): 文件和文件目录的 所有者
  • 所属组(g --- Group): 文件和文件目录的所有者 所在的组的用户
  • 其他人(o --- Other): 其它用户 (即无某个文件或目录权限的用户)

问题:为什么要有所属组的存在呢?

​ 一般在公司中,都是分部门的,有些公司规定可能有几个部门一起研发一样东西,那么这几个部门就存在了竞争。

​ 那在一个部门里面,用 Linux 写文件的时候,部门内的成员是需要一起看文件或者写文件的,而对于其他部门,这些文档可能是不允许别人看到的。如果这个时候将文件设置为其他人不允许读或者写的话,那么只有拥有者可以看到,那么对于同一个部门里面的成员,也无法读文件和写文件,就造成了麻烦。

​ 为了解决这种麻烦,就引入了 所属组,在所属组中的成员与拥有者一样拥有对文件的权限,而只有在所属组外的其他人,才会没有权限,这就很好的解决了这个问题。

二、文件类型与访问权限(事物属性)

文件类型:

shell 复制代码
d : 文件夹
- : 普通文件
l : 软链接(类似于Windows的快捷方式)
b : 块设备文件(例如硬盘、光驱等)
p : 管道文件
c : 字符设备文件(例如屏幕等串口设备)
s : 套接口文件

基本权限:

  • rread ):对文件而言 ,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • wwrite ):对文件而言,具有修改文件内容的权限;对目录来说,具有删除移动目录内文件的权限
  • xexecute ):对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • -:表示不具有该项权限

注:在权限的三位中,第一位是 r ,第二位是 w ,第三位是 x ,若某个位置上是 - ,则表示无该权限。

三、文件权限值的表示方法(理解就学会怎么用了)

a、字符表示方法

Linux表示 说明 Linux表示 说明 Linux表示 说明
r-- 只可读 rw- 可读可写 rwx 可读可写可执行
-w- 只可写 r-x 可读可执行 --- 无权限
--x 只可执行 -wx 可写可执行

b、八进制数值表示方法

权限符号 八进制 二进制
r 4 100
w 2 010
x 1 001
rw 6 110
rx 5 101
wx 3 011
rwx 7 111
--- 0 000

举例:

shell 复制代码
[liren@VM-8-2-centos tmp1]$ clear
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rwxrwxr-x 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ chmod 664 tmp.txt    #使用八进制进行修改
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt

四、文件访问权限的相关设置方法

1. chmod 指令

  • 功能:设置文件的访问权限
  • 格式:chmod [参数] 权限 文件名

常用选项:

  • R:递归修改目录文件的权限
  • 说明:只有文件的拥有者和 root 才可以改变文件的权限
关于权限以及用户的表示符号
  • 权限操作符号:
    • +:向权限范围增加权限代号所表示的权限
    • - :向权限范围取消权限代号所表示的权限
    • = :向权限范围赋予权限代号所表示的权限
  • 用户符号:
    • u:拥有者
    • g:拥有者同组员
    • o:其它用户
    • a:所有用户

​ 注:root 超级用户不会受到任何的权限限制,而普通用户会。普通用户若要让自己获得文件的权限, 需要获得拥有者的同意,或者用 sudo 进行短暂的权限提升。

举例:

shell 复制代码
#给拥有者进行权限操作
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ chmod u+x tmp.txt   #给user加上可执行权限
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rwxrw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ chmod u-rwx tmp.txt   #将user的权限都去掉
[liren@VM-8-2-centos tmp1]$ ll
total 0
----rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ cat tmp.txt      
cat: tmp.txt: Permission denied    #访问权限等受阻了


#给所属组与其他人进行权限操作
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ chmod g-rw tmp.txt    #去掉所属组的rw权限
[liren@VM-8-2-centos tmp1]$ chmod o-r tmp.txt	 #去掉其他人的r权限
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw------- 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ chmod g+rw,o+r tmp.txt   #也可以同时给多个角色设置权限
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt


# 若没有指明给哪个用户设置权限,则默认为全体用户,即 a 或 all
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ chmod +x tmp.txt     #没有指定哪个用户
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rwxrwxr-x 1 liren liren 0 Jul 18 14:44 tmp.txt

2. chown 指令

  • 功能:修改文件的拥有者
  • 格式:chown [参数] 用户名 文件名
  • 常用选项:
    • -R:递归修改文件或目录的拥有者

实例:

shell 复制代码
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ chown root tmp.txt     #若不加sudo则弹出禁止修改的提示
chown: changing ownership of 'tmp.txt': Operation not permitted
[liren@VM-8-2-centos tmp1]$ sudo chown root tmp.txt    #加了sudo后即可修改拥有者
[sudo] password for liren: 
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 root liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ sudo chown liren tmp.txt
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt

注:如果要一次性将拥有者与所属组修改,可以用 : 分隔开

​ 举例:

shell 复制代码
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 root root 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ sudo chown liren:liren tmp.txt 		#使用 :分割开即可
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt

3. chgrp 指令

  • 功能:修改文件或目录的所属组
  • 格式:chgrp [参数] 用户组名 文件名
  • 常用选项:
    • -R:递归修改文件或目录的所属组

实例

shell 复制代码
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ chgrp root tmp.txt		#若不加sudo则弹出禁止修改的提示
chgrp: changing group of 'tmp.txt': Operation not permitted
[liren@VM-8-2-centos tmp1]$ sudo chgrp root tmp.txt		#加了sudo后即可修改所属组
[sudo] password for liren: 
[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren root 0 Jul 18 14:44 tmp.txt

4. umask 指令

  • 功能:查看或修改文件掩码
    • 新建文件默认权限为 0666 ,新建目录默认权限为 0777 。但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask 的影响。假设默认权限是 mask ,则实际创建的出来的文件权限是:mask & (~umask)
  • 格式:umask 权限值
  • 说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022 ,普通用户默认为 0002

也就是说,凡是在 umask 中出现的权限位,都不应再在默认权限中出现,还有要注意到的是,umask 调整的是掩码,而不是默认权限。

实例

shell 复制代码
# umask 755	//修改为755
# umask //查看
# umask 044	//修改为044

[liren@VM-8-2-centos tmp1]$ ll
total 0
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ umask 755
[liren@VM-8-2-centos tmp1]$ touch file1
[liren@VM-8-2-centos tmp1]$ ll
total 0
-----w--w- 1 liren liren 0 Jul 18 16:59 file1
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt
[liren@VM-8-2-centos tmp1]$ umask 044
[liren@VM-8-2-centos tmp1]$ touch file2
[liren@VM-8-2-centos tmp1]$ ll
total 0
-----w--w- 1 liren liren 0 Jul 18 16:59 file1
-rw--w--w- 1 liren liren 0 Jul 18 16:59 file2
-rw-rw-r-- 1 liren liren 0 Jul 18 14:44 tmp.txt

5. file 指令

  • 语法: file [选项] 文件或目录...
  • 功能: 辨识文件类型

常用选项:

  • -c:详细显示指令执行过程,便于排错或分析程序执行的情形。
  • -z:尝试去解读压缩文件的内容。

举例:

shell 复制代码
[liren@VM-8-2-centos code]$ file sort.c
sort.c: C source, ASCII text

Ⅳ. 目录的权限

  • 可执行权限 :如果目录没有可执行权限,则无法 cd 到目录中。
  • 可读权限 :如果目录没有可读权限,则无法用 ls 等命令查看目录中的文件内容。
  • 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。

Ⅴ. 粘滞位

  • 语法: chmod +t 文件名
  • 功能: 防止其他人(除了 root)删除了不该删除的。

当一个 目录 被设置为 "粘滞位"(用 chmod +t),则该目录下的文件只能由:

  1. 超级管理员(root)删除
  2. 该目录的所有者删除
  3. 该文件的所有者删除

注:如果目录本身就是你的,粘滞位就没有效果。

总结

  • 目录的可执行权限是表示你可否在目录下执行命令。
  • 如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目录,即使目录仍然有 -r 读权限。(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  • 而如果目录具有 -x 权限,但没有 -r 权限,则用户可以执行命令,可以 cd 进入目录,但由于没有目录的读权限,在目录下即使可以执行 ls 命令,但仍然没有权限读出目录下的文档。
相关推荐
maosheng11466 小时前
RHCSA的第一次作业
linux·运维·服务器
wifi chicken6 小时前
Linux 端口扫描及拓展
linux·端口扫描·网络攻击
旺仔.2917 小时前
Linux 信号详解
linux·运维·网络
放飞梦想C7 小时前
CPU Cache
linux·cache
Hoshino.417 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
恒创科技HK8 小时前
通用型云服务器与计算型云服务器:您真正需要哪些配置?
运维·服务器
吴佳浩 Alben9 小时前
GPU 生产环境实践:硬件拓扑、显存管理与完整运维体系
运维·人工智能·pytorch·语言模型·transformer·vllm
播播资源9 小时前
CentOS系统 + 宝塔面板 部署 OpenClaw源码开发版完整教程
linux·运维·centos
源远流长jerry10 小时前
在 Ubuntu 22.04 上配置 Soft-RoCE 并运行 RDMA 测试程序
linux·服务器·网络·tcp/ip·ubuntu·架构·ip
学不完的10 小时前
Docker数据卷管理及优化
运维·docker·容器·eureka