【linux命令】 su root 、su - root 和 sudo 的区别

概述

共同点:都是root用户的权限;

不同点:su仅仅取得root权限,工作环境不变,还是在切换之前用户的工作环境;sudo是完全取得root的权限和root的工作环境。

一、 su 切换用户

参见 【linux命令】su root 和 su - root区别

su是switch user或 substitute简称。

格式:su -l USERNAME(-l为login,即登陆的简写)

-l可以将l省略掉,所以此命令常写为su - USERNAME

三种方式切换到root的命令:su,su -和su - root

su等同于su root。

单纯使用su切换到root,读取变量的方式是non-login shell,很多环境变量都不会改变,尤其是是home,PATH(pwd查看当前切换后的初始目录),仅仅是切换到root身份,可通过env命令查看信息。

su - 是 su - root 缩写,是login shell方式,它是先以root身份登录然后再运行别的操作。可以通过命令exit或logout,或者是快捷键Ctr+D即可返回原用户身份。

假设仅切换到root做一次操作,在su后面加个-c參数,运行完这次操作后,会自动切换回自己身份。

这样存在缺点: su - root #需要root密码,共享root密码不太安全。 你需要提供 root的密码给别人

二、 sudo 提权

类似密码锁的访客功能:我有root密码,我可以临时给访客一个临时密码,该访客可以进入某个地方(不可以修改密码),但我可以撤销你的权限,这样等于给了别人权限,但可控,因为root密码一直在我自己手里

superuser do或 switch user do 的简写

格式:sudo -u USERNAME COMMAND

当普通用户通过sudo以root用户执行命令时,sudo后面的 -uUSERNAME可省略,即sudo COMMAND 即意为sudo以root用户执行。

sudo的运行流程:

1).当用户运行sudo时,系统于/etc/sudoers文件里查找该用户是否有运行sudo的权限;

2).若用户具有可运行sudo的权限,那么让用户输入用户自己的password(通常是用户密码,但也可能是目标用户的密码,或者也可以通过 NOPASSWD 标志来跳过密码验证)。

3).假设password正确。之后,sudo 创建一个子进程,调用 setuid() 来切换到目标用户,接着,它会在上述子进程中执行参数给定的 shell 或命令。

开始进行sudo后面的命令,root运行sudo不用输入password。

开始仅root能运行sudo,切换到root身份通过visudo命名查看/etc/sudoers这个配置文件,默认情况下 /etc/sudoers 是不能被任何人直接编辑的,因为它的权限是 440,虽然也可以对其赋予写权限后再编辑,但推荐使用 visudo 命令编辑该文件。visudo 命令可能默认会用 nano 编辑器打开配置文件,如果想修改打开时使用的默认编辑器,可以使用如下命令配置:

$sudoupdate-alternatives --config editor

或者直接指定环境变量

$sudoEDITOR=vim visudo

示例:

ubuntu  ALL=(ALL) ALL

第一列ubuntu 是用户账号,
第二列的ALL意思是登陆者的来源主机名,
第三列等号右边小括号里的ALL是代表能够切换的身份。
第四列ALL是可运行的命令。

使用命令visudo

USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS

1)语法1

root ALL =(ALL) ALL

用户 所有主机 所有角色 所有命令

2)语法2

%wheel ALL = (ALL) ALL

用户组 所有主机 所有角色 所有命令

实例:

username1 ALL = (ALL) ALL

username2 ALL=(ALL) /usr/bin/touch, /usr/sbin/useradd,(root) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

若设置命令为/bin/su -,只需执行一次sudo su - 即可切换成root身份。通过配置sudoers文件,授权其他普通用户,可以切换成其他用户身份去执行命令,而不必每次都加上sudo。

当连续使用sudo的时候,在一定时间内是不用再次输入password,是系统自己设定的,在五分钟之内运行sudo仅仅须输入一次password。

然后username1用户登录后执行:

su - root #必须有root密码

sudo su -

