linux sudo命令详解

简单的说,sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。

严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。sudo 支持插件架构的安全策略,并能把输入输出写入日志。第三方可以开发并发布自己的安全策略和输入输出日志插件,并让它们无缝的和 sudo 一起工作。默认的安全策略记录在 /etc/sudoers 文件中。而安全策略可能需要用户通过密码来验证他们自己。也就是在用户执行 sudo 命令时要求用户输入自己账号的密码。如果验证失败,sudo 命令将会退出。(注意,本文介绍的 sudo 命令运行在 ubuntu 14.04中。)

sudo 命令语法

?

sudo [-bhhpv][-s ][-u <用户>][指令]

?

sudo [-klv]

参数

  -b  在后台执行指令。

  -h  显示帮助。

  -h  将home环境变量设为新身份的home环境变量。

  -k  结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。

  -l  列出目前用户可执行与无法执行的指令。

  -p  改变询问密码的提示符号。

  -s  执行指定的shell。

  -u  <用户>  以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。

  -v  延长密码有效期限5分钟。

  -v  显示版本信息。

  -s  从标准输入流替代终端来获取密码

sudo 程序相关文件

?

/etc/sudoers

/etc/init.d/sudo

/etc/pam.d/sudo

/var/lib/sudo

/usr/share/doc/sudo

/usr/share/lintian/overrides/sudo

/usr/share/bash-completion/completions/sudo

/usr/bin/sudo

/usr/lib/sudo

基本配置

系统默认创建了一个名为 sudo 的组。只要把用户加入这个组,用户就具有了 sudo 的权限。
至于如何把用户加入 sudo 组,您可以直接编辑 /etc/group 文件,当然您得使用一个有 sudo 权限的用户来干这件事:

?

$ sudo vim /etc/group

在 sudo 组中加入新的用户,要使用逗号分隔多个用户。

linux sudo命令详解

或者您可以使用 usermod 命令把用户添加到一个组中:

?

$ sudo usermod -a -g sudo jack

上面的设置中我们把用户 jack 添加到了 sudo 组中,所以当用户 jack 登录后就可以通过 sudo 命令以 root 权限执行命令了!

详细配置

在前面的配置中我们只是把用户 jack 加入了 sudo 组,他就具有了通过 root 权限执行命令的能力。

现在我们想问一下,这是怎么发生的?是时候介绍如何配置 sudo 命令了!

sudo 命令的配置文件为 /etc/sudoers。(注意,/etc/sudoers 的配置内容十分丰富,我们仅做简单的介绍。要了解更多信息,请参考 man sudoers。)

编辑这个文件是有单独的命令的 visudo(这个文件我们最好不要使用 vim 命令来打开),是因为一旦你的语法写错会造成严重的后果,这个工具会替你检查你写的语法,这个文件的语法遵循以下格式:

who where whom command

说白了就是哪个用户在哪个主机以谁的身份执行那些命令,那么这个 where, 是指允许在那台主机 ssh 连接进来才能执行后面的命令,文件里面默认给 root 用户定义了一条规则:

root    all=(all:all)       all

root    表示 root 用户。

all     表示从任何的主机上都可以执行,也可以这样 192.168.100.0/24。

(all:all)   是以谁的身份来执行,all:all 就代表 root 可以任何人的身份来执行命令。

all     表示任何命令。

那么整条规则就是 root 用户可以在任何主机以任何人的身份来执行所有的命令。

现在我们可以回答 jack 为什么具有通过 root 权限执行命令的能力了。打开 /etc/sudoers 文件:

linux sudo命令详解

sudo 组中的所有用户都具有通过 root 权限执行命令的能力!

再看个例子:

?

nick  192.168.10.0/24=(root) /usr/sbin/useradd

上面的配置只允许 nick 在 192.168.10.0/24 网段上连接主机并且以 root 权限执行 useradd 命令。

设置 sudo 时不需要输入密码

