当前位置: 首页 > news >正文

sudo 命令:掌握系统权限控制,实现安全高效管理

一、命令简介

sudo​ 命令允许系统管理员授权普通用户执行特定命令,并以管理员身份运行这些命令,通常需要输入用户自己的密码。

image

sudo 全称是"substitute user do",意为“替用户做”,也就是“以另一个用户的身份执行命令”。

  • 优点

这种机制既提高了系统的安全性,又简化了权限管理。

  • 工作原理

当用户执行 sudo 命令时,系统会检查/etc/sudoers 文件,该文件定义了哪些用户可以执行哪些命令。如果用户被授权,sudo 会要求他们输入自己的密码,然后执行指定的命令。

  • 配置文件

sudo 的配置文件位于/etc/sudoers。你可以看到类似如下内容

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults        use_pty
root    ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d

%sudo ALL=(ALL:ALL) ALL ​表示:赋予 sudo ​用户组执行任何命令的权限。

  • 编辑配置文件

编辑这个文件需要使用 visudo​ 命令,它会进行语法检查,防止配置错误。

sudo visudo

第四章会详细讲解如何配置 sudoers 文件。

二、命令参数

典型示例

sudo apt update

选项:

  • -u, --user=用户​: 指定以哪个用户的身份来执行命令。
  • -l, --list​: 列出当前用户可以执行的命令。
  • -s, --set-home​: 设置 HOME 环境变量为目标用户的家目录。
  • -i, --login​: 以目标用户的环境变量登录。
  • -v, --validate​: 验证用户的密码,更新时间戳文件。
  • -h, --help​: 显示帮助信息。

三、命令示例

  1. 以 root 权限执行 apt update命令:
sudo apt update
  1. 以特定用户 john的身份执行 ls命令:
sudo -u john ls
  1. 更新 sudo时间戳
sudo -v

不仅限于 sudo -v​,只要执行了任意 sudo​ 命令并验证正确密码后,时间戳将更新:允许你在一段时间内继续执行 sudo​ 操作而无需再次输入密码。这是一种提高用户体验的机制。

四、sudoers 文件

sudoers​ 文件的配置规则用于定义哪些用户或用户组可以使用 sudo​ 命令以及他们能执行哪些命令。该文件有严格的语法要求,因此使用 visudo​ 编辑它以防止语法错误是非常重要的。

​sudoers 文件的基本语法结构

  1. 基本格式

    [用户] [主机]=[运行身份] [命令]
    
    • [用户]​:定义具有权限的用户或用户组。可以是单个用户名或 %​ 开头的用户组名称。
    • [主机]​:表示从哪些主机可以使用 sudo 权限,通常设置为 ALL​,表示从所有主机都可以执行。
    • [运行身份]​:用户以哪个身份执行命令,通常是 ALL​,也可以是 root​ 或其他用户。
    • [命令]​:指定用户可以运行的命令,可以是 ALL​ 表示所有命令,也可以限制特定命令路径。
  2. 具体示例

    • 允许用户 username​ 在所有主机上以任何用户身份运行所有命令:

      username ALL=(ALL:ALL) ALL
      
    • 允许用户 username​ 以 root​ 身份在所有主机上运行 /bin/ls​ 命令:

      username ALL=(root) /bin/ls
      
    • 允许用户 admin​ 在所有主机上以 root​ 身份运行所有命令,但不需要输入密码:

      admin ALL=(ALL) NOPASSWD: ALL
      
    • 允许用户组 admins​ 成员在所有主机上以 root​ 身份运行所有命令:

      %admins ALL=(ALL:ALL) ALL
      
    • 限制用户 user1​ 只能在 server1​ 主机上以 root​ 身份运行 /usr/bin/vim​:

      user1 server1=(root) /usr/bin/vim
      
  3. 常用关键字

    • ALL:用于表示任意主机、任意用户或任意命令。

    • NOPASSWD:用于表示在执行命令时不需要输入密码。

    • Cmnd_Alias:命令别名,简化复杂的命令集。例如:

      Cmnd_Alias WEBADMIN = /usr/bin/systemctl restart apache2, /usr/bin/systemctl status apache2
      

      然后,可以允许用户 webadmin​ 执行这些命令:

      webadmin ALL=(ALL) WEBADMIN
      
  4. 别名定义
    sudoers​ 文件允许使用别名来管理权限,常见别名包括:

    • User_Alias:用户别名。
    • Runas_Alias:运行身份别名。
    • Host_Alias:主机别名。
    • Cmnd_Alias:命令别名。

    示例:

    User_Alias ADMINS = alice, bob
    Host_Alias WEBSERVERS = web1, web2
    Cmnd_Alias SERVICE = /bin/systemctl restart
    ADMINS WEBSERVERS=(ALL) SERVICE
    

