• Linux权限管理(用户+文件)



    Linux权限的概念

    Linux下有两种用户:

    1. 超级用户(#)
    2. 普通用户($)
    • 超级用户可以在Linux系统下做任何事情,没有限制
    • 普通用户:在Linux下只能做有限事情

    用户切换
    语法:su [用户名]

    从普通用户切换到root用户直接输入 su 命令(root 可以省略),再输入密码就好了

    在这里插入图片描述

    从root用户切换到普通用户,输入命令 su 用户名

    在这里插入图片描述

    sudo命令

    语法:sudo [想要提升权限的命令]
    功能:如果我们单纯想提升当前命令的权限,可以给指令带上sudo

    比如我们作为一个普通用户要修改另外一个普通用户的密码(肯定是修改不了的)

    在这里插入图片描述

    (1)在root用户下,打开 /etc下的 sudoers文件

    在这里插入图片描述

    (2)在文件中找到 %wheel这一行,在当前行下面添加要提升当前命令权限的用户名

    在这里插入图片描述
    (3)添加成功后保存突出,那么当前用户就可以使用 sudo命令提升当前指令权限了
    在这里插入图片描述
    测试sodo

    通过dudo命令修改其它用户的密码
    注意:sudo命令每隔一段时间都需要输入当前用户的密码才能执行
    在这里插入图片描述

    Linux权限管理

    文件拓展名

    我们都知道,Windows是依赖文件的拓展名来区分文件的,比如 “.txt是文本文件”,“.exe是可执行文件”,但Linux不是通过拓展名来区分文件类型的,Linux的拓展名只是为了更好的区分文件类型

    常见的系统文件目录

    • /bin/:存放系统命令,普通用户和root都可以执行(比如 ls、pwd)
    • /boot/:系统启动目录,保存与系统启动相关的文件,入内核文件和启动引导程序
    • /dev:设备文件保存位置
    • /etc/:配置文件保存位置,系统内所有采用默认安装方式(rpm安装)的服务配置文件全部保存在此目录中,比如用户信息、服务的启动脚本、常用服务的配置文件等
    • /home/:存放普通用户的根目录(每个用户都有一个根目录)
    • /lib/:系统调用的函数库保存位置
    • /media/:挂载目录。系统用来挂载媒体设备,如软盘和光盘
    • mnt:挂载目录,早期的Linux中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如U盘、移动硬盘和其它操作系统分区
    • misc:挂载目录,系统建议采用来挂载NFS服务的共享目录,虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的
    • opt第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中,不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件
    • /root/:root的主目录,普通用户主目录在/home/下,root主目录直接在 “/” 下
    • sbin:保存系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看
    • srv:服务数据目录,一些系统服务启动后,可以在这个目录中保存所需要的数据
    • /tmp:临时目录,系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。这个目录不建议保存重要数据,最后定期清楚tmp目录的数据
    • lost+found/:当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录
    • proc:虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表的,/proc/net 是保存网络协议信息的
    • sys:虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息

    文件访问者的分类(人)

    对对Linux的用户权限分类,可以分为三类

    1. 文件拥有者(就是创建文件的人)
    2. 文件所属组(文件属于哪个组)
    3. 其它人(other)(不是文件拥有者也不属于文件所属组的人)

    解释:
    对于一个用户,无论是root还是普通用户都能充当 拥有者和所属组或者是其它

    文件所属组就是文件属于哪个组,每个文件在创建时默认都是属于创建人的那个小组。

    举个列子
    比如一台Linux服务器上有两个组,A组不想让B组的人看见A组的代码或文件,就可以通过文件所属组的权限来让自己小组的人能看见,让组外的其它人开不见。
    这样的分组,可以灵活分配让大家的团队意识更强,如果没有所属组这个分类的话就会非常乱。
    所以所属组就是为了更灵活的进行权限配置,满足团队协作

    在这里插入图片描述
    通过查看文件详细信息可以看到,文件所属组和文件拥有者

    在这里插入图片描述

    文件类型和权限

    在这里插入图片描述

    常见的文件类型主要是普通文件和目录

    • -:普通文件(文本、可执行程序、库)
    • d:目录
    • c:字符文件、显示器、键盘
    • p:管道文件
    • l:链接文件(类似Windows快捷方式)
    • s:套接口文件
    • b:块设备文件(比如硬盘)

    在这里插入图片描述

    在Linux当中文件类型是和拓展名没有关系的
    文件信息的前一段由10个字符组成,分别表示不同的意思

    第一个字符:文件类型
    后续9个三个为一组,分别表示你
    文件所属者权限
    文件所属组权限
    其它人的权限

    在这里插入图片描述

    文件权限表示

    权限属性

    • r:读取
    • w:写入
    • x:可执行
    • -:无权限

    (1)字符表示法

    符号表示权限
    r - -只读权限
    - w -只写权限
    - - x仅可执行权限
    r w -可读可写权限
    - w x可写可执行权限
    r - x可读可执行权限
    r w x可读可写可执行权限

    (2)八进制表示法

    假如把三个权限位看成三个比特位,1代表有权限0代表没有权限,那么三个比特位最大能表示的数字是7,刚好够表示所有情况。
    比如:1 1 1 表示可读可写可执行,1 0 0 表示只有读权限,0 0 0 表示没有任何权限

    在这里插入图片描述
    如果用8进制表示这三个比特位就刚好表示从0到7的所有情况

    符号表示二进制表示八进制表示权限
    - - -0 0 00无任何权限
    - - x0 0 11仅可执行权限
    - w -0 1 02只写权限
    - w x0 1 13可写可执行权限
    r - -1 0 04只读权限
    r - x1 0 15可读可执行权限
    r w -1 1 06可读可写权限
    r w x1 1 17可读可写可执行权限

    设置文件权限

    chmod命令

    功能:设置文件的访问权限
    语法:chmod [参数] [权限] [文件名]
    注意:只有文件的拥有者和root才可以修改文件的权限
    选项可以用字符也可以用3位8进制

    用户表示符+、-、=

    • +:向权限范围增加权限代号所表示的权限
    • -:向权限范围取消权限代号所表示的权限
    • =:向权限范围赋予权限代号所表示的权限

    用户符号

    • u:文件拥有者
    • g:拥有者同组用户
    • o:其它用户
    • a:所有用户

    字符选项示例

    取消文件所属者的读取和写入权限

    在这里插入图片描述
    取消用户所属组的所有权限
    在这里插入图片描述
    给其他用户添加写权限
    在这里插入图片描述
    取消所有用户的写权限

    在这里插入图片描述
    如果要同时设置不同的用户权限可以用 逗号隔开

    在这里插入图片描述
    =示例
    可以直接用 =给对应用户赋予对应的权限

    在这里插入图片描述

    八进制选项示例

    符号表示二进制表示八进制表示权限
    - - -0 0 00无任何权限
    - - x0 0 11仅可执行权限
    - w -0 1 02只写权限
    - w x0 1 13可写可执行权限
    r - -1 0 04只读权限
    r - x1 0 15可读可执行权限
    r w -1 1 06可读可写权限
    r w x1 1 17可读可写可执行权限

    在这里插入图片描述
    -R 递归修改权限

    -R递归修改文件权限
    在这里插入图片描述

    设置文件拥有者(chown)

    语法:chown [参数] [用户名] [文件名]
    功能:修改文件拥有者
    常用选项:-R递归修改文件拥有者

    注意:修改文件拥有者需要root用户,或者用sudo命令提升权限

    在这里插入图片描述
    使用sudo命令提升权限

    sudo命令使用教程

    在这里插入图片描述

    设置文件所属组(chgrp命令)

    语法:chgrp [参数] [要修改新用户组名]
    功能:修改文件所属组
    常用选项:-R递归修改文件或者目录的所属组

    注意:chgrp也需要 sudo命令提升权限
    在这里插入图片描述

    同时修改文件所属者和所属组

    语法:sudo chown [用户名]:[用户名] [文件名]

    在这里插入图片描述

    umask命令

    语法:umask
    功能:查看或修改文件掩码
    为什么创建的普通文件,或者对应都有一个默认权限,默认权限为何又是当前的样子?

    • 新建的文件默认权限是 0666
    • 新建的目录默认权限是 0777
      这两默认的权限位只要关注后面三位即可,文件权限上面讲了使用八进制位标识

    我们发现文件和目录的默认权限,和我们创建出来的文件和目录和默认权限不一样。
    这是为什么呢?

    在这里插入图片描述

    其实真正的权限位是通过计算得来的
    计算方法为,先将umask按位取反再按位与上默认的文件或者目录权限值
    (~umask)&[文件或者目录的权限值]

    在这里插入图片描述

    如果我们将文件掩码修改成 777
    那么默认的文件权限就是 不可读、不可写也不可执行

    在这里插入图片描述
    就可以理解为凡是在 umask中出现的权限位,都不应该在 最终 权限位中出现
    最终权限 = 默认权限&(~umask)
    在这里插入图片描述

    目录权限

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

    那么问题来了。
    文件权限只有读写和可执行,并没有删除权限,那么就是说只要某个用户只要有写目录的权限,用户就可以删除目录中的文件,而不用管这个用户是否有这个文件的写权限

    我们发现hhy 用户也可以删除root用户的文件
    在这里插入图片描述

    粘滞位

    注意:粘滞位一般用于公开的目录上,也就是其它用户有权,读写执行
    语法:chmod +t [目录名]
    只要给目录加上粘滞位,其它用户就无法删除你的文件了

    注意:如果这个目录本身就是你自己的那么你想怎么删就怎么删,加粘滞位也没用

    在这里插入图片描述

    在这里插入图片描述

    用户和用户组管理

    针对不同用户分配不同的权限,不同权限可以限制用户可以访问到的
    系统资源
    可以提高系统的安全性
    帮助系统管理员对使用系统的用户进行跟踪

    用户组的管理包括用户组的添加、删除和修改

    常用文件信息

    • /etc/passwd :用户配置文件,存储用户的基本信息
    • /etc/group:存储用户组的信息
    • /etc/shadow:存储用户的密码信息

    用户组管理

    用组添加(groupadd )

    语法:groupadd [参数 选项值] [用户组名]
    作用:添加用户组
    常用选项:

    • -g:设置用户组id数字,如果不指定,则默认从1000之后递增(0~999都是系统的id)

    用户组的信息文件 /etc/group

    用户名 : 密码(占位符):用户组id:这个组所包含的用户(附属组)
    注意:附属组只显示其它用户设置当前组为附属组才会显示,如果当前用户的主组就是自己则不会显示
    比如 hhy就不会出现在自己的附属组里

    在这里插入图片描述

    用户组修改(groupmod )

    语法:groupmod [选项 选项值] 用户组名
    常用选项:

    • -g :gid 缩写,设置一个自定义的用户组id数字
    • -n:name的缩写,设置新的用户组的名称

    示例:修改 test用户组,将组id改为1100,组名改为 my_test

    在这里插入图片描述
    在这里插入图片描述

    用户组删除

    语法:groupdel [用户组名]
    注意:如果该用户组是某个用户的主组则无法删除
    在这里插入图片描述

    用户

    添加用户

    语法:useradd [用户名]
    常用选项:

    • -g:表示指定用户的用户主(主要)组,选项可以是用户组id也可以是组名
    • -G:表示 指定用户的用附加组,选项可以是用户组名,也可以是用户组id
    • -s:指定用户登录后所使用的shell解释器,默认/bin/bash,不过不想让这个用户登录只想让其提供软件服务,可以设置为/sbin/nologin

    删除用户

    语法:userdel [用户名]

    查看用户信息

    语法:id []用户名

    在这里插入图片描述

    修改用户

    语法:usermod [选项 选项的值] [用户名]
    常用选项

    • -g:修改指定的用户组,选项的值可以是用户组的id,也可以是组名
    • -G:表示指定用户的用户附加组,选项的值可以是用户组的ID,也
      可以是组名
    • -u:uid,用户的id(用户的标识符),系统默认会从500 之后按顺
      序分配uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾
      讯QQ 的自选靓号情况】
    • -L:锁定用户(锁定后无法登录系统)
    • -U:解锁用户

  • 相关阅读:
    码住这些视频配音软件,一键完成配音
    【校招VIP】产品基础知识之学习渠道
    【易错小点记录】坑人的for循环与逻辑或
    docker容器
    generic timer
    钉钉添加自定义机器人,实现每周定时@某人
    Java核心技术卷Ⅰ-第四章对象和类
    Python数据可视化-----制作全球地震散点图
    软件型企业必备的“爆款资质”,千万不要错过!投标加分项!
    SQLSmith: Databend 如何利用随机化测试检测 Bug
  • 原文地址:https://blog.csdn.net/weixin_53946852/article/details/125412907