执行 sudo 命令时总是需要输入密码事件很不爽的事情(抛开安全性)。有些应用场景也需要在执行 sudo 时避开输入密码的交互过程。

那么需要如何设置呢?其实很简单,只需要在配置行中添加 nopasswd: 就可以了:

?

******  all=(all) nopasswd: all

再试试看,是不是已经不需要输入密码了?

sudo 的日志

在 ubuntu 中,sudo 的日志默认被记录在 /var/log/auth.log 文件中。当我们执行 sudo 命令时,相关日志都是会被记录下来的。比如下图中显示的就是一次执行 sudo 命令的日志:

linux sudo命令详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:http://www.cnblogs.com/sparkdev/p/6189196.html

原创文章,作者:EJABE,如若转载,请注明出处:https://www.wangzhanshi.com/n/7599.html

(0)
EJABE的头像EJABE
上一篇 2025年1月1日 16:30:41
下一篇 2025年1月1日 16:30:43

相关推荐

  • Polysh命令实现多日志查询的方法示例

    一、Polysh简介 Polysh 是一个交互式命令,可以在一台服务器上批量的对一批服务器进行处理,运行交互式命令。Polysh可以同时登录多个远程主机,而不需要通过relay一台…

    Linux 2025年1月1日
  • linux系统挂载数据盘的方法(视频图文教程)

    本篇教程是以阿里云主机进行测试发布教程。   首先这是阿里云官方帮助中心制作的一个官方教程,大家看一边看视频一边看图文教程来操作; 图文教程: linux的云服务器数据盘未做分区和…

    2025年1月1日
  • Linux下文件的切分与合并的简单方法介绍

    linux下文件分割可以通过split命令来实现,可以将一个大文件拆分成指定大小的多个文件,并且拆分速度非常的快,可以指定按行数分割和安大小分割两种模式。Linux下文件合并可以通…

    Linux 2025年1月1日
  • linux系统中设置定时任务的实现方式

    1. 引入 1.1 日常开发中我们经常需要设置一些定时任务 举个栗子: 在进行Java Web开发时,通常我们采用Springboot 框架 我们可以通过 注解+ cron表达式,…

    2024年12月17日
  • 简单谈谈Linux内核定时器

    软件意义上的定时器最终依赖硬件定时器来实现, 内核在时钟中断发生后检测各定时器是否到期 , 到期后的定时器处理函数将作为软中断在底半部执行 。实质上,时钟中断处理程序会 换起TIM…

    Linux 2025年1月1日
  • 干货 | Linux新手入门好书推荐

    前言 经常有读者问小编可否推荐一些 linux 入门书籍,正好最近在知乎也看到类似的问题,如几个零碎的命令难以在 linux 环境中存活,所以如果要真正形成自己的知识体系,还是要靠…

    2025年1月1日
  • Linux如何使用ntp自动联网校准时间

    Linux使用ntp自动联网校准时间 1.查看当前时间 date 2.安装ntp yum install ntpdate -y 3.校准时间 选择合适的ntp服务器 网上可以搜到很…

    Linux 2024年12月17日
  • Linux模拟实现sleep函数

    先来说说工作原理,linux中的sleep函数能够让程序休眠一定的秒数,到时间后自动恢复运行。 实现思路 设定睡眠的秒数 睡眠(挂起) 恢复运行 实现机制 设定睡眠的秒数:采用al…

    2025年1月1日
  • 嵌入式 Linux 系统的组件

    大多数嵌入式设备都是为了在通常资源受限或低规格的设备上执行特定任务而构建的。 因此,大多数嵌入式开发人员需要去除不必要的库和模块,并为其特定设备和用例创建自定义分发。我们先来了解一…

    2025年1月1日
  • 教你快速清空 Linux 中的大文件

    1. 通过重定向到null清空文件内容 使用 shell 重定向null(不存在的对象)到文件的最简单方法来清空文件内容 # > access.log 2.使用true命令重…

    2025年1月1日

发表回复

登录后才能评论