重要配置示例

  • 允许普通用户使用 root 权限执行所有命令:

    username ALL=(ALL:ALL) ALL
    
  • 允许用户组执行命令:

    %groupname ALL=(ALL:ALL) ALL
    
  • 允许用户执行特定命令:

    username ALL=(ALL) /usr/bin/ls, /usr/bin/cat
    
  • 允许用户无需密码执行命令:

    username ALL=(ALL) NOPASSWD: ALL
    

注意事项

关于安全的建议:

  • 仅为信任的用户和用户组授予 sudo​ 权限,尤其是使用 NOPASSWD​ 时。
  • 始终使用 visudo​ 编辑 sudoers​ 文件以避免语法错误。
  • 避免滥用 sudo​ 权限,仅在需要时使用,以确保系统的安全性和稳定性。

相关文章:

sudo 命令:掌握系统权限控制,实现安全高效管理

一、命令简介 ​sudo​ 命令允许系统管理员授权普通用户执行特定命令,并以管理员身份运行这些命令,通常需要输入用户自己的密码。 ​​ sudo 全称是"substitute user do",意为“替用户做”,也就是“以另一个用户的身…...

AndroidStudio导入so文件

点击app 右键依次选择New-Floder-JNI Floder 创建jni目录 将需要的so文件拷贝到jni目录 在app目录下,build.gradle文件的android{}中添加: sourceSets {main{jniLibs.srcDirs [src/main/jni]}}点击一下Sync Project with Gradle Files 然后编译生成AP…...

Kuebernetes 群集基于 Docker 部署

