权限管理

shell 命令运行原理

$ ..

输入指令的黑框就是命令行,输入的命令就叫做指令。使用which可以查看命令所在的目录,实际上命令就是一项可执行文件。

一般操作系统,包括 Linux,指的是内核(kernel)和外壳程序。以 Windows 为例,Windows 的外壳就是Windows 的图形界面,而 Linux 的外壳即 shell,内核就是 Linux内核。

如果直接让用户与操作系统内核沟通,那么用户就必须熟悉操作系统,这样学习成本太高也不安全。所以 Linux 设立 shell 作为媒介中间人给操作系统传达用户的指令。

shell 的定义就是命令行解释器,用于将使用者的命令翻译给操作系统核心处理,再将核心的处理结果翻译给用户。

对比 Windows,我们也不是直接和内核沟通,而是通过图形界面完成点击等一系列动作去操作系统。

如果说 shell 是命令行解释器是所有外壳程序的统称,bash 就是 Linux 下的具体一款命令行解释器,bash 是最常用的一种 shell,是 Linux 下默认的 shell。

如果将 shell 比喻成程序员是一种职业,bash 就是在座的你我一个具体的人。

1. 权限的定义

Linux 中默认存在两类用户,一类叫 root 即超级管理员,具有非常高的权限,其他都是普通用户,具有一般权限。可以使用su进行用户切换:

$ su - # 切换成root
Password:
Last failed login: Fri Jan 28 03:23:06 CST 2022 on pts/0

root用户的权限非常高,所以两类用户的权限界限必须明确。

在系统管理中,权限是指 特定的用户 是否对 特定的资源 具有 特定的权力

不是VIP就不能看会员电影,不是职员就不能进入办公室,权限是针对某个事物的一项特定的属性来划分不同的人具有不同的权限。

通常,针对某个特定资源分配给用户不同的权限,系统则自动地强制执行这些权限。对于文件这项系统资源来说,人就对应着文件访问者,事物属性对应着文件类型及访问权限。

1.1 文件访问者

文件访问者分为三种:拥有者(owner),所属组(group),其他人(others)。

角色 解释
拥有者 即创建文件的用户,这不难理解
所属组 拥有者所在的组,如果文件访问者之分拥有者和其他人的话,不便于多用户协作
其他人 除了拥有者和所属组之外的都是其他人

上图用红框框出的第一列是文件的拥有者,第二列是所属组。由于用户较少所以自成一组。

拥有者、所属组和其他,都是针对文件访问划分出的角色,而 root 和普通用户指的是具体的用户人。

后面一列是文件的大小,再后面一列是文件的最近修改时间。

2. 权限的设计

2.2 文件类型和访问权限

可以清晰地看出,前面的一整块共有10列,共分成4组,第一列自成一组,之后每三列成一组,分别是红、绿、蓝、黄。

文件属性的第一列,用以区分文件类型,一般有两种:-代表普通文件,d代表目录。Linux 中不以文件后缀作为区分文件的方式,只以属性的第一列区分。

c代表字符设备文件,b块设备文件,p管道文件,l链接文件。这些目前仅作了解。

2.3 权限的表示

文件属性的剩下九列,三列一组总共三组,分别代表的是文件拥有者、所属组和其他人对文件的权限。

文件自身具有的权限属性分为三种,读r,写w,执行x

字符表示法

字符表示法就是上图中对应的表示方式。

  • 第一组,代表拥有者对该文件的权限。三列分别代表读r、写w、执行x,具有权限就用字符表示,不具有则用-表示。顺序不能乱。
  • 以此类推,后面两组分别是所属组和其他人的权限,表示方法相同。
表示 说明 表示 说明
r-- 只读 -w- 只写
--x 执行 rw- 可读可写
r-x 可读可执行 -wx 可写可执行
rwx 可读可写可执行 --- 无任何权限

8进制表示法

既然每一个权限位所表示的状态只有两种,要么具有要么不具有,这样就可以用二进制表示(具有用1表示,不具有用0表示)。转化成八进制就是从0到7共八个数字,所以用八进制也可以表示。

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

上述两种表示方法,都会在之后的权限设置的命令中使用到。

3. 权限的设置

修改文件的权限分为两种,一是修改文件的读写执行属性,二是修改文件的拥有者和所属组。先看第一种:

3.1 chmod

$ chmod u+r fileName

chmod可以针对三种访问者修改文件的读写执行权限。具体如下:

