su切换身份命令学习

LINUX中su、su - 、sudo命令的区别以及sudo配置

 

图片

 

1.su命令

suswitch user,是“切换用户”的意思。它可以让一个用户切换到另一个用户的身份,例如切换到root用户来执行需要root权限的命令。su命令的基本语法如下:

su [选项] [用户名]

其中,选项可以是:

  • -c:后面跟着要执行的命令,而不是进入新的shell环境;
  • -l-:切换到新用户的环境变量,使当前shell环境与新用户的shell环境一致;
  • -s:执行新用户的默认shell

如果没有指定用户名,则默认切换到root用户。例如,要切换到root用户,可以使用以下命令:

[imoonrong@awvs ~]$ su
密码:111111
[root@awvs imoonrong]# 

然后输入root用户的密码即可。如果要切换到其他用户的身份,可以在su命令后面指定用户名,例如上面要切回到imoonrong用户:

[root@awvs imoonrong]# su imoonrong
[imoonrong@awvs ~]$ 

当前用户切换到imoonrong用户的身份。

【问题提出】:前面切换到root用户身份时,用pwd查看当前目录,仍然在imoonrong用户家目录下:

[root@awvs imoonrong]# pwd
/home/imoonrong
[root@awvs imoonrong]# 

即,这种方式切换用户:切换后不会初始化目标用户配置文件,即不会改变原用户的工作目录和用户的环境

2.su -命令

在Linux中,su - 命令与普通的 su 命令有所不同。其中的“-”选项表示切换到新用户的环境,这包括环境变量、工作目录等。具体来说,su - 命令的作用包括:

  • 切换到新用户的身份

  • 使用新用户的shell环境,即切换到新用户的家目录

  • 使用新用户的环境变量,包括PATH、HOME等。

这意味着,如果使用su - 命令切换到 root 用户,那么当前用户的环境变量和工作目录都将被改变,变成root用户的环境变量和工作目录。这可以用来避免一些权限问题,例如在使用sudo 命令时出现的权限问题。

su - 命令的语法与普通的su命令类似:

su - [选项] [用户名]

其中,选项可以是:

  • -c:后面跟着要执行的命令,而不是进入新的shell环境

如果没有指定用户名,则默认切换到 root 用户。例如,要切换到 root 用户,可以使用以下命令:

[imoonrong@awvs ~]$ su -
密码:
上一次登录:一 6月 19 10:52:40 CST 2023pts/0 上
[root@awvs ~]# 

然后查看切换后目录:

[root@awvs ~]# pwd
/root
[root@awvs ~]# 

如果要切换到其他用户的身份,可以在 su - 命令后面指定用户名,例如:

[root@awvs ~]# su - imoonrong
上一次登录:一 6月 19 10:55:58 CST 2023pts/0 上
[imoonrong@awvs ~]$

这会让当前用户切换到imoonrong用户的身份,并使用imoonrong 用户的环境变量和工作目录。

切换后,可以查看当前工作目录:

[imoonrong@awvs ~]$ pwd
/home/imoonrong
[imoonrong@awvs ~]$ 

【总结】:这种方式切换后会重新初始化目标用户配置文件,即会同时变更工作目录,以及HOMESHELLUSERLOGNAME。此外,也会变更PATH变量,改变了用户的环境。

3.sudo命令

Linux中,sudo命令可以让普通用户在需要root权限的时候临时获取root权限,从而执行一些需要root权限的操作,同时不需要root密码。sudo命令可以限制哪些用户可以执行哪些命令,并且可以记录每个用户执行过哪些命令。

sudo命令的语法如下:

sudo [选项] 命令

其中,选项可以是:

  • -u:后面跟着要切换到的用户
  • -i:切换到目标用户的环境变量
  • -s:执行目标用户的shell
  • -H:将HOME环境变量设置为目标用户的家目录
  • -E:保留当前用户的环境变量
  • -k:清除密码缓存

例如,要以root权限执行ls命令,可以使用以下命令:

[imoonrong@awvs ~]$ sudo ls

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] imoonrong 的密码:
bin  boot  dev etc  home  lib lib64  media  mnt  opt proc  root  run  sbin  srv  sys  tmp  usr  var
[imoonrong@awvs /]$ 

