su命令

Linux su命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码

使用方法:su [选项] [用户名称]

选项说明

  • -f 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh

  • -c 既command,变更为帐号为指定账号的使用者并执行指定指令(command)后再变回原来使用者,使用方法:su -c [指定命令] 用户名称

  • -m -p 既preserve、environment,执行 su 时不改变环变量

  • - -l login这个参数加了之后,就好像是重新login为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该指定用户为主,并且工作目录也会改变,如果没有指定用户,内定是 root

  • -s 指定要执行的shell (bash csh tcsh 等),预设值为 /etc/passwd 内的指定用户shell

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
wangjia3@CHJ-20190520VPS:~$ pwd
/home/wangjia3
wangjia3@CHJ-20190520VPS:~$ su root
Password:
root@CHJ-20190520VPS:/home/wangjia3# pwd
/home/wangjia3

root@CHJ-20190520VPS:~# su - wangjia3
wangjia3@CHJ-20190520VPS:~$ pwd
/home/wangjia3
wangjia3@CHJ-20190520VPS:~$ su - root
Password:
root@CHJ-20190520VPS:~# pwd
/root

注意 su 与 su - 的区别

sudo命令

sudo 表示 “superuser do”。 它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,大部分时候我们用它来以提升的权限来运行命令

以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行

使用方法:su [参数]

参数说明

  • -V 显示版本编号

  • -h 显示版本编号及指令的使用方式说明你

  • -l 显示出当前用户的权限

  • -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码

  • -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)

  • -b 将要执行的指令放在背景执行

  • -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell

  • -i Linux终端命令下改变用户对命令使用权限的命令,加载用户变量,并跳转到目标用户home目录

经常使用参数示例:

1
2
3
4
5
6
7
wangjia3@CHJ-20190520VPS:/$ sudo -l
[sudo] password for wangjia3:
Matching Defaults entries for wangjia3 on CHJ-20190520VPS:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User wangjia3 may run the following commands on CHJ-20190520VPS:
(ALL : ALL) ALL
1
2
3
4
5
6
7
8
wangjia3@CHJ-20190520VPS:~$ pwd
/home/wangjia3
wangjia3@CHJ-20190520VPS:~$ sudo -s
root@CHJ-20190520VPS:~# pwd
/home/wangjia3
root@CHJ-20190520VPS:~# sudo -i
root@CHJ-20190520VPS:~# pwd
/root

注意 -s 和 -i 的区别

sudo命令使用补充

通常我们使用普通用户使用一些命令是没有权限的,在使用这些没有权限的命令时需要切换到root用户,这样就需要告知普通用户root用户的密码,这样做是不安全的

例如我们执行shutdown命令时:

1
2
[frog@iZm5ehzqow4ijp2ya2g2drZ ~]$ shutdown -h 60
shutdown: Need to be root

显示需要使用root用户来操作此命令

这时我们可以使用visudo来修改sudo的配置文件,将此命令的使用权限赋给普通用户,来让普通用户有权限使用此命令,就可以不将root用户的密码告知与普通用户,安全的使用系统

visudo的使用时以vi开头的,其实就类似于使用 vi 打开了一个文件,使用操作与 vi 一致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@iZm5ehzqow4ijp2ya2g2drZ /]# visudo

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
...
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)

注意此文件最下方有几段关于使用sudo的设置说明,下面是设置说明:

1
2
3
4
5
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
  • %wheel 表示的是如果我们要设置的是用户组,则需要用 % 加上用户组名称,如果只是单个用户,就直接写用户名即可

  • ALL=(ALL) 表示在哪台主机上可以执行哪些命令,哪来主机指的是我们登陆的主机,Linux可以在本地登陆,也可以远程登陆,如果在本地登陆那么主机就是localhost,locachost是字符端登陆,如果是字符或远程都去登陆,就赋予 ALL 的权限。

如果只赋予一些命令,如上述中:# %users localhost=/sbin/shutdown -h now,意思是赋予了用户shutdown -h now 的命令的使用权限

如果有多条命令,就将命令用 “,” 隔开,例如上述段落中示例:%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom,表示赋予了用户mount、unmount命令

  • NOPASSWD: ALL 表示普通用户在使用管理员账户赋予它的这些命令时是否需要输入密码,这里 NOPASSWD: ALL 表示不需要输入密码,但是这种是不安全的,所以我们不建议此种设置类型

使用示例

我们现在配置普通用户 frog 被赋予使用 shutdown -h 60 的权限,使用visudo来设置,修改如下:

1
2
3
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
forg ALL=/sbin/shutdown -h 60

修改完成然后切换到frog用户执行此命令:

1
2
3
4
5
6
7
8
9
10
[root@iZm5ehzqow4ijp2ya2g2drZ /]# su -l frog
[frog@iZm5ehzqow4ijp2ya2g2drZ ~]$ shutdown -h 60
shutdown: Need to be root
[frog@iZm5ehzqow4ijp2ya2g2drZ ~]$ sudo /sbin/shutdown -h 60
[sudo] password for frog:

Broadcast message from root@iZm5ehzqow4ijp2ya2g2drZ
(/dev/pts/1) at 12:14 ...

The system is going down for halt in 60 minutes!

注意:直接执行还是会告诉你没有权限,我们需要使用sudo命令来执行root赋予权限的命令,需要使用命令的全路径,然后提示输入密码之后就执行成功啦

最后更新: 2019年07月27日 12:15

原始链接: https://jjw-story.github.io/2019/07/27/su-sudo命令/

× 请我吃糖~
打赏二维码