Linux速成入门教程——从零基础开始快速入门,一文了解Linux用户管理与权限
2.1 用户与组管理
用户与组的基本概念
在Linux系统中,用户和组是管理权限和资源访问的基本单元。每个用户都有一个唯一的用户ID(UID),每个组都有一个唯一的组ID(GID)。用户可以属于一个或多个组,组用于集中管理一组用户的权限。
- 用户:代表系统中的一个个体,可以是人或系统服务。每个用户都有一个独立的主目录、默认Shell以及独立的文件权限。
- 组:一组用户的集合,用于简化权限管理。一个文件可以被多个用户通过组共享和访问。
创建和删除用户账户
在Linux中,用户管理的基本操作包括创建、删除和修改用户账户。以下是一些常用命令:
-
useradd:用于创建一个新的用户账户。sudo useradd username该命令创建一个新用户,但不会自动设置密码和主目录。可以使用
-m选项创建主目录,-s选项指定默认Shell。例如,创建一个名为
john的新用户,并创建其主目录和默认Shell:sudo useradd -m -s /bin/bash john -
passwd:用于设置或更改用户密码。sudo passwd username例如,为
john设置密码:sudo passwd john -
userdel:用于删除用户账户。sudo userdel username要删除用户并删除其主目录和邮件文件,可以使用
-r选项:sudo userdel -r john
用户组的创建与管理
用户组的管理与用户类似,可以通过以下命令来创建和管理组:
-
groupadd:用于创建一个新的用户组。sudo groupadd groupname例如,创建一个名为
developers的新组:sudo groupadd developers -
groupdel:用于删除用户组。sudo groupdel groupname例如,删除
developers组:sudo groupdel developers -
usermod:用于修改现有用户的属性,包括将用户添加到某个组。sudo usermod -aG groupname username例如,将用户
john添加到developers组:sudo usermod -aG developers john
注意:-a选项确保用户被附加到指定组而不是替换用户的现有组成员身份。
用户与组之间的关系及其配置文件
在Linux系统中,用户与组的相关信息存储在以下几个文件中:
-
/etc/passwd:包含所有用户的基本信息,如用户名、UID、GID、主目录和Shell等。每一行代表一个用户,格式如下:username:x:UID:GID:comment:home_directory:shell例如:
john:x:1001:1001::/home/john:/bin/bash -
/etc/group:包含所有组的基本信息,如组名、GID和组成员列表。格式如下:
groupname:x:GID:user1,user2,...
-
例如:
developers:x:1002:john,mary -
/etc/shadow:包含用户密码及相关信息。文件权限严格限制,通常只有root用户可以访问。每一行代表一个用户,格式如下:username:password:last_changed:min:max:warn:inactive:expire
这些文件是Linux系统中用户与组管理的核心,通过手动编辑这些文件可以直接修改用户和组信息,但通常建议通过系统命令来进行管理以避免错误。
2.2 文件权限与访问控制
文件权限的详细讲解
在Linux系统中,文件权限决定了用户或组对文件的访问级别。每个文件或目录都有三个权限集,分别适用于文件所有者(User)、所属组(Group)和其他用户(Others)。每个权限集包括三种类型的权限:
- 读(r, Read):允许查看文件内容或列出目录内容。
- 写(w, Write):允许修改文件内容或在目录中创建、删除文件。
- 执行(x, Execute):允许运行文件(如脚本)或进入目录。
文件权限的表示通常为一个10位字符串,如:
-rwxr-xr--
- 第一个字符表示文件类型,
-表示普通文件,d表示目录。 - 接下来的三组字符分别表示所有者、组和其他用户的权限。
更改文件权限的命令
-
chmod:用于更改文件或目录的权限。可以使用符号模式或八进制模式指定权限。符号模式:
u表示所有者(User)g表示组(Group)o表示其他用户(Others)a表示所有人(All)
操作符:
+添加权限-移除权限=设置精确权限
例如:
chmod u+rwx filename chmod g+rx filename chmod o-w filename八进制模式:每种权限对应一个数字,
r=4,w=2,x=1。组合这些值可以表示权限。例如:
chmod 755 filename这里
755表示所有者有rwx权限(4+2+1=7),组和其他用户有rx权限(4+1=5)。
更改文件所有者的命令
-
chown:用于更改文件或目录的所有者和组。sudo chown owner:group filename例如,将文件
filename的所有者改为john,组改为developers:sudo chown john:developers filename -
chgrp:用于更改文件或目录的组。sudo chgrp groupname filename例如,将文件
filename的组改为developers:sudo chgrp developers filename
设置与撤销SUID、SGID和Sticky Bit
-
SUID(Set User ID):当一个文件设置了SUID位(通常是可执行文件),普通用户运行该文件时将获得文件所有者的权限。通常用于需要提升权限的系统程序。
chmod u+s filename例如:
chmod 4755 /usr/bin/passwd -
SGID(Set Group ID):当一个文件设置了SGID位时,执行该文件的用户将临时获得文件所属组的权限。对于目录,SGID位保证该目录中创建的所有文件和目录将继承其所属组。
chmod g+s directory_name -
Sticky Bit:Sticky Bit通常用于目录,当目录设置了Sticky Bit时,只有文件的所有者才能删除或移动该目录中的文件,即使其他用户对目录有写权限。
chmod +t directory_name例如:
chmod 1777 /tmp
2.3 特殊权限与ACL
访问控制列表(ACL)的介绍与使用
在Linux系统中,传统的权限机制(rwx)只适用于用户、组和其他用户,但在更复杂的场景下可能不够灵活。访问控制列表(ACL)允许更细粒度地控制文件或目录的访问权限,针对单个用户或组设置特定的权限。
-
查看ACL:使用
getfacl命令查看文件或目录的ACL。getfacl filename -
设置ACL:使用
setfacl命令设置ACL。setfacl -m u:username:permissions filename例如,给用户
john赋予读取权限:setfacl -m u:john:r-- filename -
移除ACL:
setfacl -x u:username filename例如,移除用户
john的ACL:setfacl -x u:john filename -
默认ACL:可以为目录设置默认ACL,以便在该目录中新创建的文件或子目录自动继承这些权限。
setfacl -d -m u:username:permissions directory_name
使用ACL的注意事项
ACL是一个强大的权限管理工具,但在使用时需要注意以下几点:
- 兼容性:并非所有文件系统都支持ACL,使用前请确认文件系统是否启用ACL支持。
- 复杂性:ACL提供了灵活的权限控制,但也增加了管理的复杂性。建议仅在需要细粒度控制时使用。
- 与传统权限的结合:ACL不会完全替代传统的
rwx权限,两者会同时生效。某些情况下,需要同时配置两者以确保权限设置的正确性。
2.4 进阶用户管理技巧
限制用户资源的/etc/security/limits.conf
Linux系统允许通过/etc/security/limits.conf文件来限制用户或组的系统资源使用,如最大进程数、最大文件大小等。该文件使用以下格式:
<domain> <type> <item> <value>
<domain>:可以是用户名、组名或*(所有用户)。<type>:soft或hard,分别表示软限制和硬限制。<item>:表示受限制的资源,如nofile(最大文件数)和nproc(最大进程数)。<value>:设置的具体数值。
例如,限制用户john的最大进程数为100:
john hard nproc 100
使用sudo提升权限
sudo命令允许普通用户在执行特定命令时临时获得超级用户权限。sudo的权限配置通过/etc/sudoers文件进行管理。
-
添加用户到
sudo组:sudo usermod -aG sudo username例如,将
john添加到sudo组:sudo usermod -aG sudo john -
编辑
/etc/sudoers文件:sudo visudo在此文件中,可以为特定用户或组配置
sudo权限。例如,允许john在不输入密码的情况下执行所有命令:john ALL=(ALL) NOPASSWD: ALL
相关文章:
Linux速成入门教程——从零基础开始快速入门,一文了解Linux用户管理与权限
2.1 用户与组管理 用户与组的基本概念 在Linux系统中,用户和组是管理权限和资源访问的基本单元。每个用户都有一个唯一的用户ID(UID),每个组都有一个唯一的组ID(GID)。用户可以属于一个或多个组ÿ…...
网工内推 | 宁德时代IT运维,晋升空间大,带薪年假,包吃包住
01 宁德时代 🔷招聘岗位:IT运维服务 🔷任职要求 1、大专及以上学历专业不限,应届毕业生或计算机、网络维护等相关专业优先; 2、具备较强的服务意识和良好的语言表达能力、沟通能力、记忆能力、心理承受能力和学习能力…...
Linux---系统安全
文章目录 系统安全系统账号清理密码安全控制命令历史限制终端自动注销如设置时间短的处理方式 使用su命令切换用户用途及用法密码验证限制使用su命令的用户查看su操作记录限制使用su命令的用户查看su操作记录su命令的安全隐患 PAM(Pluggable Authentication Modules)可插拔式认…...
手写数字识别实战
全部代码: import matplotlib.pyplot import torch from torch import nn # nn是完成神经网络相关的一些工作 from torch.nn import functional as F # functional是常用的一些函数 from torch import optim # 优化的工具包import torchvision from matplotlib …...
二叉树遍历
二叉树的遍历是二叉树操作中的一个基本且重要的概念,它指的是按照一定的规则访问二叉树中的每个节点,并且每个节点仅被访问一次。常见的二叉树遍历方式有四种:前序遍历(Pre-order Traversal)、中序遍历(In-…...
uni app 调用前置摄像头
uniapp开发app并没有相关Api调用前置摄像头。只能使用5app的api 调用前置摄像头拍照 plus.camera.getCamera(index) 获取需要操作的摄像头对象,如果要进行拍照或摄像操作,需先通过此方法获取摄像头对象 index指定要获取摄像头的索引值,1表…...
哈工大李治军老师OS课程笔记(4)——内存管理
一 内存使用与分段(实验六) 内存是如何用起来的? 内存使用:将程序放在内存中,PC指向开始地址 重定位:修改程序中的地址(是相对地址) 什么时候完成重定位? 编译时加基址…...
代码随想录算法训练营第43天:动态规划part10:子序列问题
300.最长递增子序列 力扣题目链接(opens new window) 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2…...
传智教育引通义灵码进课堂,为技术人才教育学习提效
7 月 17 日,阿里云与传智教育在阿里巴巴云谷园区签署合作协议,双方将基于阿里云智能编程助手通义灵码在课程共建、品牌合作及产教融合等多个领域展开合作,共同推进 AI 教育及相关业务的发展,致力于培养适应未来社会需求的高素质技…...
企业信息化建设搞得好了叫系统工程,搞不好叫面子工程
2024-06-13 09:26贝格前端工场...
程序员如何平衡日常编码工作与提升式学习?
在快速变化的编程领域中,平衡日常编码工作与个人成长确实是一个重要且富有挑战性的议题。以下是我对这一问题的看法和建议: 1. 认识到平衡的重要性 首先,理解两者之间的平衡并非零和游戏,而是相辅相成的。高效的编码工作能够为个…...
Linux---文件系统和日志分析
文章目录 文件系统和日志分析inode和block概述inode包含文件的元信息用stat命令可以查看某个文件的inode信息Linux系统文件三个主要的时间属性 目录文件的结构用户通过文件名打开文件时,系统内部的过程查看inode号码的方法硬盘分区后的结构访问文件的简单流程inode的…...
MySQL 体系架构
文章目录 一. MySQL 分支与变种1. Drizzle2. MariaDB3. Percona Server 二. MySQL的替代1. Postgre SQL2. SQLite 三. MySQL 体系架构1.连接层2 Server层(SQL处理层)3. 存储引擎层1)MySQL官方存储引擎概要2)第三方引擎3࿰…...
跨站脚本攻击漏洞
1.JavaScript JavaScript 是一种脚本,一门编程语言,它可以在网页上实现复杂的功能,网页展现给你的不再是简单的静态信息,而是实时的内容更新,交互式的地图,2D/3D动画,滚动播放的视频等等。 &a…...
RabbitMQ入门与进阶
RabbitMQ入门与进阶 基础篇1. 为什么需要消息队列?2. 什么是消息队列?3. RabbitMQ体系结构介绍4. RabbitMQ安装5. HelloWorld6. RabbitMQ经典用法(工作模式)7. Work Queues8. Publish/Subscribe9. Routing10. Topics 进阶篇1. RabbitMQ整合SpringBoot2. 消息可靠性投递故障情…...
Unity新输入系统 之 InputActions(输入配置文件)
本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 首先你应该了解新输入系统的基本单位Unity新输入系统 之 InputAction(输入配置文件最基本的单位࿰…...
Linux运维篇-误删/bin,/sbin目录怎么修复系统
这里写自定义目录标题 前言实例挂载镜像,重启系统进入救援模式拷贝镜像系统中的/bin和/sbin目录到原系统重启系统 总结 前言 当你看到这篇文章的时候,你的系统可能已经无法登录,或者正在处于登录状态但是不能执行任何常规的命令,…...
构建高效外贸电商系统的技术探索与源码开发
在当今全球化的经济浪潮中,外贸电商作为连接国内外市场的桥梁,其重要性日益凸显。一个高效、稳定、功能全面的外贸电商系统,不仅能够助力企业突破地域限制,拓宽销售渠道,还能提升客户体验,增强品牌竞争力。…...
Java设计模式:中介者模式详解与最佳实践
Java设计模式:中介者模式详解与最佳实践 1. 引言 在软件开发过程中,特别是复杂系统的构建中,模块间的交互往往成为影响代码质量的重要因素。当模块之间耦合度过高时,系统的维护、扩展和理解成本都会显著增加。为了降低模块之间的…...
Matlab绘制像素风字母颜色及透明度随机变化动画
本文是使用 Matlab 绘制像素风字母颜色及透明度随机变化动画的教程 实现效果 实现代码 如果需要更改为其他字母组合,在下面代码的基础上简单修改就可以使用。 步骤:(1) 定义字母形状;(2) 给出字母组合顺序;(3) 重新运行程序&#…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
