【Linux】sudo提升权限(入门)

相关专栏:《Linux》


目录

1. sudo功能介绍

2. 任何人都能用 sudo 吗?

(1)查看配置文件/etc/sudoers

 (2)修改/etc/sudoers提权

3. 改变sudo输入密码时间

4. 显示sudo 密码

5.常见 sudo 命令

-k 参数

-s 参数

-u 参数

 参考文章


1. sudo功能介绍

sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

配置sudo服务时,可以直接编辑配置文件/etc/sudoers,亦可以执行visudo命令进行设置,一切妥当后普通用户便能够使用sudo命令进行操作了。


2. 任何人都能用 sudo 吗?

不是。

一个用户要能使用 sudo ,应该在 /etc/sudoers 文件里进行相应的配置。

以下命令都是在root账户进行

(1)查看配置文件/etc/sudoers

cat /etc/sudoers

 (2)修改/etc/sudoers提权

编辑  /etc/sudoers文件来实现此改变。要在文件中添加这样的一行:

[用户名]  ALL=(ALL:ALL) ALL

 此处以vim /etc/sudoers作演示

  • vim编辑/etc/sudoers
  • (需要对vim编辑器操作有一定了解)
vim /etc/sudoers
  • 找到Allows people in group wheel to run all commands这一行,在行后添加以下内容
  • 进入vim后可以输入“ :set nu  ”来设置行号方便查看,大概在100行(Centos 7)
  • Ubuntu 大概在20行左右
  • 编辑完成后使用“     :wq!”强制保存退出 
  • [用户名]  ALL=(ALL:ALL) ALL

下图是,/etc/sudoers界面


3. 改变sudo输入密码时间

如果你经常使用 sudo 命令,你肯定注意到过当你成功输入一次密码后,可以不用输入密码再运行几次 sudo 命令。

但是一段时间后,sudo 命令会再次要求你的密码。

这种现象跟运行 sudo 命令数目无关,跟时间有关。是的,sudo 默认在输入一次密码后 15 分钟内不会再次要求密码。15 分钟后,你会再次被要求输入密码。

然而,如果你想的话,你能改变这种现象。用以下命令打开 /etc/sudoers 文件:

vim /etc/sudoers

 找到这一行:

Defaults env_reset

 

然后在这行最后添加以下变量,[new-value] 为想要 sudo 会话持续的时间数。例如,设数值为 20。

Defaults env_reset,timestamp_timeout=[new-value]

 如果你希望每次使用 sudo 命令时都要求输入密码,你可以把这个变量赋值为 0 。想要 sudo 会话永远不过时,应赋值为 -1。

注意将 timestamp_timeout 的值赋为 “-1” 是强烈不推荐的。


4. 显示sudo 密码

你可能注意过,当 sudo 要求输入密码然后你开始输入时,不会显示任何东西 —— 甚至连常规的星号都没有。虽然这不是什么大问题,不过一些用户就是希望显示星号。

需要做的就是在 /etc/sudoers 文件里将下述的行:

Defaults env_reset

改成

Defaults env_reset,pwfeedback

然后保存文件。

现在,无论什么时候输入 sudo 密码,星号都会显示。

 


5.常见 sudo 命令

-k 参数

考虑下这种情况:输入密码后你刚刚运行了几个 sudo 驱动的命令。现在,如你所知,sudo 会话默认保持 15 分钟。假设在这会话期间,你需要让某些人访问你的终端,但你不想让他们可以使用 sudo ,你将会怎么做?

还好,有 -k 命令行参数允许用户取消 sudo 权限。这是 sudo 帮助页面man page对此的解释:

-k--reset-timestamp

不带任何命令使用时,撤销用户缓存的凭据。换句话讲,下一次使用 sudo 将会要求输入密码。使用这个参数不需要密码,也可以放到一个 .logout 文件中来撤销 sudo 权限。

当与一个命令,或者一个可能需要密码的操作一起用时,这个参数将会导致 sudo 忽略用户缓存的凭据。结果是 sudo 要求输入密码(如果这是被安全策略所要求的),而且不会更新用户缓存的凭据。

-s 参数

有时你的工作要求你运行一堆需要 root 权限的命令,你不想每次都输入密码。你也不想通过改变 /etc/sudoers 文件调整 sudo 会话的过期时限。

这种情况下,你可以用 sudo 的 -s 参数。这是 sudo 帮助页面对此的解释:

-s--shell

如果设置了 SHELL 环境变量或者调用用户的密码数据库指定了 shell,就运行该 shell 。如果指定了命令,命令将会通过 shell 的 -c 参数将命令传递给该 shell 执行。如果没有指定命令,会执行一个交互式 shell。

所以,基本上这命令参数做的是:

  • 启动一个新的 shell - 至于是哪一个 shell,参照 SHELL 环境变量赋值。如果 $SHELL 是空的,将会用 /etc/passwd 中定义的 shell。

  • 如果你用 -s 参数传递了一个命令名(例如 sudo -s whoami),实际执行的是 sudo /bin/bash -c whoami

  • 如果你没有尝试执行其他命令(也就是说,你只是要运行 sudo -s),你将会得到一个有 root 权限的交互式的 shell。

请记住,-s 命令行参数给你一个有 root 权限的 shell,但那不是 root 环境 —— 还是执行的你自己的 .bashrc 。例如,在 sudo -s 运行的新 shell 里,执行 whoami 命令仍会返回你的用户名,而非 root 。

-u 参数

sudo -u 用户名,以该用户的身份执行命令。

比如创建文件,文件的拥有者,所属组就是“这个指定用户”

 参考文章

技术|sudo 入门指南 (linux.cn)

  • 20
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值