Linux命令:sudo

1 sudo命令

1.1 简介

sudo, sudoedit — 以另一个用户的身份执行命令。sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。换句话说通过此命令可以让非root的用户运行只有root才有权限执行的命令。
如何确定用户运行sudo时的权限呢?这个是安全策略的功能。默认的安全策略是sudoers,通过文件/etc/sudoers或LDAP进行配置,一般使用visudo来进行修改。安全策略大致功能如下:

  • 安全策略决定了用户运行sudo时拥有的权限(如果有的话)。策略可能要求用户通过密码或其他身份验证机制进行身份验证。如果需要身份验证,如果用户未在规定的时间内输入密码,sudo将退出。这个限制是特定于策略的;对于sudoers安全策略,默认的密码提示超时时间为0分钟。
  • 安全策略可能支持凭据缓存,允许用户在一段时间内再次运行sudo而无需进行身份验证。默认情况下,sudoers策略在每个终端上缓存凭据15分钟。
    配置文件是:/etc/sudo.conf

1.2 说明

使用:
sudo -h | -K | -k | -V
sudo -v [-ABknS] [-g group] [-h host] [-p prompt] [-u user]
sudo -l [-ABknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
sudo [-ABbEHnPS] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-r role] [-t type] [-T timeout] [-u user] [VAR=value] [-i | -s] [command]
sudoedit [-ABknS] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-r role] [-t type] [-T timeout] [-u user] file …

options:

  • -A,–askpass:默认情况下是通过读取用户终端输入的密码,如果指定了-A(askpass)选项,则会执行一个(可能是图形化的)辅助程序来读取用户的密码,并将密码输出到标准输出。如果设置了SUDO_ASKPASS环境变量,它将指定辅助程序的路径。
  • -b, --background:在后台运行给定的命令
  • -D directory, --chdir=directory:切换到指定目录运行
  • -e, --edit:编辑一个或多个文件而不是运行命令
  • -E 或 --preserve-env:保留用户的环境变量
  • -u 用户名:以指定用户的身份执行命令。
  • -i login:以目标用户的密码数据库条目中指定的shell作为登录shell来运行。sudo尝试在运行shell之前更改到该用户的家目录。
  • -h host,–host=host:如果安全策略插件支持远程命令,则在指定的主机上运行命令
  • -l,–list:列出当前用户可以执行的命令
  • -k 或 --kill:杀死由 sudo 启动的进程
  • -S:通过管道传递密码,不从标准输入读取密码
  • -s, --shell:运行指定shell
  • -T timeout, --command-timeout=timeout:设置命令超时时间
  • -V, --version:输出版本信息

1.3 实例

1、基本命令使用

# 执行一个命令
sudo ls /usr/local

# 以另一个用户身份执行命令:
sudo -u root ls /root

# 以www用户身份编辑文件
sudoedit -u www ~www/htdocs/index.html

# 列出可以执行的命令:
sudo -l

# 以 root 用户身份执行 shell
sudo -i

2、允许sudo权限

sudo visudo
### 输入
test ALL=(ALL) ALL
# 注意,这里使用的是 nano 命令,退出保存的快捷键为:Ctrl + X、Y 和 Enter 按键来保存修改
# 说明
test 表示用户名
第一个 ALL 指示允许从任何终端、机器访问 sudo
第二个 (ALL) 指示 sudo 命令被允许以任何用户身份执行
第三个 ALL 表示所有命令都可以作为 root 执行

3、在 Vim 里面使用 sudo 命令

# 很多时候,在编辑系统的配置文件时,在保存时才意识到需要 root 访问权限来执行此操作。因为这个可能丢失对文件的改动。此时可以在 Vim 中使用下面的命令来解决这种情况:
:w !sudo tee %
# 执行完上述操作后,之间 :q! 退出,再查看文件已经是修改后的了

### 说明:
冒号 (:) 表明处于 Vim 的退出模式
感叹号 (!) 表明正在运行 shell 命令
sudotee 都是 shell 命令
百分号 (%) 表明从当前行开始的所有行

4、使用sudo执行多个命令

sudo -- bash -c 'pwd; hostname; whoami'
# 说明:
双连字符 (--) 停止命令行切换
bash 表示要用于执行命令的 shell 名称
-c 选项后面跟着要执行的命令

5、无密码运行shell

当第一次执行 sudo 命令时,它会提示输入密码,默认情形下密码被缓存 15 分钟。但是,可以避免这个操作,并使用 NOPASSWD 关键字禁用密码认证
sudo visudo
### 添加以下内容
test ALL=(ALL) NOPASSWD: ALL

6、限制用户执行某些命令

# 限制 sudo 用户只执行某些命令。如:下面的行只允许执行 echo 和 ls 命令 。
test ALL=(ALL) NOPASSWD: /bin/echo /bin/ls

扩展:sudo命令和su命令

我们知道还有一个 su 命令可以实现用户切换,也相当于是提权了,但是两者有什么区别呢?

  • su 命令:如果切换到root用户,需要root用户的密码;而 sudo 命令提权,只需要输入当前普通用户的密码即可
  • su命令:无法控制用户的访问权限,即只能使用哪些命令;而 sudo 可以控制用户的访问,限制用户只执行某些命令
  • su命令:无法知道用户做了哪些操作;而 sudo 用户的所有活动都会被记录下来,因此我们可以随时审查进行了哪些操作。默认日志路径为:/var/log/auth.log
  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值