Linux 用户管理与文件权限

2023-11-09

在这里插入图片描述

Linux 是一个多用户系统,它允许多个用户同时登陆主机,并为他们分配不同的资源和工作环境进行使用。当然,不同的用户都有文件的私有需求,所以设置不同用户文件的权限管理十分重要。

01 用户与用户组


Linux 中一般将文件访问权限的身份分为三种角色:文件所有者、用户组成员、其他人(owner/group/others)

1.1 用户身份

1.1.1 文件所有者 owner

文件所有者角色是 Linux 系统保护用户私有空间的重要方式。

当多个用户同时登录主机时,文件所有者对文件具有绝对访问权限并可以限制其他用户对该文件的访问权限,其他用户如需访问该文件,需要文件所有者授权才可访问。

1.1.2 用户组成员 group

用户组成员角色是为了方便用户在局部范围内共享文件内容。

例如,在团队开发中,如果 Linux 系统仅提供 owner 和 others 角色,那么当文件所有者想给其他团队成员开放文件访问权限时,就会出现文件直接对团队之外角色公开的情况。

将文件所有者之外的用户角色区分为用户组成员 group 和其他人 others,可以在向与文件所有者划分在一个用户组的用户组成员开放文件访问权限的同时,对其他用户保持私用。

1.1.3 其他人 others

其他人角色是用户公开文件访问权限的方式。

文件所有者可以通过向 others 角色开放文件访问权限,向与文件所有者没有任何联系的其他用户共享文件。

当然,除了 owner/group/others 三种用户之外,还有掌控一切的系统用户 root,root 用户可以访问主机中的一切文件。root 用户所在的用户组称为 root组,处于 root 组的普通用户,能够通过 sudo 命令获取 root 权限。

1.2 用户管理

1.2.1 用户管理相关文件

在 Linux 系统中,默认情况下,系统上所有的用户账号通过用户 ID (User ID ,简称 UID)、一个是用户组 ID (Group ID ,简称 GID)标识,并都记录在 /etc/passwd 这个文件内的,对应的密码则是记录在 /etc/shadow 文件下。 此外,Linux 所有的用户组信息和密码都纪录在 /etc/group/etc/gshadow 内。

这些文件中,每一行表示一条记录,每条记录中个属性字段通过冒号:分隔。

(1) /etc/passwd

该文件管理用户 UID 和 GID 等重要参数。

每一行都代表一个用户账号,其中包括一些系统正常运行所必须的系统账号,例如 bin, daemon, adm, nobody 等。

在这里插入图片描述

冒号:分隔开的 7 个字段含义是:

  • 账号名称:用户账号的 username

  • 口令:即账号密码,但是现在的账号密码都保持在 /etc/shadow 文件中了,此处使用 x 符号占位

  • UID:用户标识符 User ID,root 用户的 UID 是 0

  • GID:用户组标识符 Group ID

  • 用户账号描述:没实际含义

  • 用户目录:用户空间

  • shell:用户登录系统后与主机进行交互的命令行工具,默认是 /bin/bash

(2) /etc/shadow

该文件管理用户的登录口令。

冒号:分隔开的 9 个字段含义是:

  • 账号名称:用户账号的 username

  • 口令:经过编码加密的账号密码

  • 最近更动口令的日期

  • 口令不可被更动的天数

  • 口令需要重新变更的天数

  • 口令需要变更期限前的警告天数

  • 口令过期后的账号宽限时间

  • 账号失效日期

(3) /etc/group

该文件管理用户组信息,与 /etc/passwd 中的 GID 对应。

每一行代表一个群组,冒号:分隔开的 7 个字段含义是:

  • 用户组名称

  • 用户组口令:一般不需配置,用不到

  • GID:用户组标识符 Group ID

  • 用户组包含的用户名称:一个账号可以加入多个群组,那某个账号想要加入此群组时,将该账号填入这个字段即可。

(4) /etc/gshadow

用户组口令都不咋用,这个文件的存在感也比较弱…

1.2.2 用户管理相关命令

Linux 提供了一组用户账号和用户组管理命令对账号进行新增、 移除与更改

(1) 用户管理命令

  • useradd:新建用户

    useradd [options] [username]
    
  • passwd:设置或修改用户的口令和口令属性

    passwd [options] [username]
    
  • usermod:user modify 修改用户的属性

    usermod [options] [username]
    
  • userdel:user delete 删除指定用户账号

    userdel [options] [username]
    
  • su:切换用户身份;exit 退出超级用户

    su [options] [username]
    