# u表示拥有者user
$ chmod u+r file.txt # 给拥有者添加读权限
$ chmod g-w file.txt # 给所属组取消写权限
$ chmod o-x file.txt # 给其他人取消执行权限

u,g,o分别表示三种访问者,+,-分别表示添加和取消,r,w,x分别表示读写执行。之后再带上文件名即可。

$ chmod u+r file.txt     # 修改单个访问者的单个权限
$ chmod u-r+wx file.txt  # 修改单个访问者的多个权限
$ chmod u+r,g-x file.txt # 修改多个访问者的多个权限
$ chmod u-r file.txt test.c # 连续操作多个文件

3.2 chown & chgrp

chown 可用于修改文件的拥有者,chgrp 则是用于修改文件的所属组。

$ chown usrname fileName
$ chgrp usrname fileName
$ chown root file.txt
chown: changing ownership of ‘file.txt’: Operation not permitted
# 可以看出,文件是不能随便更改所有者给别的用户的,即使是文件所有者也不行
$ chgrp root file.txt
-rwxrwx--- 1 yyx  root   20 Jan 29 07:15 file.txt
# 可以将文件所属组设置为成员,达到让其查看管理的目的
$ sudo chown root:root file.txt
# 这样可以将文件的拥有者和所属组一起修改

3.3 目录的权限

目录的读写执行分别又代表什么意义呢?与普通文件有什么不同呢?

d-wx------ 2 yyx yyx 4096 Jan 29 08:06 code
$ ls code # 不具备读权限,无法查看目录下内容
ls: cannot open directory code: Permission denieddr-x------ 2 yyx yyx 4096 Jan 29 08:06 code
$ touch code/file.txt # 不具备写权限,无法创建或删除文件
touch: cannot touch ‘code/file.txt’: Permission denieddrw------- 2 yyx yyx 4096 Jan 29 08:06 code
$ cd code # 不具备执行权限,无法进入目录
-bash: cd: code: Permission denied
权限 解释
r读权限 能够查看目录下的内容
w写权限 能够下目录下创建或删除文件
x执行权限 能够进入目录

粘滞位

一般目录对于other用户是不具有写权限的,也就意味着other用户无法在他人的目录下创建或删除文件。

如果我们要建立一个共享目录,让所有人都可以往里面放东西,就要对这个共享目录给所有人加上写权限,就会带来这样的安全问题:

根据目录的权限规定,只要用户对目录具有写入权限,该用户就能删除目录下的任意文件。

如果不想让非目录所有者用户具有删除目录下文件的权限,针对这种需求,Linux 下可以使用粘滞位解决。

$ chmod o+t dirName

注意,粘滞位是对目录进行修改的,对目录下的所有文件生效。

t相当于权限缩小版的w,致使 other 无法删除其他用户的文件。

所以当一个目录被设置为粘滞位时,则该目录下的文件只能由目录所有者,文件的所有者,三者可以删除。

3.4 默认权限的设置

上图分别是 root 和 普通用户 创建的目录和普通文件的默认权限,稍加分析可得:

  • 普通用户所创的普通文件和目录都只限制了 other 的写入权限,普通文件本身不具有执行权限。
  • root 在此基础上还限制了所属组的写入权限。

普通用户的普通文件权限可表示为0664,目录可表示为0775。下面将介绍为什么默认权限会是这个样子。

文件掩码 umask

实际上,文件或目录在其新建之初的默认权限(起始权限)用八进制数位表示分别为0666和0777。起始权限还要受到权限掩码 umask 的影响,才会变成默认权限值。

换句话说,文件的默认权限是可以更改的,更改文件掩码 umask 的值即可。umask 可以这样设置和查看:

$ umask # 查看
0002
$ umask 0002 # 设置

将起始权限值“减去”文件掩码值后,所得结果就是文件生成的默认权限值。“减去”掩码的操作是这样的:将文件权限值都用二进制表示,起始权限值和文件掩码值每位一一对应,倘若文件掩码的某个数位为1,那么该位的结果必须为0。

  110 110 110   # 起始权限
- 000 000 010   # 文件掩码
----------------110 110 100   # 默认权限111 111 111   # 起始权限
- 000 000 010   # 文件掩码
----------------111 111 101   # 默认权限

这样的“减法”运算,就可以将文件掩码取反后再和起始权限相与即可,即mask&(~mask)。本质也就是过滤掉文件掩码中的1。

