5.6 su命令与sudo服务

su命令,在不退出当前用户的情况下可以切换到其他用户,其中(-)表示完全切换到新的用户,包括环境变量,强烈建议加上(-)

# id 
uid=0(root) gid=0(root) groups=0(root)
# su - linuxprobe 
Last login: Mon Jan 17 01:14:31 CST 2022 on pts/0
$ id
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),10(wheel)

sudo命令把特定的命令权限赋予指定的用户,避免暴露root管理员密码

sudo服务中可用参数以及作用:

参数
作用

-h

列出帮助信息

-l

列出当前用户可执行的命令

-u 用户名或UID值

以指定的用户身份执行命令

-k

清空密码的有效时间,下次执行sudo时需要再次进行密码验证

-b

在后台执行指定的命令

-p

更改询问密码的提示语

sudo具有如下功能:

  • 限制用户执行指定的命令

  • 记录用户执行的每一条命令

  • 配置文件(/etc/sudoers)提供几种的用户管理、权限与主机等参数

  • 验证密码的后5分钟内(默认值)无须再让用户再次验证密码

只有root管理员才可以使用visudo命令编辑sudo服务的配置文件

使用visudo命令配置sudo命令的配置文件时,操作方法和vim编辑器用到的方法一致。 在sudo命令的配置文件中,按照下面的格式将第99行(大约)填上指定的信息:

跳转到指定行(首先按esc进入命令行模式):

1、ngg/nG (跳转到文件第n行,无需回车),此处为99gg

2、:n (跳转到文件第n行,需要回车)

3、vim +n filename (在打开文件后,跳转到文件的第n行)

4:显示行号:set nu

谁可以用使用 允许使用的主机 = (以谁的身份)可执行命令的列表

# visudo
linuxprobe ALL=(ALL) ALL

linuxprobe拥有了所有可执行命令的权限了

# su - linuxprobe
$ sudo -l

设置某用户只能使用root管理员的身份执行指定的命令,先用whereis 查找出命令的绝对路径 ,然后修改第99行参数:

# visudo
linuxprobe ALL=(ALL) /usr/bin/cat
# su - linuxprobe
$ cat /etc/shadow
cat: /etc/shadow: Permission denied
$ sudo cat /etc/shadow
[sudo] password for linuxprobe:

取消密码验证,跳转到第99行修改参数:

# whereis poweroff
poweroff: /usr/sbin/poweroff /usr/share/man/man8/poweroff.8.gz
# visudo
linuxprobe ALL=NOPASSWD: /usr/sbin/powerof 

测试关机命令是否需要输入密码:

# su - linuxprobe
# sudo poweroff

最后更新于

这有帮助吗?