Kuebernetes 群集基于 Docker 部署 实验报告资源列表基础环境一、准备 Docker1、安装 Docker 二、安装 Kubeadm 工具1、配置 yum 源2、安装 Kubeadm 工具 三、初始化 Master 节点1、配置 Master 节点2、常见故障 四、Node 节点加入集群五、部署网络插件(CNI&#xf…...

追随 HarmonyOS NEXT,Solon v3.0 将在10月8日发布

Solon (开放原子开源基金会,孵化项目)原计划10月1日发布 v3.0 正式版。看到 HarmonyOS NEXT 将在 10月8日启用公测,现改为10月8日发布以示庆贺。另外,Solon 将在2025年启动“仓颉”版开发(届时,…...

服装时尚与动漫游戏的跨界联动:创新运营与策划策略研究

摘要:本论文聚焦于服装时尚与动漫游戏的跨界联动现象,深入探讨其在运营和策划方向的策略与实践。通过对相关理论的梳理和实际案例的分析,阐述了跨界联动的背景、意义、模式以及面临的挑战。研究发现,成功的跨界联动能够实现品牌价…...

Redis中String类型的常用命令(append,getrenge,setrange等命令)

Redis----String命令 前言.常见的String存储类型. 常见命令1. set 命令2. get 命令3. mget命令与mset命令4. setnx命令5. setex与psetex命令6. incr与incrby与incrbyfloat命令7. decr与decrby命令8. append命令9. getrange和setrange命令10. strlen命令. 前言. 常见的String存…...

深度拆解:如何在Facebook上做跨境电商?

国内社交媒体正在逐渐兴盛,海外也不例外。在数字营销的新时代,Facebook已成为跨境电商不可或缺的平台之一。通过Facebook的巨大流量,卖家可以更好的触及潜在消费者,以实现销售增长。本文就深度拆解一下,卖家如何利用Fb…...

为啥数据需转换成tensor才能参与后续建模训练

将数据转换为Tensor(张量)格式用于深度学习和机器学习模型训练,主要是出于以下几个关键原因: 数值计算的效率:Tensor(由PyTorch、TensorFlow等库提供)是在GPU上执行高效的数值运算的数据结构。相…...

leetcode:380. O(1) 时间插入、删除和获取随机元素

实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时&#xff0…...

Linux集群部署RabbitMQ

目录 一、准备三台虚拟机,配置相同 1、所有主机都需要hosts文件解析 2、所有主机安装erLang和rabbitmq 3、修改配置文件 4、导入rabbitmq 的管理界面 5、查看节点状态 6、设置erlang运行节点 7、rabitmq2和rabbitmq3重启服务 8、查看各个节点状态 二、添加…...

01DSP学习-了解DSP外设-以逆变器控制为例

(由于是回忆自己简单的DSP学习过程,所以博客看起来有些没有章法,请见谅~) 上一篇博客介绍了学习DSP需要的软件和硬件准备,以及一个DSP的工程包含了哪些东西。我的学习方法是目的导向,即我需要用什么我就学什么,并没有…...

【ArcGIS Pro实操第三期】多模式道路网构建(Multi-model road network construction)原理及实操案例

ArcGIS Pro实操第三期:多模式道路网构建原理及实操案例 1 概述1.1 原理 2 GIS实操2.1 新建文件并导入数据2.2 创建网络数据集2.3 设置连接策略(Setting up connectivity policies)2.4 添加成本(Adding cost attributes&#xff09…...

深度学习基础及技巧

机器学习中的监督学习 监督学习是通过对数据进行分析,找到数据的表达模型,对新输入的数据套用该模型做决策 主要分为训练和预测两个阶段 训练阶段:根据原始数据进行特征提取,然后使用决策树、随机森林等模型算法分析数据之间的特…...

Unity 外描边简单实现(Shader Graph)

1:原理 将物体的模型空间的位置(也就是顶点数据)放大,作为一个单独的渲染通道单独渲染,这时候模型是已经发大过的,要想看到外描边的效果,需要将正面显示的东西给去掉,显示背面渲染的…...

text2sql方法:NatSQL和DIN-SQL

NatSQL NatSQL出自2021年9月的论文《Natural SQL: Making SQL Easier to Infer from Natural Language Specifications》(github),它是一种SQL 中间表征(SQL intermediate representation(IR))方法。 NatSQL作者认为Text2SQL的关键挑战是自然语言描述和其对应的SQ…...

【新闻转载】Storm-0501:勒索软件攻击扩展到混合云环境

icrosoft发出警告,勒索软件团伙Storm-0501近期调整了攻击策略,目前正将目标瞄准混合云环境,旨在全面破坏受害者的资产。 该威胁行为者自2021年首次露面,起初作为Sabbath勒索软件行动的分支。随后,他们开始分发来自Hive…...

RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察

RabbitMQ 是一个功能强大且广泛使用的消息代理,它通过处理消息的传输、存储和交付来促进分布式应用程序之间的通信。作为消息代理,RabbitMQ 充当生产者(发送消息的应用程序)和使用者(接收消息的应用程序)之…...

Spring Boot 集成 MySQL 的详细指南

在现代软件开发中,Spring Boot 因其简单易用而成为构建 Java 应用程序的热门选择。结合 MySQL这一常用关系型数据库,开发者可以快速构建出功能完善的后端服务。本文将详细介绍如何将 Spring Boot 与 MySQL 集成,提供从环境搭建到代码实现的全…...

python格式化输入输出

以下是使用 format()、f-string 和百分号 % 运算符进行 Python 数据格式化输入输出的示例代码。 1. 使用 format() 方法进行格式化 # 使用 format() 方法格式化数据并输出到文件 name "Alice" age 25 score 92.5# 格式化字符串 formatted_string "Name: {…...

音视频入门基础:FLV专题(10)——Script Tag实例分析

一、引言 在《音视频入门基础:FLV专题(9)——Script Tag简介》中对FLV文件的Script Tag进行了简介。下面用一个具体的例子来对Script Tag进行分析。 二、Script Tag的Tag header实例分析 用notepad打开《音视频入门基础:FLV专题…...

国外问卷调查匠哥已经不带人了,但是还可以交流

国外问卷调查匠哥已经不带人了,但是还可以来和匠哥交流, 为啥不带人了呢? 从今年年初开始,匠哥在带学员的过程中发现: 跟往年同样的收费,同样的教学,甚至我付出的时间精力比以前还多&#xff…...

Linux 进程的基本概念及描述

目录 0.前言 1. 什么是进程 1.1 进程的定义与特性 1.2 进程与线程的区别 2.描述进程 2.1 PCB (进程控制块) 2.2 task_struct 3.查看进程 3.1 查看进程信息 3.1.1 /proc 文件系统 3.1.2 ps 命令 3.1.2 top 和 htop 命令 3.2 获取进程标识符 3.2.1使用命令获取PID 3.2.2 使用C语言…...

【C++】透过STL源代码深度剖析vector的底层

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 🔥 所属专栏:C深入学习笔记 💫 欢迎来到我的学习笔记! 参考博客:【C】透过STL源…...

ubuntu 开启root

sudo passwd root#输入以下命令来给root账户设置密码 sudo passwd -u root#启用root账户 su - root#要登录root账户 root 开启远程访问: 小心不要改到这里了:sudo nano /etc/ssh/ssh_config 而是:/etc/ssh/sshd_config sudo nano /etc/ssh…...

使用 Llama 3.1 和 Qdrant 构建多语言医疗保健聊天机器人的步骤

长话短说: 准备好深入研究: 矢量存储的复杂性以及如何利用 Qdrant 进行高效数据摄取。掌握 Qdrant 中的集合管理以获得最佳性能。释放上下文感知响应的相似性搜索的潜力。精心设计复杂的 LangChain 工作流程以增强聊天机器人的功能。将革命性的 Llama …...

【Linux-基础IO】如何理解Linux下一切皆文件磁盘的介绍

目录 如何理解Linux系统上一切皆文件 1.物理角度认识磁盘 2.对磁盘的存储进行逻辑抽象 磁盘寻址 3.磁盘中的寄存器 如何理解Linux系统上一切皆文件 计算机中包含大量外设,操作系统想要管理好这些外设,就必须对这些外设进行先描述再组织&#xff0c…...

Golang | Leetcode Golang题解之第436题寻找右区间

题目: 题解: func findRightInterval(intervals [][]int) []int {n : len(intervals)type pair struct{ x, i int }starts : make([]pair, n)ends : make([]pair, n)for i, p : range intervals {starts[i] pair{p[0], i}ends[i] pair{p[1], i}}sort.…...

微服务SpringSession解析部署使用全流程

目录 1、SpringSession简介 2、实现session共享的三种方式 1、修改Tomcat配置文件 2、Nginx负载均衡策略 3、redis统一存储 0、准备工作 1、本地服务添加依赖 2、修改本地服务配置文件 3、添加application.properties文件 4、添加nacos - redis配置 5、修改本地项目…...

自动驾驶 3DGS 学习笔记

目录 street_gaussians gsplat依赖项 运行报错: python>3.9 SGD: Street View Synthesis with Gaussian Splatting and Diffusion Prior 差分高斯光栅化 diff-gaussian-rasterization street_gaussians https://github.com/zju3dv/street_gaussians gsp…...

【C++笔试强训】如何成为算法糕手Day5

学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题:游游的you 思路: 第二题:腐烂的苹果 思路: 第三题:孩子们的游戏 思路&…...

wordpress get_term_link/网络营销策划书案例

1.node安装ganache-cli组件、 2.运行 ganache-cli 会看到创建了一些以太坊账号 3. 安装MetaMask是一款在浏览器上使用的插件类型的以太坊钱包 4.在 MetaMask导入2步生成的账号,查看账户余额 5.尝试使用MetaMask给另外一个账号转账...

网站开发 公司简介/疫情最新数据

while循环的语法格式如下: do while循环的语法格式如下: for循环的基本语法格式如下: 控制循环结构 Java提供了continue和break来控制循环结构。除此之外,return可以结束整个方法,当然也就结束了一次循环。 break用于完…...

网站做京东联盟/广告投放策略

本文转自:http://www.cnblogs.com/miku/archive/2012/09/27/2706276.html 1. 映射路由 大型MVC项目为了扩展性,可维护性不能像一般项目在Global中RegisterRoutes的方法里面映射路由。 这里学习一下Nop是如何做的。 Global.cs . 通过IOC容器取得IRoutePu…...

物联网技术是学什么的/seo薪资水平

FlatBuffers是一个高性能、跨平台的序列化库,支持C、C#、C、Go、Java、JavaScript、TypeScript、PHP和Python。由google开发,并用于游戏及其他对性能要求高的应用。 1、不用解析/解包,就可以直接访问序列化的数据 1)写schema文件。…...

廊坊建站/外贸网站seo

今天做项目时报了一个错提示说Invalid bound statement (not found)&#xff0c;也就是说mapper接口绑定.xml文件出错了&#xff0c;找不到指定的sql&#xff1b;原因是程序没有把.xml文件编译到classes路径下&#xff0c;这时需要在pom.xml文件的<build>标签中加入下面的…...

拓者设计吧现代装修效果图/优化大师的作用

Token Contrast for Weakly-Supervised Semantic Segmentation 摘要 目的&#xff1a; 使用图像级标签的弱监督语义分割(WSSS)通常利用类激活映射(CAM)生成伪标签。受CNN局部结构感知的限制&#xff0c;CAM通常不能识别整体目标区域。虽然最近的视觉转换器(ViT)可以弥补这一…...