Linux系统:权限管理相关推荐

  1. 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)

    权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可 ...

  2. centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课...

    centos linux 系统日常管理4  scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法  第十七节课 rsync可以增量同步,scp不行 ...

  3. 系统权限管理设计 (转)

    权限设计(初稿)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑 ...

  4. linux文件权限管理实验心得,Linux+文件权限管理实验

    主机安全-- Linux文件权限管理实验 对于文件 /etc/passwd,该文件的属组(root)可读.不可写,不可执行 对于文件 /etc/shadow,该文件的属组(root)不可读.不可写,不 ...

  5. linux ipa 权限管理,FreeIPA管理本地用户

    介绍 FreeIPA可以快速.便捷的将linux系统接入,进行统一的身份认证和权限管理. FreeIPA 是Linux的开源安全解决方案,提供帐户管理和集中身份验证,类似于Microsoft的Acti ...

  6. 南邮 | Linux实验一:Linux 基本命令 权限管理

    掌握Linux/bash环境下命令的使用. 掌握Linux用户权限管理. 一:观察系统的结构和文件属性 以超级用户身份登录系统(用户名root) $ pwd //观察用户主目录 $ cd / //退至 ...

  7. 运维基本功(七): Linux的权限管理操作

    本文是在课程课件基础上修改的学习笔记 课程原地址:https://www.bilibili.com/video/BV1nW411L7xm 如有侵删 运维基本功(一):Linux系统安装 运维基本功(二 ...

  8. linux权限命令chgrp,Linux 基础——权限管理命令chown、chgrp

    一.chown命令与chgrp命令的作用 有时你需要改变文件或目录的属主,比如有人离职或开发人员创建了一个在测试或生产环境中需要归属在系统账户下的应用.Linux提供了两个命令来实现这个功能:chow ...

  9. linux系统日常管理

    第十五章 linux系统日常管理 笔者在前面介绍的内容都为linux系统基础类的,如果你现在把前面的内容全部很好的掌握了,那最好了.不过笔者要说的是,即使你完全掌握了,你现在还是不能作为一名合格的li ...

  10. 麒麟Linux强制修改只读文件,麒麟Linux系统文件权限管理和归属(12页)-原创力文档...

    中标麒麟Linux服务器操作系统培训系列 麒麟Linux系统文件权限管理和归属 技术创新,变革未来 本章目标 •了解中标麒麟Linux服务器操作系统文件类型.权 限的概念 •掌握文件权限和属主的设置方 ...

最新文章

  1. 两个整数相加减是否溢出
  2. 安徽工程大学计算机控制,(完整版)安徽工程大学期末考试《计算机控制技术》范围总结2 .pdf...
  3. 拨盘Demo大赛,获奖公布-20170710
  4. $_server['php_self'] 漏洞,Discuz! $_SERVER['PHP_SELF'] XSS Vulnerability
  5. python cnn 实例_基于CNN的纹理合成实践【附python实现】
  6. android底部弹出显示不全,Android 解决 NestedScrollView 底部内容被遮挡显示不全
  7. LAMP 3.2 mysql登陆
  8. 计算机考研英语一和英语二的区别,2018考研英语一与英语二翻译有什么区别?怎么提高?...
  9. 读取GY-951模块数据(Linux)
  10. 第七章 Git操作 7.1利用gitee提交代码
  11. 高等数学学习笔记——第九十五讲——函数的幂级数展开
  12. 2021年中国茶叶电商发展现状及未来发展趋势分析[图]
  13. python-scikit-learn基础
  14. 计算机网络-实验四:配置网络路由
  15. Python之Excel编辑-[小试牛刀]表格插入列
  16. 我主修计算机科学英文,计算机科学,computer science英语短句,例句大全
  17. VMware ESXi启动卡在 vmkibft loaded successfully
  18. Qt之QML虚拟键盘
  19. 2004年7月15日
  20. 【魔改练习题】五只小猪称体重

热门文章

  1. DELPHI定义的条件编译的全部说明
  2. 使用Auto.js完成一键自动登录武汉理工大学鉴湖宿舍校园网(安卓手机端)
  3. 59、Docker ElasticSearch安装拼音分词器及自定义分词器
  4. Asp.Net Ajax Control Toolkit 服务器端控件
  5. 『Winform』C# Winform WebBrowser控件中操作网页元素大全
  6. arcsde service(esri_sde)服务启动后又停止
  7. Java架构II_C1 软件架构设计导论_4 基于架构的软件开发(ABSD)
  8. 北大青鸟教员工资_成为代码学校教员需要什么
  9. vue 调后台接口实现导出excel表格功能
  10. 阿里云HBase Ganos上线 助力时空大数据应用