【技巧】Ubuntu临时授予用户sudo权限,并在一定时间后自动撤销

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

目录

背景说明

开始操作

at指令


背景说明

有时候普通用户需要使用sudo来执行一些操作,作为服务器管理员,需要盯着该用户使用完后再给他撤销sudo权限。当用户多起来的时候,这项工作就很麻烦了。通过自动定时撤销sudo权限,当我们给完了sudo之后就可以不用管了,甚至还可以做一个sudo权限申请的脚步,做到自动申请自动撤销。

开始操作

1、授予用户 sudo 权限 : 添加用户到 /etc/sudoers 文件或 /etc/sudoers.d/ 目录下的文件。这可以通过 visudo 工具或直接编辑相应文件来完成。(不建议直接操作/etc/sudoers)

例如,要为用户名为 username 的用户授予 sudo 权限,可以使用以下命令:

bash 复制代码
echo "username ALL=(ALL:ALL) ALL" | sudo tee -a /etc/sudoers.d/temporary_sudo

test用户原本没有sudo权限
将test用户添加到temporary_sudo中
再次执行就发现可以使用sudo权限了

2、设置一个计划任务来在 1 小时后撤销权限 : 使用 at 命令可以很容易地设置这样的计划任务。首先,确保 at 被安装,还需要启动 at 守护进程:

bash 复制代码
sudo apt install at -y
sudo systemctl enable --now atd

接着,设置一个任务来在 1 小时后删除先前创建的文件(注意,普通任务不需要加sudo,但由于这里是要操作/etc目录,所以at前面需要加上sudo,不然会执行失败):

bash 复制代码
echo "sudo rm /etc/sudoers.d/temporary_sudo" | sudo at now + 1 hours

这样,用户将立即获得 sudo 权限,然后在 1 小时后,计划任务会自动删除先前创建的文件,从而撤销该用户的 sudo 权限。

请注意,当对 /etc/sudoers 文件或 /etc/sudoers.d/ 目录中的文件进行更改时,一定要小心,因为不正确的更改可能会导致系统不稳定或者失去 sudo 访问权限。
测试1分钟后撤回sudo权限
到点后发现test的sudo权限确实被撤销了

at指令

at 命令的格式非常简单,基本格式如下:

bash 复制代码
at [选项] [时间]
选项 含义
-m 当 at 工作完成后,无论命令是否输出,都用 E-mail 通知执行 at 命令的用户。
-c 工作标识号 显示该 at 工作的实际内容。
-t 时间 在指定时间提交工作并执行,时间格式为 [[CC]YY]MMDDhhmm。
-d 删除某个工作,需要提供相应的工作标识号(ID),同 atrm 命令的作用相同。
-l 列出当前所有等待运行的工作,和 atq 命令具有相同的额作用。
-f 脚本文件 指定所要提交的脚本文件。
[表 1 at 命令选项及含义]
格式 用法
HH:MM 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。
Midnight(midnight) 代表 12:00 AM(也就是 00:00)。
Noon(noon) 代表 12:00 PM(相当于 12:00)。
Teatime(teatime) 代表 4:00 PM(相当于 16:00)。
英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。
MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 号。
now+时间 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。
[表 2 at 命令时间参数可用格式]

at 命令只要指定正确的时间,就可以输入需要在指定时间执行的命令。这个命令可以是系统命令,也可以是 Shell 脚本。

使用 atq 命令用于查看当前等待运行的工作,atrm 命令后者用于删除指定的工作:

bash 复制代码
atq
#9 2013-07-26 02:00 a root
#说明root用户有一个at任务在2013年7月26日02:00执行,工作号是9

atrm [工作号]
#删除指定的at任务
相关推荐
跃渊Yuey11 分钟前
【Linux】线程同步与互斥
linux·笔记
杨江11 分钟前
seafile docker安装说明
运维
舰长11513 分钟前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀19 分钟前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng28 分钟前
Linux 输出重定向
linux·运维
路由侠内网穿透.30 分钟前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居
树℡独32 分钟前
ns-3仿真之应用层(三)
运维·服务器·ns3
VekiSon1 小时前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
zl_dfq1 小时前
Linux 之 【进程信号】(signal、kill、raise、abort、alarm、Core Dump核心转储机制)
linux
Ankie Wan1 小时前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc