软件免费下载网站有哪些银川网站推广
一、命令简介
sudo 命令允许系统管理员授权普通用户执行特定命令,并以管理员身份运行这些命令,通常需要输入用户自己的密码。
sudo 全称是"substitute user do",意为“替用户做”,也就是“以另一个用户的身份执行命令”。
- 优点
 
这种机制既提高了系统的安全性,又简化了权限管理。
- 工作原理
 
当用户执行 sudo 命令时,系统会检查/etc/sudoers 文件,该文件定义了哪些用户可以执行哪些命令。如果用户被授权,sudo 会要求他们输入自己的密码,然后执行指定的命令。
- 配置文件
 
sudo 的配置文件位于/etc/sudoers。你可以看到类似如下内容
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults        use_pty
root    ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d
 
%sudo ALL=(ALL:ALL) ALL 表示:赋予 sudo 用户组执行任何命令的权限。
- 编辑配置文件
 
编辑这个文件需要使用 visudo 命令,它会进行语法检查,防止配置错误。
sudo visudo
 
第四章会详细讲解如何配置 sudoers 文件。
二、命令参数
典型示例:
sudo apt update
 
选项:
- 
-u, --user=用户: 指定以哪个用户的身份来执行命令。 - 
-l, --list: 列出当前用户可以执行的命令。 - 
-s, --set-home: 设置 HOME 环境变量为目标用户的家目录。 - 
-i, --login: 以目标用户的环境变量登录。 - 
-v, --validate: 验证用户的密码,更新时间戳文件。 - 
-h, --help: 显示帮助信息。 
三、命令示例
- 以 root 权限执行 
apt update命令: 
sudo apt update
 
- 以特定用户 
john的身份执行 ls命令: 
sudo -u john ls
 
- 更新 
sudo时间戳 
sudo -v
 
不仅限于 sudo -v,只要执行了任意 sudo 命令并验证正确密码后,时间戳将更新:允许你在一段时间内继续执行 sudo 操作而无需再次输入密码。这是一种提高用户体验的机制。
四、sudoers 文件
sudoers 文件的配置规则用于定义哪些用户或用户组可以使用 sudo 命令以及他们能执行哪些命令。该文件有严格的语法要求,因此使用 visudo 编辑它以防止语法错误是非常重要的。
sudoers 文件的基本语法结构
-  
基本格式
[用户] [主机]=[运行身份] [命令]- 
[用户]:定义具有权限的用户或用户组。可以是单个用户名或% 开头的用户组名称。 - 
[主机]:表示从哪些主机可以使用 sudo 权限,通常设置为ALL,表示从所有主机都可以执行。 - 
[运行身份]:用户以哪个身份执行命令,通常是ALL,也可以是root 或其他用户。 - 
[命令]:指定用户可以运行的命令,可以是ALL 表示所有命令,也可以限制特定命令路径。 
 - 
 -  
具体示例
-  
允许用户
username 在所有主机上以任何用户身份运行所有命令:username ALL=(ALL:ALL) ALL -  
允许用户
username 以root 身份在所有主机上运行/bin/ls 命令:username ALL=(root) /bin/ls -  
允许用户
admin 在所有主机上以root 身份运行所有命令,但不需要输入密码:admin ALL=(ALL) NOPASSWD: ALL -  
允许用户组
admins 成员在所有主机上以root 身份运行所有命令:%admins ALL=(ALL:ALL) ALL -  
限制用户
user1 只能在server1 主机上以root 身份运行/usr/bin/vim:user1 server1=(root) /usr/bin/vim 
 -  
 -  
常用关键字
-  
ALL:用于表示任意主机、任意用户或任意命令。
 -  
NOPASSWD:用于表示在执行命令时不需要输入密码。
 -  
Cmnd_Alias:命令别名,简化复杂的命令集。例如:
Cmnd_Alias WEBADMIN = /usr/bin/systemctl restart apache2, /usr/bin/systemctl status apache2然后,可以允许用户
webadmin 执行这些命令:webadmin ALL=(ALL) WEBADMIN 
 -  
 -  
别名定义
sudoers 文件允许使用别名来管理权限,常见别名包括:- User_Alias:用户别名。
 - Runas_Alias:运行身份别名。
 - Host_Alias:主机别名。
 - Cmnd_Alias:命令别名。
 
示例:
User_Alias ADMINS = alice, bob Host_Alias WEBSERVERS = web1, web2 Cmnd_Alias SERVICE = /bin/systemctl restart ADMINS WEBSERVERS=(ALL) SERVICE 
重要配置示例
-  
允许普通用户使用 root 权限执行所有命令:
username ALL=(ALL:ALL) ALL -  
允许用户组执行命令:
%groupname ALL=(ALL:ALL) ALL -  
允许用户执行特定命令:
username ALL=(ALL) /usr/bin/ls, /usr/bin/cat -  
允许用户无需密码执行命令:
username ALL=(ALL) NOPASSWD: ALL 
注意事项
关于安全的建议:
- 仅为信任的用户和用户组授予 
sudo 权限,尤其是使用NOPASSWD 时。 - 始终使用 
visudo 编辑sudoers 文件以避免语法错误。 - 避免滥用 
sudo 权限,仅在需要时使用,以确保系统的安全性和稳定性。 