(2) 用户组管理命令

  • groupadd:添加用户组

    groupadd [options] [groupname]
    
  • groupmod:修改用户组属性

    groupmod [options] [groupname]
    
  • groupdel:删除指定用户组

    groupdel [options] [groupname]
    

02 文件权限


Linux 系统中文件有第一节中的三种访问角色 owner/group/others,对于文件这三种身份还各有 read/write/execute 三种访问权限。通过这三种角色和访问权限控制可以到来 Linux 系统的如下优势:

  • 系统保护:关于系统服务的文件通常只有 root 角色能访问,可以有效保护系统中的重要文件。

  • 团队开发文件共享:通过设置用户组权限,让团队成员能够共享指定目录下的文件数据。

2.1 文件属性

在 Linux 系统中进入任意目录,然后使用 ls 命令查看当前目录下文件的文件名与相关属性,也可以增加选项参数 ls -la 显示所有的文件详细的权限与属性。

在这里插入图片描述

如上图所示,list 命令显示的内容中每一行即是一个文件的相关属性,每一条记录的 7 个字段含义如下(图片来源网络,如有侵权请告知):

在这里插入图片描述

(1) 文件类型与权限

文件类型与权限由 10 个字符构成(图片来源网络,如有侵权请告知):

在这里插入图片描述

第一个字符代表该文件的类型:

  • [ d ] 表示目录

  • [ - ] 表示文件

  • [ l ] 表示链接

  • [ b ] 表示装置文件里面的可供储存的接口设备,即可随机存取装置

  • [ c ] 表示装置文件里面的串行端口设备,例如键盘、鼠标等一次性读取装置

剩下的 9 个字符,三个为一组分别表示 owner/group/others 三种角色的 read/write/execute 三种访问权限

(2) 文件链接数

Linux 文件系统 Ext2 使用的是以 inode 为基础的文件系统,inode 的内容在记录文件的权限与相关属性,block 区块中才是记录文件实际内容的位置。

文件属性的这个字段就是记录的有多少不同的文件连结到相同的一个 inode 号码

(3) 文件所有者

表示文件或目录的所有者名称

(4)所属用户组

表示文件或目录所属用户组的名称

(5) 文件大小

表示文件的容量大小,默认单位为字节 bytes

(6) 时间戳

记录文件的创建日期或者是最近的修改日期。

记录的时间一般为 月/日/时间 的形式,如果这个文件被修改的时间跨度过大,那么时间部分会仅显示年份。

(7) 文件名称

文件的名称,如果文件名以.开头则说明他是隐藏文件

2.2 文件属性修改命令

文件属性的修改命令分别针对文件所有者和所属用户组有 chown, chgrp,文件权限修改命名则是 chmod

  • chown :改变文件拥有者

  • chgrp :改变文件所属群组

  • chmod :改变文件的权限

(1) chown

文件在创建的时候就指定了文件所有者,当将文件复制或移动到其他用户目录下时,就需要变更文件的所有者了,因为复制操作会根据执行命令的用户确定拷贝的文件文件所有者。

chown [options] [owner] [filename/directory]

使用该命令修改目录时,可以通过添加 -R 选项进行递归的持续变更,即连同次目录下的所有文件都变更文件所有者。

chown -R [owner] [irectory]

chown 目录还可以顺带修改用户组,使用冒号连接 用户:用户组 同时修改文件所有者和所属用户组。

chown [options] [owner:group] [filename/directory]
(2) chgrp

仅修改文件所属的用户组可以使用 chgrp 命令实现,当然修改时要确保用户组是存在的。

chgrp [options] [group] [filename/directory]

如果要修改目录下所有文件的所属用户组,同样的使用 -R 参数进行递归的持续变更。

chgrp -R [group] [directory]
(3) chmod

修改文件权限的命令则是 chmod,该命令可以通过数字类型和符号类型两种形式设定文件权限。

数字类型:

Linux 系统中 read/write/execute 三种访问权限分别对应的数字分数是:read(4), write(2), execute(1)

每个用户角色的权限可以用三种访问权限的数字分数累加结果表示,例如文件权限-rwxr-x---的数字分数表示是 750

owner = rwx = 4+2+1 = 7
group = r-x = 4+0+1 = 5
others= --- = 0+0+0 = 0

使用数字类型的 chmod 权限修改命令形式为:

chmod [options] [number] [filename/directory]
# example:
chmod -R 770 /data/share

符号类型:

另一种修改文件权限的方式就是使用符号类型,owner/group/others 三种角色对应的符号表示是:owner(u), group(g), others(o),还有同时表示三种角色的符号:all(a)。read/write/execute 三种访问权限的符号表示是:read(r), write(w), execute(x)

