Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux权限和属组管理深入解析

Linux权限和属组管理深入解析

原创
作者头像
炒香菇的书呆子
修改于 2024-08-02 05:54:00
修改于 2024-08-02 05:54:00
2570
举报
文章被收录于专栏:香菇带你学Linux香菇带你学Linux

Linux中的权限与属组管理

引言

Linux 是一种广泛使用的开源操作系统,它基于 Unix 的设计理念,强调安全性、稳定性和灵活性。在 Linux 中,文件系统的管理和访问控制是非常关键的概念,它们通过文件权限和属组管理得以实现。本文将详细介绍 Linux 中的权限和属组管理机制,以及相关的命令和实践技巧。

Linux 文件系统简介

Linux 文件系统是一个层次结构,根目录 / 是整个文件系统的起点。在这个树形结构中,每个目录都是一个节点,每个文件都位于某个目录之下。以下是几个常见的目录:

  • /etc:存放配置文件。
  • /home:用户主目录所在的位置。
  • /usr:存放应用程序和库文件。
  • /var:存放可变数据,例如日志文件和数据库文件。

每个文件或目录都有一个所有者(owner)和一个属组(group),并有相应的权限设置。权限决定了谁可以访问文件以及他们能够对文件做什么。

权限基础

在 Linux 中,文件和目录的权限由三个部分组成:所有者权限、属组权限和其他人权限。每个部分又有三个子权限:读(read)、写(write)和执行(execute)。这些权限可以用符号表示,也可以用数字表示。

权限位

符号

数字

描述

r

4

读取权限

w

2

写入权限

x

1

执行权限

0

没有该权限

例如,一个文件的权限为 -rwxr-xr--,这表示:

  • 文件所有者有读、写和执行权限。
  • 文件属组成员有读和执行权限。
  • 其他用户只有读权限。

权限更改命令

chmod 命令

chmod 命令用于更改文件或目录的权限。它接受两种形式的参数:符号形式和数字形式。

符号形式

符号形式使用 +-= 来增加、减少或设置权限。

  • 增加权限:chmod a+x file (给所有人增加执行权限)
  • 减少权限:chmod g-w file (从属组减少写权限)
  • 设置权限:chmod u=rw file (设置所有者权限为只读)
数字形式

数字形式使用三位数来设置权限,每一位代表所有者、属组和其他人的权限。

  • 644 表示所有者有读写权限,属组和其他人只有读权限。
  • 755 表示所有者有读写执行权限,属组和其他人有读执行权限。

示例:

代码语言:bash
AI代码解释
复制
chmod 644 file.txt
特殊权限

除了基本的读、写和执行权限外,Linux 还支持一些特殊的权限位,包括 SUID、SGID 和粘滞位。

  • SUID:如果一个可执行文件设置了 SUID 位,则当非所有者运行该程序时,程序将以所有者的权限运行。
  • SGID:与 SUID 类似,但针对目录时,新创建的文件或目录将继承该目录的属组。
  • 粘滞位:对于目录,如果设置了粘滞位,那么只有文件的所有者才能删除或移动文件。

设置这些特殊权限的命令如下:

代码语言:bash
AI代码解释
复制
# 设置 SUID
chmod 4755 /bin/somecommand

# 设置 SGID
chmod 2755 /home/users

# 设置粘滞位
chmod 1777 /tmp

文件所有者与属组

文件所有者是指创建文件的用户,而属组是指文件所属的一组用户。

更改所有者和属组

chown 命令

chown 命令用于更改文件或目录的所有者。

  • 更改所有者:chown user file
  • 同时更改所有者和属组:chown user:group file

示例:

代码语言:bash
AI代码解释
复制
chown alice file.txt
chown alice:developers directory
chgrp 命令

chgrp 命令用于更改文件或目录的属组。

  • 更改属组:chgrp group file

示例:

代码语言:bash
AI代码解释
复制
chgrp developers file.txt

用户和用户组管理

在 Linux 中,用户和用户组的管理是非常重要的。管理员可以通过创建用户和用户组、分配权限来确保系统的安全和高效运行。

用户管理

创建用户账户