sudo su - root#只需要输入自身密码。

Mac上的sudo -i

sudo -i :切换用户到root

补充

[usera@node01 ~]$ sudo su - userb

[sudo] password for usera:

若希望不需输入密码:

sudo vim /etc/sudoers尾部添加

usera ALL=(ALL:ALL) NOPASSWD:ALL

Defaults 配置项:

使用 Defaults 配置,可以改变 sudo 命令的行为,如:

指定用户尝试输入密码的次数,默认值为3

Defaults passwd_tries=5

设置密码超时时间,默认为 5 分钟

Defaults passwd_timeout=2

默认 sudo 询问用户自己的密码,添加 targetpw 或 rootpw 配置可以让 sudo 询问 root 密码

Defaults targetpw

指定自定义日志文件

Defaults logfile=“/var/log/sudo.log”

要在自定义日志文件中记录主机名和四位数年份,可以加上 log_host 和 log_year 参数

Defaults log_host, log_year, logfile=“/var/log/sudo.log”

保持当前用户的环境变量

Defaults env_keep += “LANG LC_ADDRESS LC_CTYPE COLORS DISPLAY HOSTNAME EDITOR”

Defaults env_keep += “ftp_proxy http_proxy https_proxy no_proxy”

安置一个安全的 PATH 环境变量

Defaults secure_path=“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”

别名配置

设置别名

User_Alias PWMNG = manager1, manager2, manager3

Cmnd_Alias PWCMD = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root PWMNG ALL=(root) PWCMD

别名大致分为四种:

Host_Alias 主机别名

Cmnd_Alias 命令别名

User_Alias 用户别名,可以是用户,用户组

Runas_Alias 目的用户别名

配置示例:

主机别名

Host_Alias FILESERVERS = fs1, fs2

Host_Alias MAILSERVERS = smtp, smtp2

用户别名

User_Alias ADMINS = huoty, kong

命令别名

Cmnd_Alias SHUTDOWN = /sbin/reboot, /sbin/poweroff

Cmnd_Alias PKGMGMT = /usr/bin/dpkg, /usr/bin/apt-get, /usr/bin/aptitude

Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/iptables

Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /bin/mount, /bin/umount

Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

允许 ADMINS 用户执行包管理和关机命令

ADMINS ALL = PKGMGMT, SHUTDOWN

允许 sys 用户组中的用户使用 NETWORKING 等所有别名中配置的命令

%sys ALL = NETWORKING, PKGMGMT, SERVICES, STORAGE, DELEGATING, PROCESSES

命令参数

以下列举 sudo 命令的一些常用参数:

-l 列出当前用户所拥有的权限

-E 保持当前用户的环境变量

-H 设置 HOME 环境变量为目标用户的主目录

-u 以指定用户运行命令

-k 结束密码有效期限,即下次再执行时需要重新输入密码

– 停止解析命令行参数,即之后命令不再作为其控制餐宿

其他配置与使用技巧

查看 sudo 命令文件的信息如下:

$ ls -l /usr/bin/sudo

-rwsr-xr-x 1 root root 155008 Mar 13 2015 /usr/bin/sudo

可以发现 sudo 上启用了 setuid 位,即当任何用户运行这个二进制文件时,其将以 root 用户的权限运行。

sudo 无法使用 Shell 的内置命令。如 history 等:

$ sudo history

sudo: history: command not found

解决这个问题的办法是,临时切换到 root shell,并在那里执行任何命令,包括 Shell 的内置命令:

$ sudo bash

当前用户的命令别名不会被应用到 sudo。如果需要这样,可以在 ~/.bashrc 或者 /etc/bash.bashrc 中加入:

alias sudo='sudo ’

如果希望使用 sudo 一次执行多个命令,可以使用 bash -c,如:

$ sudo – bash -c ‘pwd; hostname; whoami’

参考

Linux命令权限操作:su、sudo
11 权限管理-su与sudo

