Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >苏多到底是怎么工作的?

苏多到底是怎么工作的?
EN

Unix & Linux用户
提问于 2014-04-28 06:10:30
回答 2查看 16.8K关注 0票数 17

我一直认为"sudo“只是启动另一个登录过程,特别是使用"root”作为用户名,并请求登录密码。在运行某个程序之后,它将结束并注销(或:将打开的会话保持一段时间,然后退出)。不知道我是从哪里听说的,但这对我来说是合理的。

但现在我发现了这个行尸走肉的人:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALL    ALL = (root) NOPASSWD: /my/command

这允许我在不询问任何密码的情况下,从任何用户处运行任何程序。这让我纳闷:

这是如何工作的呢?程序如何获得用户权限?sudo是否需要一个服务器(以守护进程的身份运行)并连接到该服务器,发送应该执行的内容,而该服务器以根权限执行它?

其他用户呢?

有没有任何好的和简单的解释这是如何运作的?

EN

回答 2

Unix & Linux用户

发布于 2014-04-28 06:28:45

sudo是一个所谓的"SetUID二进制“,可以在ls -l的输出中看到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 159016 Mar 21 20:40 /usr/bin/sudo

第四列中的s (通常在可执行文件上找到x )告诉您设置了SetUID位。此位有一个重要的含义:当执行具有SetUID位集的二进制时,它不使用调用用户的用户ID,而是使用二进制的所有者的用户ID (在本例中为root)。

这就是线索。sudo总是以超级用户权限(如root)运行。因此,sudo能够执行一些特权任务,比如调用只允许root的系统函数。其中一个系统调用(基本的)是setuid(2)和朋友。通过调用setuid(),进程可以将其UID更改为它想要的任何UID (从而模拟另一个用户)。

sudo所做的是:

  • 读取和解析/etc/sudoers,查找调用用户及其权限,
  • 向调用用户询问密码(这通常是用户的密码,但也可以是目标用户的密码,也可以像NOPASSWD那样跳过)
  • 创建一个子进程,其中它调用setuid()以更改为目标用户
  • 在这个孩子中执行一个shell或命令,作为争论者。
票数 35
EN

Unix & Linux用户

发布于 2014-04-28 06:27:51

简单的答案是suid二进制文件上的sudo标志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ls -l /usr/bin/sudo
---s--x--x. 1 root root 130712 02-26 13:31 /usr/bin/sudo

可执行文件上的suid标志允许二进制程序运行setuid()系统调用,无论执行者是谁- root用户还是非根用户。

其余的则取决于各个二进制程序的指令和配置。对于sudo,它解析一个配置文件(通常是/etc/sudoers),以确定是否继续升级。

在某些文件中,时间戳信息仅限于根用户。示例服务器中的以下示例演示如何从sudo升级提供时间戳信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[artur@asus-ux21e ~]$ sudo ls -l /var/db/sudo/artur
total 12
-rw-------. 1 root artur 48 04-24 14:07 0
-rw-------. 1 root artur 48 04-24 11:27 1
-rw-------. 1 root artur 48 04-24 11:26 2
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/126914