使用 useradd 命令创建新的用户账户。

代码语言:bash
AI代码解释
复制
useradd -m -s /bin/bash newuser

这里 -m 表示为新用户创建主目录,-s 表示指定默认的 shell。

修改用户密码

使用 passwd 命令修改用户的密码。

代码语言:bash
AI代码解释
复制
passwd newuser
删除用户账户

使用 userdel 命令删除用户账户。

代码语言:bash
AI代码解释
复制
userdel -r newuser

这里 -r 表示同时删除用户的主目录。

用户组管理

创建用户组

使用 groupadd 命令创建新的用户组。

代码语言:bash
AI代码解释
复制
groupadd developers
添加用户到组

使用 gpasswd 命令将用户添加到组中。

代码语言:bash
AI代码解释
复制
gpasswd -a newuser developers

这里 -a 表示添加用户到组。

删除用户组

使用 groupdel 命令删除用户组。

代码语言:bash
AI代码解释
复制
groupdel developers

权限案例分析

日常使用场景

假设有一个文本文件 data.txt,我们希望仅允许其所有者读取和写入,属组成员可以读取,其他用户不能访问。

代码语言:bash
AI代码解释
复制
touch data.txt
chown alice:developers data.txt
chmod 640 data.txt

共享文件夹管理

如果有一个名为 shared 的文件夹需要被属组 developers 的成员共享,我们可以这样设置:

代码语言:bash
AI代码解释
复制
mkdir shared
chown root:developers shared
chmod 770 shared

Web 服务器配置

在 Web 服务器环境中,例如 Apache 或 Nginx,通常需要确保网站文件只能被 Web 服务器进程访问。

代码语言:bash
AI代码解释
复制
mkdir /var/www/html
chown www-data:www-data /var/www/html
chmod 755 /var/www/html

安全最佳实践

  • 最小权限原则:确保用户和程序具有完成任务所需的最小权限。
  • 定期审查权限:定期检查用户的权限设置,确保没有不必要的权限。
  • 使用 sudo 和 su:使用 sudosu 命令来临时提升权限,而不是将用户添加到 root 组。

总结

本文介绍了 Linux 中权限和属组管理的基本概念、命令和实践技巧。理解这些概念和命令对于有效管理 Linux 系统的安全至关重要。通过合理设置权限,可以有效地保护系统免受未经授权的访问和潜在的安全威胁。