<think>好的,我现在需要帮助用户了解如何在Linux系统中使用sudo进行提权操作。首先,我应该回顾用户提供的引用内容,确保引用的信息准确。用户提供了四个引用,涵盖了sudo的基本概念、配置方法、滥用提权以及版本漏洞。 首先,我需要解释sudo的基本用途,即允许普通用户以root权限执行命令。根据引用[1][2],sudo是系统管理工具,可以减少root登录时间,提高安全性。接下来,用户可能想知道如何配置sudo权限,这涉及到编辑/etc/sudoers文件,使用visudo命令,如引用[4]中提到的创建用户并配置权限的步骤。 然后,用户可能对提权的具体方法感兴趣。引用[3]提到旧版本sudo的漏洞,但需要注意用户是否在询问合法配置还是漏洞利用。根据问题中的“使用方法”,应该聚焦于合法配置。需要详细说明如何通过sudoers文件授权用户或用户组,使用语法如“username ALL=(ALL) ALL”,以及别名设置。 此外,用户可能想知道实际提权操作的例子,比如如何安装软件或修改系统文件。需要提供具体命令示例,如sudo apt update,并强调密码输入的必要性(如果配置需要)。 还要注意安全性问题,比如最小权限原则,避免滥用。引用[4]中的批量用户授权可能对用户有帮助,可以提到设置别名组权限的方法。 最后,生成相关问题需要考虑用户可能进一步询问的内容,比如配置错误的风险、不需要密码的sudo命令设置,或者如何检查sudo权限。需要确保问题覆盖配置、使用案例、安全注意事项故障排除等方面。 总结回答结构:先介绍sudo的作用,再分步骤说明配置方法,包括编辑sudoers文件、语法示例、实际命令使用,然后讨论安全注意事项,最后提供相关问题。</think>### 如何使用 `sudo` 进行提权操作? #### 1. **`sudo` 的基本作用** `sudo`(superuser do)是Linux系统中允许普通用户以超级用户(root)权限执行特定命令的工具。其核心目标是**最小化直接使用root账户的风险**,同时提供灵活的系统管理权限分配[^1][^2]。 --- #### 2. **配置 `sudo` 提权的步骤** ##### (1) 编辑 `/etc/sudoers` 文件 使用 `visudo` 命令(避免语法错误导致系统故障): ```bash sudo visudo ``` 在文件中添加授权规则,例如: ```bash # 允许用户redhat执行所有命令且无需密码 redhat ALL=(ALL) NOPASSWD: ALL # 允许组admin执行apt命令(需输入自身密码) %admin ALL=(root) /usr/bin/apt ``` *注意:* `ALL=(ALL)` 表示可以以任何用户身份执行命令,`NOPASSWD` 表示无需密码[^4]。 ##### (2) 用户或组权限示例 - **单用户授权**:`username ALL=(ALL) ALL` - **用户组授权**:`%groupname ALL=(ALL) /usr/sbin/systemctl` - **限制命令路径**:避免使用通配符(如`ALL`)时过度授权。 --- #### 3. **实际提权操作示例** - **安装软件**(需root权限): ```bash sudo apt install nginx ``` - **修改系统配置**: ```bash sudo nano /etc/network/interfaces ``` - **重启服务**: ```bash sudo systemctl restart sshd ``` *若配置了`NOPASSWD`,执行时无需输入密码*[^4]。 --- #### 4. **安全注意事项** - **最小权限原则**:仅授予必要的命令权限,例如仅允许`/usr/bin/apt`而非`ALL`[^2]。 - **审计日志**:所有`sudo`操作会记录在`/var/log/auth.log`,便于追踪异常行为。 - **漏洞防范**:避免使用低版本`sudo`(如≤1.8.28可能存在提权漏洞)[^3]。 --- #### 5. **验证当前用户的 `sudo` 权限** ```bash sudo -l ``` 输出示例: ``` 用户 redhat 可以在 ALL 主机上以 root 身份运行所有命令 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值