linux sudo命令说明

介绍

sudo = superuser do,允许授权用户以其他用户身份(默认 root)执行命令,而不需要登录 root 账号。

作用

临时获取管理员权限,区别于 su(切换完整 root 会话)。

语法

sudo [-选项] 命令

常用选项

参数 作用
-u <user> 指定以某个用户执行,默认root;例 sudo -u nginx ls
-i 模拟登录root,加载root环境变量,进入root shell(推荐)
-s 启动root shell,但不重新加载完整登录环境
-l 列出当前用户拥有的sudo权限
-k 清除sudo密码缓存,下次sudo必须重新输密码
-v 延长密码验证超时时间
-H 将HOME环境变量设为目标用户(root)的家目录
-n 非交互模式,不提示输入密码,无权限直接报错

例子

以root执行一条命令

sudo apt update

切换到root登录shell

sudo -i

cd命令不能用sudo

cd 命令是shell内置命令,不能用 sudo

所以要执行 sudo -i 切换root,然后再执行 cd 命令

以www-data用户执行命令

sudo -u www-data php index.php

密码缓存机制

默认:输入一次sudo密码后,5分钟内再次sudo不用重复输入。
这个超时时间可以在 /etc/sudoers 修改:

Defaults    timestamp_timeout=10  # 单位分钟,0=每次都要输;负数永久缓存(不推荐)

sudo vs su 区别

命令 原理 特点
sudo cmd 临时用root权限跑单条命令 不切换shell,风险更小;记录日志
sudo -i 登录root会话,输入当前登录用户的密码 等同于root登录,环境完全切换
su 切换用户,需要目标用户密码(root密码) 需要知道root密码;日志弱
su - 完整登录root,加载root环境 无

日志

sudo执行记录默认写入日志:

  • Debian/Ubuntu:/var/log/auth.log
  • CentOS/RHEL:/var/log/secure

查看sudo操作记录

CentOS
grep sudo /var/log/secure
Ubuntu
grep sudo /var/log/auth.log

原文出处:/show_1IX6tmCmDZVJ.html