一、概念
Sudo 的全称为:super user do。 顾名思义:干超级用户才能干的事!所以 Sudo 最常用的功能就是提升一个命名的执行权限。
sudo 是 linux 系统管理指令,是允许系统管理员让普通用户执行一些或者全部的 root 命令的一个工具,如 halt,reboot,su 等等。这样不仅减少了 root 用户的登录和管理时间,同样也提高了安全性。
sudo 不是对 shell 的一个代替,它是面向每个命令的。
二、特性
它的特性主要有这样几点:
sudo 能够限制用户只在某台主机上运行某些命令。
sudo 提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
sudo 使用时间戳文件来执行类似的“检票”系统。当用户调用 sudo 并且输入它的密码时,用户获得了一张存活期为 5 分钟的票(这个值可以在编译的时候改变)。
sudo 的配置文件是 sudoers 文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在 /etc/sudoers,属性必须为 0440。
三、原理
在 sudo 于 1980 年前后被写出之前,一般用户管理系统的方式是利用 su 切换为超级用户。但是使用 su 的缺点之一在于必须要先告知超级用户的密码。
sudo 使一般用户不需要知道超级用户的密码即可获得权限。
首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”)
在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时 sudo 将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。
之后的一段时间内(默认为 5 分钟,可在 /etc/sudoers 自定义),使用 sudo 不需要再次输入密码。由于不需要超级用户的密码,部分 Unix 系统甚至利用 sudo 使一般用户取代超级用户作为管理帐号,例如 Ubuntu、Mac OS X 等。
四、sudo命令
sudo : 暂时切换到超级用户模式以执行超级用户权限,一般指的是 root 用户,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu 默认为一次时长 15 分钟。
su :切换到某某用户模式,提示输入密码时该密码为切换后账户的密码,用法为“su 账户名称”。如果后面不加账户时系统默认为 root 账户,密码也为超级账户的密码。没有时间限制。
sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout”。要求执行该命令的用户必须在sudoers 中才可以。
sudo su 运行 sudo 命令给 su 命令提权,运行 su 命令。要求执行该命令的用户必须在 sudoers 中才可以。
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
六、基本配置
useradd testuser
passwd testuser
chmod -v u+w /etc/sudoers
vim /etc/sudoers
testuser ALL=(ALL) NOPASSWD:ALL
如需新用户使用 sudo 时需要输密码
testuser ALL=(ALL) ALL
chmod -v u-w /etc/sudoers
如果要删除用户
userdel -r testuser
删除后 etc/sudoers 中还是存在 testuser 的 sudo 的配置,需要手动删除该配置