然后输入imoonrong的密码即可。如果当前用户没有sudo权限,则需要使用root用户或者能够使用sudo命令的其他用户来授权当前用户。

图片

如果要以其他用户的身份执行命令,可以使用 -u 选项,例如:

sudo -u tom ls

如果要切换到tom用户的环境变量,可以使用 -i 选项,例如:

sudo -u tom -i

如果要使用 tom用户的shell来执行命令,可以使用 -s 选项,例如:

sudo -u tom -s

4.sudo配置

linux中,sudo全称super user do,意思为干超级用户才能干的事,是一个系统权限管理命令,可以让非root的用户运行只有root才有权限执行的命令。

sudoers文件的位置一般在/etc/sudoers/etc/sudoers.d/目录下,但是不建议直接编辑sudoers文件,因为文件格式比较复杂,容易出错。建议使用visudo命令来编辑sudoers文件,这样可以在保存文件时进行语法检查,避免出现错误。

sudoers文件中的每行都是一条规则,每条规则由如下格式组成:

user host=(runas) command

图片

其中,各个字段的含义如下:

  • user:可以使用sudo命令的用户,可以是一个用户名、组名或者“%组名”的形式;
  • host:可以执行sudo命令的主机,可以是一个主机名、IP地址、网络地址或者“ALL”的形式;
  • runas:以哪个用户的身份执行命令,可以是一个用户名或者“ALL”的形式;
  • command:可以执行的命令,可以是一个完整的命令、一个命令路径或者“ALL”的形式。

例如,以下规则表示用户imoonrong可以在任何主机上以root用户的身份执行任何命令:

imoonrong ALL=(root) ALL

如果要让组admins中的用户可以在主机localhost上以apache用户的身份执行/etc/init.d/httpd命令,可以添加以下规则:

%admins localhost=(apache) /etc/init.d/httpd

sudoers文件中还可以使用一些特殊字符,例如:

  • “!”:表示除了某个命令以外的全部命令
  • “/”:表示以某个命令开头的所有命令
  • “*”:表示任意字符

例如,以下规则表示用户bob可以在主机localhost上以root用户的身份执行除了reboot以外的所有命令:

bob localhost=(root) !/sbin/reboot

需要注意的是,sudoers文件中的语法非常严格,只要有一个语法错误就可能导致文件无法使用。因此,在编辑sudoers文件时一定要小心,最好先备份原始文件,编辑完毕后再进行语法检查。

【补充】:sudo日志配置

1)在文件/etc/rsyslog.conf这个文件最后添加一行:local2.debug /var/log/sudo.log

2)在文件/etc/sudoers这个文件最后添加一行:Defaults logfile=/var/log/sudo.log

3)重新启动rsyslog服务:systemctl restart rsyslog

5.LINUX中su、 su - 、sudo三个命令的区别

命令作用切换用户的环境变量切换用户的工作目录切换用户的shell
su 临时切换到其他用户的身份 不切换,保持当前用户的环境变量 不切换,保持当前用户的工作目录 不切换,保持当前用户的shell
su - 临时切换到其他用户的身份 切换到新用户的环境变量 切换到新用户的家目录 切换到新用户的shell
sudo 以其他用户的身份执行命令 不切换,保持当前用户的环境变量 不切换,保持当前用户的工作目录 不切换,保持当前用户的shell

总的来说, su命令和 su - 命令都是用来切换到其他用户的身份,但su -命令会切换到新用户的环境变量和工作目录,而 su 命令则不会。sudo 命令则是以其他用户的身份执行命令,不会切换到其他用户的环境变量和工作目录。

图片

学习|生活|分享|积累|永不停步


 

请留下你指尖的温度

让太阳拥抱你

公众号:haopython

图片
imoonrong
收录于合集 #Python运维实践
 429
上一篇50 条有趣的 Python 一行代码(文末回复关键词获取MD及PDF格式文档)下一篇LINUX文件权限/访问模式
阅读 630
Python运维实践
 
 
 
posted @ 2023-08-25 10:11  往事已成昨天  阅读(171)  评论(0编辑  收藏  举报