su切换身份命令学习
LINUX中su、su - 、sudo命令的区别以及sudo配置
1.su命令
su
即switch 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 ~]$
【总结】:这种方式切换后会重新初始化目标用户配置文件,即会同时变更工作目录,以及HOME
,SHELL
,USER
,LOGNAME
。此外,也会变更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