参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
scala(十六) Set
Set 特性 不重复、无序 不可变set 创建Set& apply方式创建 val set=Set[Int](1,2,3,4,5) 查看setApi 进入 scala $ scala Welcome to Scala 2.12.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_172). Type in expressions for evaluation. Or try :help. scala> val set=Set[Int](1,2,3,4
用户1483438
2022/04/20
3590
scala(十五) List
不可变List 不可变List的创建: 通过apply方法创建: List[元素类型](初始元素,...) val list=List[Int](1,2,3,4,5,6,7,8,9,10) 通过 :: 方法创建: 初始元素 :: 初始元素 :: ... :: Nil/不可变List val list=1::2::3::4::5::6::7::8::9::10::Nil Nil相当于一个空的List,Nil与不可变List的关系类似Null与String的关系,使用Nil给不可变List赋予初始值的时候
用户1483438
2022/04/19
8560
scala(十四) 数组
除了上面的写法,arr1 ++ arr2 也可以写成 arr1.++(arr2),只是上面的方式更简洁。
用户1483438
2022/04/19
9090
scala(十三) 集合
sorted sortBy(func: 集合元素类型 => B) sortBy里面的函数也是针对集合每个元素进行操作 sortBy后续是根据函数返回值进行排序
用户1483438
2022/04/18
5170
scala 容器详细解释
scala 中的所有集合类位于 scala.collection 或 scala.collection.mutable,scala.collection.immutable,scala.collection.generic 中
Tim在路上
2020/08/04
1.3K0
【Scala篇】--Scala中集合数组,list,set,map,元祖
备注:数组方法 1     def apply( x: T, xs: T* ): Array[T] 创建指定对象 T 的数组, T 的值可以是 Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean。 2     def concat[T]( xss: Array[T]* ): Array[T] 合并数组 3     def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit 复制一个数组到另一个数组上。相等于 Java's System.arraycopy(src, srcPos, dest, destPos, length)。 4     def empty[T]: Array[T] 返回长度为 0 的数组 5     def iterate[T]( start: T, len: Int )( f: (T) => T ): Array[T] 返回指定长度数组,每个数组元素为指定函数的返回值。 以上实例数组初始值为 0,长度为 3,计算函数为a=>a+1: scala> Array.iterate(0,3)(a=>a+1) res1: Array[Int] = Array(0, 1, 2) 6     def fill[T]( n: Int )(elem: => T): Array[T] 返回数组,长度为第一个参数指定,同时每个元素使用第二个参数进行填充。 7     def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]] 返回二数组,长度为第一个参数指定,同时每个元素使用第二个参数进行填充。 8     def ofDim[T]( n1: Int ): Array[T] 创建指定长度的数组 9     def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]] 创建二维数组 10     def ofDim[T]( n1: Int, n2: Int, n3: Int ): Array[Array[Array[T]]] 创建三维数组 11     def range( start: Int, end: Int, step: Int ): Array[Int] 创建指定区间内的数组,step 为每个元素间的步长 12     def range( start: Int, end: Int ): Array[Int] 创建指定区间内的数组 13     def tabulate[T]( n: Int )(f: (Int)=> T): Array[T] 返回指定长度数组,每个数组元素为指定函数的返回值,默认从 0 开始。 以上实例返回 3 个元素: scala> Array.tabulate(3)(a => a + 5) res0: Array[Int] = Array(5, 6, 7) 14     def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) => T): Array[Array[T]] 返回指定长度的二维数组,每个数组元素为指定函数的返回值,默认从 0 开始。
LhWorld哥陪你聊算法
2018/09/13
2.8K0
大数据利器--Scala语言学习(高级)
ListBuffer:ListBuffer 是可变的 list 集合,可以添加,删除元素,ListBuffer 属于序
MiChong
2020/09/24
2K0
大数据利器--Scala语言学习(高级)
Scala 高阶(七):集合内容汇总(上篇)
Scala中的集合与Java中的集合相类似,但是又有很多的改变,接下来我们开启Scala集合篇的学习历程吧!
百思不得小赵
2022/12/01
1K0
Scala 高阶(七):集合内容汇总(上篇)
大数据技术之_16_Scala学习_07_数据结构(上)-集合
  1、Set、Map 是 Java 中也有的集合。   2、Seq 是 Java 中没有的,我们发现 List 归属到 Seq 了,因此这里的 List 就和 java 不是同一个概念了。   3、我们前面的 for 循环有一个 1 to 3,就是 IndexedSeq 下的 Vector。   4、String 也是属于 IndexeSeq。   5、我们发现经典的数据结构,比如 Queue 和 Stack 被归属到 LinearSeq。   6、大家注意 Scala 中的 Map 体系有一个 SortedMap,说明 Scala 的 Map 可以支持排序。   7、IndexSeq 和 LinearSeq 的区别     IndexSeq 是通过索引来查找和定位,因此速度快,比如 String 就是一个索引集合,通过索引即可定位。     LineaSeq 是线型的,即有头尾的概念,这种数据结构一般是通过遍历来查找,它的价值在于应用到一些具体的应用场景(比如:电商网站,大数据推荐系统:最近浏览的10个商品)。
黑泽君
2019/04/09
1.3K0
大数据技术之_16_Scala学习_07_数据结构(上)-集合
Scala——多范式, 可伸缩, 类似Java的编程语言
3.将features和plugins两个文件夹拷贝到eclipse安装目录中的” dropins/scala”目录下。进入dropins,新建scala文件夹,将两个文件夹拷贝到“dropins/scala”下
时间静止不是简史
2020/07/24
3.1K2
Scala中的Map使用例子
Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法。 (1)不可变Map 特点: api不太丰富 如果是var修饰,引用可变,支持读写 如果是val修饰,引用不可变,只能写入一次值,其后只读 var a:Map[String,Int]=Map("k1"->1,"k2"->2)//初始化构造函数 a += ("k3"->3)//添加元素 a += ("k4"->4)//添加元素 a +=
我是攻城师
2018/05/14
3.3K0
Scala系列 (二)Scala数组----超详细常用方法及其用法
写在前面: 我是「nicedays」,一枚喜爱做特效,听音乐,分享技术的大数据开发猿。这名字是来自world order乐队的一首HAVE A NICE DAY。如今,走到现在很多坎坷和不顺,如今终于明白nice day是需要自己赋予的。 白驹过隙,时光荏苒,珍惜当下~~ 写博客一方面是对自己学习的一点点总结及记录,另一方面则是希望能够帮助更多对大数据感兴趣的朋友。如果你也对 大数据与机器学习感兴趣,可以关注我的动态 https://blog.csdn.net/qq_35050438,让我们一起挖掘数据与人工智能的价值~
用户7886150
2020/12/12
1.9K0
带你快速掌握Scala操作———(3)
创建变长数组,需要提前导入ArrayBuffer类 import scala.collection.mutable.ArrayBuffer
刘浩的BigDataPath
2021/04/13
2K0
带你快速掌握Scala操作———(3)
Scala最基础入门教程
(1)Scala和Java一样属于JVM语言,使用时都需要先编译为class字节码文件,并且Scala能够直接调用Java的类库。
ha_lydms
2023/09/29
8250
Scala最基础入门教程
大数据技术之_16_Scala学习_08_数据结构(下)-集合操作+模式匹配
第十一章 数据结构(下)-集合操作11.1 集合元素的映射-map11.1.1 map 映射函数的操作11.1.2 高阶函数基本使用案例1+案例211.1.3 使用 map 映射函数来解决11.1.4 模拟实现 map 映射函数的机制11.1.5 课堂练习11.2 集合元素的扁平-flatMap11.3 集合元素的过滤-filter11.4 集合元素的化简-reduce11.5 集合元素的折叠-fold11.6 集合元素的扫描-scan11.7 集合的综合应用案例11.8 集合的合并-zip11.9 集合的迭代器-iterator11.10 流-Stream11.11 视图-view11.12 线程安全的集合11.13 并行集合11.14 操作符第十二章 模式匹配12.1 match12.2 守卫12.3 模式中的变量12.4 类型匹配12.5 数组匹配12.6 列表匹配12.7 元组匹配12.8 对象匹配12.9 变量声明中的模式12.10 for表达式中的模式12.11 样例(模板)类12.12 case 语句的中置(缀)表达式12.13 匹配嵌套结构12.14 密封类
黑泽君
2019/04/18
1.7K0
大数据技术之_16_Scala学习_08_数据结构(下)-集合操作+模式匹配
Scala语言快速了解一下?
Scala 是 Scalable Language 的简写,是一门多范式的编程语言。Java平台的Scala于2003年底/2004年初发布。 Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并可以调用现有的 Java 类库。
码之有理
2022/11/11
3.1K1
Scala语言快速了解一下?
Scala专题系列(四) : Scala集合
层级1 :Iterable指的是哪些能生成涌来访问集合中所有元素的Iterator的集合
用户5252199
2022/04/18
7110
Scala专题系列(四) : Scala集合
机器学习:如何快速从Python栈过渡到Scala栈
我之前的技术栈主要是Java、Python,机器学习方面主要用到是pandas、numpy、sklearn、scipy、matplotlib等等,因为工作需要使用spark,所以理所应当的开始学习pyspark;
HoLoong
2020/10/20
1.8K0
机器学习:如何快速从Python栈过渡到Scala栈
Scala Iterator(迭代器)
你可以使用 it.min 和 it.max 方法从迭代器中查找最大与最小元素,实例如下:
王知无-import_bigdata
2019/03/19
1.5K0
Scala语言入门:初学者的基础语法指南
作为一种在Java虚拟机(JVM)上运行的静态类型编程语言,Scala结合了面向对象和函数式编程的特性,使它既有强大的表达力又具备优秀的型态控制。
BookSea
2023/10/16
7860
Scala语言入门:初学者的基础语法指南
相关推荐
scala(十六) Set
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档