复制
相关文章
ClickHouse在苏宁用户画像场景的最佳实践
---- 关注 「 Cli肉眼品世界 」 , 后台回复 cksn 可获取PDF
肉眼品世界
2021/06/08
1.3K0
无限滚动加载最佳实践
无限滚动(Infinite scrolling),有时候被称为无尽滚动(endless scrolling),这种技术允许用户在大量内容上滚动,眼中看不到结束的地方。这种技术很简单,就是页面往下滚动的时候保持刷新。
疯狂的技术宅
2019/03/27
4.3K0
无限滚动加载最佳实践
管理Salesforce用户的最佳实践
管理Salesforce用户看起来不困难,但是今天我们还是会介绍下管理Salesforce用户的最佳实践。使用不正确的方法管理用户和许可证可能导致企业数据完整性出现问题。最佳实践应用于Salesforce的很多地方,用户管理的方法也同样适用。
臭豆腐
2019/04/16
1.1K0
Java延迟加载的最佳实践应用示例!
作者 | S.L 来源 | http://r6d.cn/abGzy 代码中的很多操作都是Eager的,比如在发生方法调用的时候,参数会立即被求值。总体而言,使用Eager方式让编码本身更加简单,然而使用Lazy的方式通常而言,即意味着更好的效率。 延迟初始化 一般有几种延迟初始化的场景: 对于会消耗较多资源的对象:这不仅能够节省一些资源,同时也能够加快对象的创建速度,从而从整体上提升性能。 某些数据在启动时无法获取:比如一些上下文信息可能在其他拦截器或处理中才能被设置,导致当前bean在加载的时候可能获取
程序猿DD
2023/04/04
7980
Java延迟加载的最佳实践应用示例!
微服务前端数据加载的最佳实践
目前在不少团队里已经逐步实践落地了微服务架构,比如前端圈很流行的 BFF(Backend For Frontend)其实就是微服务架构的一种变种,即让前端团队维护一套“胶水层/接入层/API层”的服务,调用后台团队提供的若干个微服务,将微服务的结果进行逻辑组装,从而包装出对外的 API。
lucifer210
2021/05/10
9870
微服务前端数据加载的最佳实践
【前端探索】图片加载优化的最佳实践
图片加载的优化,是前端性能优化中,最划算的一项工作,往往工作量和难度都不大,但却能给页面性能带来极大极大的提升。
luciozhang
2023/04/22
7040
【前端探索】图片加载优化的最佳实践
Kerberos 身份验证在 ChunJun 中的落地实践
Kerberos,在古希腊神话故事中,指的是一只三头犬守护在地狱之门外,禁止任何人类闯入地狱之中。
袋鼠云数栈
2022/12/16
1.6K0
PyTorch 最佳实践:模型保存和加载
PyTorch模型保存和加载有两种方法,官方最佳实践指南推荐其中一种,但似乎效果没啥区别。最近做模型量化,遇到一个意外的错误,才理解了最佳实践背后的原理,以及不遵循它可能会遇到什么问题。
McGL
2020/09/21
1.9K0
Jenkins 在 Kubernetes 上的最佳实践
Jenkins 是由 Java 编写的编排引擎,在 Full GC 时会 Stop The World(STW)。在大规模构建时,STW 可能会导致 Jenkins 无法处理新的请求。
陈少文
2021/06/05
1.1K0
BFF模式:微服务前端数据加载的最佳实践?
设想一个场景,你需要使用微服务构建电子商务应用程序。你可以为客户、订单、产品、购物车等提供微服务,微服务暴露 API 给前端使用。
winty
2021/04/29
1.9K0
BFF模式:微服务前端数据加载的最佳实践?
作者|Viduni Wickramarachchi 译者|吴留坡 策划|田晓旭 设想一个场景,你需要使用微服务构建电子商务应用程序。你可以为客户、订单、产品、购物车等提供微服务,微服务暴露 API 给前端使用。 但是,微服务提供给前端的数据可能不会按照前端需要的方式进行编排或过滤。 这种情况下,前端需要一些逻辑来重新处理这些数据,同时在用户端使用这样的逻辑会占用更多的浏览器资源。 在这样的情况下,我们可以使用 BFF 将一些前端逻辑转移到中间层,中间层就是 BFF。当前端请求一些数据时,它将调用 BFF 中
深度学习与Python
2023/04/01
7080
BFF模式:微服务前端数据加载的最佳实践?
前后端分离后,RESTful API 最佳实践
它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API。
芋道源码
2019/05/21
9470
前后端分离后,RESTful API 最佳实践
swagger 在 egg 项目中的最佳实践
swagger 是一个 RESTful 接口的基于 YAML、JSON 语言的文档和代码在线自动生成工具,它让部署管理 API 变得前所未有的简单。swagger 在 java 界广为使用,其他语言同样可以方便地集成使用。本文以基于 node.js 的企业级应用框架 egg.js 为例,集成 swagger 以根据函数注释自动生成接口文档。
CS逍遥剑仙
2021/05/24
3.7K0
干货 | DevSecOps在携程的最佳实践
作为业务覆盖机票、酒店、度假、汽车票、火车票、支付等各个方面,为全球用户提供服务的在线旅游网站,携程每周都会有数以万计的应用发布次数,如何保证每一次发布代码的安全性成为了DevSecOps实践中最大的挑战。
携程技术
2020/07/14
2.5K0
linux如何查看所有的用户和组信息?
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112960.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
6.9K0
linux如何查看所有的用户和组信息?
6个增加Salesforce用户采用率的最佳实践
想象下这个场景:你的公司正在实施Salesforce,作为一个系统管理员,你非常兴奋你所做的工作可以让Salesforce促进团队的工作。你导入数据,自定义接口,并根据用户的需求拓展新的功能。你还创建了很多自定义报表并设计了很多完美的仪表盘。你已经向主管演示了系统,他们很满意——你的经理也很喜欢你。你满怀信心并渴望分享你的专家经验,你推广系统并希望听到生产力和关键指标有很大突破的消息。但是很可惜你听到的并不是这些。
臭豆腐
2019/04/16
6000
一条命令查询所有mysql用户的授权信息
大大刺猬
2023/06/29
5301
一条命令查询所有mysql用户的授权信息
点击加载更多

相似问题

存储用户信息的最佳实践

10

返回用户信息的最佳实践

15

用户身份验证最佳实践

31

存储Facebook用户信息最佳实践?

19

在Redis中存储用户信息的最佳实践

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文