基于用户角色和文件权限的符号表示,使用符号 +, -, = 为不同的用户角色添加、除去和设定不同的文件权限:

命令 角色 操作 权限 对象
chmod u/g/o/a +/-/= r/w/x 文件或目录

例如,要使用 chmod 命令设置文件所有者权限为可读、可写、可执行,所属用户组和其他用户具有可读与执行的权限,即-rwxr-xr-x

chmod u=rwx,go=rx fliename

如果又要除去其他用户的可读与执行的权限是,即-rwxr-x--

chmod o-rx fliename

03 命令与文件权限


3.1 权限的意义

权限对于文件的意义:

  • r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;

  • w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);

  • x (execute):该文件具有可以被系统执行的权限。

权限对于目录的意义:

  • r (read contents in directory):表示具有读取目录结构列表的权限,即表示可以查询该目录下的文件名数据(ls 命令查看目录信息)。

  • w (modify contents of directory):表示具有向目录写入内容的权限,即可以修改目录的结构列表。例如,创建新的文件或目录、删除文件或目录、修改文件或目录的名称、移动文件或目录到其他位置等。

  • x (access directory):表示用户具有进入该目录成为工作目录的权限(cd 命令进入到目录中)。

3.2 权限的作用

文件权限限制了用户对文件或目录进行读取/创建/删除/修改等操作,我们进一步理解这操作命令是怎么和文件和目录权限对应起来的。

切换工作目录:

  • 可使用的命令:例如 cd 等变换工作目录的命令;

  • 目录所需权限:用户需要对该目录具有可执行权限 (x);如果还需要查阅目录结构信息,用户还需要可读权限(r)。

读取文件内容:

  • 可使用的命令:例如 cat,more,less,head,tail 等查阅命令

  • 目录所需权限:用户需要对工作目录(当前目录)具有可执行权限 (x);

  • 文件所需权限:用户需要对该文件具有可读权限(r);

修改文件内容:

  • 可使用的命令:例如 echo+重定向符号,vim 等文件修改命令

  • 目录所需权限:用户需要对工作目录(当前目录)具有可执行权限 (x);

  • 文件所需权限:用户需要对该文件具有可读、可写权限(r,w);

新建文件/目录:

  • 可使用的命令:例如 touch,mkdir 等文件或目录创建命令

  • 目录所需权限:用户需要对工作目录(当前目录)具有可执行权限 (x) 进入到该目录,还需要对工作目录具有可写权限 (w) 修改目录结构新建文件

运行可执行文件:

  • 可使用的命令:例如 ./,bash 等文件执行命令

  • 目录所需权限:用户需要对工作目录(当前目录)具有可执行权限 (x);

  • 文件所需权限:用户需要对该文件具有具有可执行权限 (x);


如果文章对你有帮助,欢迎一键三连

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 用户管理与文件权限 的相关文章

  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 如何禁用 GNOME 桌面屏幕锁定? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何阻止 GNOME 桌面在几分钟空闲时间后锁定屏幕 我已经尝试过官方手册了在红帽 https access redhat com doc
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • 如何将目录及其子目录中的所有 PDF 文件复制到一个位置?

    如何全部复制PDF文件从目录及其子目录到单个目录 实际上还有更多的文件 并且深度有些任意 假设四个目录的最大深度是公平的 我想这些文件需要重命名 如果a pdf例如 位于多个目录中 因为我会adding https ebooks stack
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR

随机推荐

  • ffmpeg推流命令

    ffmpeg re i xxx mp4 vcodec copy acodec copy f flv y rtmpurl re 按照帧率发送 如果不加 手册里说的是发送as fast as possible i 输入 vcodec copy
  • 100天精通Python(进阶篇)——第42天:pdfplumber读取pdf(基础+代码实战写入Excel)

    文章目录 一 Python操作PDF 13大库对比 二 pdfplumber模块 1 安装 2 加载PDF 3 pdfplumber PDF类 4 pdfplumber Page类 三 实战操作 1 提取单个PDF全部页数 2 批量提取多个
  • LeetCode:217(Python)—— 存在重复元素(简单)

    存在重复元素 概述 给你一个整数数组 nums 如果任一值在数组中出现 至少两次 返回 true 如果数组中每个元素互不相同 返回 false 输入 nums 1 2 3 1 输出 true 输入 nums 1 2 3 4 输出 false
  • JS面试题

    1 es6新特性 let和const关键字 箭头函数 多行字符串 解构赋值 Promises let声明变量和const声明常量 变量不能重复声明 都是块级作用域 不存在变量提升 箭头函数 es6提供了简洁的箭头函数语法 可以更简单的定义函
  • python与爬虫的关系_python为什么叫爬虫?有什么关系?

    今天 小编听到有人问 Python为什么叫爬虫 我想很多人对于这个问题都很好奇 甚至对于Python和爬虫的概念模糊 今天小编通过这篇文章为大家详细解答一下 Python与爬虫有什么关系 爬虫一般是指网络资源的抓取 因为Python的脚本特
  • 误删li64.so.6,如何恢复

    遇到下面这种情况 误删li64 so 6还原方案 第一步 先关掉虚拟机 右键找到电源后选择打开电源时进入固件 进入Boot界面 第二步 使用shift 将光盘启动优先 然后切至exit保存退出 第三步 来到重启界面后 选择Troublesh
  • 微信小程序的五种传值方式

    1 使用全局变量传递数据 利用app js 中的 globalData 将数据存储为全局变量 在需要使用的页面通过getApp globalData获取数据 app js App globalData data name demo 使用组件
  • < Linux >:Linux 进程概念 (4)

    目录 五 孤儿进程 六 进程优先级 6 1 基本概念 6 2 查看时实系统进程 6 3 PRI and NI 七 其他概念 四 X 状态 死亡状态 对应于各个操作系统下的进程状态中的进程终止 退出 态 所谓进程处于 X 状态 死亡状态 代表
  • 【HTML】讲讲HTML5视频播放的方式

    HTML 讲讲HTML5视频播放的方式 引言 github HTML 讲讲HTML5视频播放的方式 内容速递 看了本文您能了解到的知识 想要网页播放视频再也不需要使用插件了 HTML本身就支持 而且更加稳定 上节讲了HTML5的音频播放 和
  • 7.14资产收集-灯塔

    sql注入 xss 源码泄露 redis未授权访问 逻辑漏洞 支付漏洞 GitHub TophantTechnology ARL ARL Asset Reconnaissance Lighthouse 资产侦察灯塔系统旨在快速侦察与目标关联
  • 在matlab中如何使用SVM工具箱

    一 SVM下载 http see xidian edu cn faculty chzheng bishe indexfiles indexl htm 二 在MATLAB中添加svm工具箱 参考 http jingyan baidu com
  • 银行业法律法规与综合能力 第五章 银行监管与自律 10%

    第五章 银行监管与自律 考点1 银行监管体制 考点2 银行自律与市场约束 考点3 职业操守与行为准则 考点4 清廉金融 考点5 银行业消费者杈益保护 考点1 银行监管体制 一 银行监管起源与演变 1 英国颁布的 反泡沫公司法 标志着世界金融
  • 小程序---云函数npm install报错

    问题 云函数右键菜单 在外部终端窗口中打开 npm install报错 解决方法 使用cnpm install 安装依赖
  • error:03000086:digital envelope routines::initialization error

    项目背景 前端vue项目启动突然报错error 03000086 digital envelope routines initialization error 我用的开发工具是vscode node版本是v18 17 0 前端项目版本如下
  • redis安装、配置、启动

    一 redis默认安装位置 usr local bin redis benchmark 性能测试工具 可以在自己本子运行 看看自己本子性能如何 服务启动起来后执行redis check aof 修复有问题的AOF文件redis check
  • mac安装VMware Fusion及虚拟Windows注意事项

    mac安装VMware Fusion及虚拟Windows注意事项 文章目录 mac安装VMware Fusion及虚拟Windows注意事项 1 前言及注意事项 2 VMWare Fusion下载及安装 3 安装虚拟Windows 4 Vi
  • 代码覆盖率

    在做单元测试时 代码覆盖率常常被拿来作为衡量测试好坏的指标 甚至 用代码覆盖率来考核测试任务完成情况 比如 代码覆盖率必须达到80 或 90 于是乎 测试人员费尽心思设计案例覆盖代码 用代码覆盖率来衡量 有利也有有弊 本文我们就代码覆盖率展
  • viewPager + ConstraintLayout 自适应高度

    在 ConstraintLayout 约束布局 中 我们发现viewPager除了设置固定的尺寸外 要不就是全屏 这很不符合我们的需求 改造下 layout中
  • Pandas常用统计数据方法

    import pandas as pd 1 准备数据 假设有 5 个人 分别参加了 4 门课程 获得了对应的分数 同时这个 5 个人分别负责的项目个数 在 Project num 列中显示 data name pd Series Alice
  • Linux 用户管理与文件权限

    Linux 是一个多用户系统 它允许多个用户同时登陆主机 并为他们分配不同的资源和工作环境进行使用 当然 不同的用户都有文件的私有需求 所以设置不同用户文件的权限管理十分重要 01 用户与用户组 Linux 中一般将文件访问权限的身份分为三