linux:sudo选择特定用户身份执行某命令(集)-尊龙官方平台

linux:sudo选择特定用户身份执行某命令(集)

el/2024/3/25 16:54:16

linux:sudo选择特定用户身份执行某命令(集)

sudo = switch user do

sudo allows a permitted user to execute a command as the superuser or another user, as specified by the security policy.

有时我们有这样的需求:

让一个普通用户以某个特定的用户身份(大多数情况下是root)执行某个命令(或命令集合)。

当然我们可以通过su(switch user)来先切到特定用户,然后执行一些命令。

有没有更简单的方法?可以使用sudo。

此命令允许某指定用户“在安全策略许可范围内”(/etc/sudoers)以特定用户执行命令。

sudo的“安全策略文件”是/etc/sudoers,里面设定了很多的规则,用以描述某个用户拥有怎样的权限,可以执行怎样的命令。

如果要使用sudo,则必须预先配置/etc/sudoers策略文件。

/etc/sudoers文件有特定的语法规则,我们最好不要通过vi/vim等编辑器直接对其进行编辑(虽然也可行),而是通过visudo命令去修改。

visudo是一个类似vi/vim的编辑器,通过visudo命令修改/etc/sudoers策略文件,在退出保存时,visudo会对策略文件语法进行校验,以防止对策略文件写入不符合语法规范的错误配置信息,导致sudo异常。

简单来说:visudo = vi 对策略文件进行语法校验功能。

场景一:给普通用户jiang以root权限,能以root身份执行任何命令(例如执行passwd改密码)

我们首先要在root身份下执行visudo,编辑/etc/sudoers策略文件,给用户jiang以root权限。

1.直接命令行输入visudo,不带任何参数

2.在策略文件末尾附近,找到

## allow root to run any commands anywhere
root    all=(all)       all

3.新加入一行

jiang   all=(all)       all

4.保存退出

==>到此为止,用户jiang已经有“root权限”啦!如何使用这个权限呢?

例如我要用root身份创建一个example.json的空文件,我可以:

[jiang@localhost ~]$ sudo touch example.json

输出:

we trust you have received the usual lecture from the local system
administrator. it usually boils down to these three things:#1) respect the privacy of others.#2) think before you type.#3) with great power comes great responsibility.[sudo] password for jiang: 

此时应当输入用户jiang的密码。对的,没看错,是用户jiang,而不是用户root的密码。

虽然用户jiang是有权限指定权限的,但是系统怎么知道执行sudo的是不是真的是“用户jiang”本人呢?那就用jiang的密码来校验喽!

检查创建结果:

[jiang@localhost ~]$ ll *
-rw-r--r--. 1 root root 0 may 10 13:05 example.json

更为常见的是,通过sudo,切到root身份,然后执行操作。

[jiang@localhost ~]$ sudo su - root
[sudo] password for jiang: 
[root@localhost ~]# whoami
root

sudo如何使用:

$ sudo [-u user] cmds

可以通过-u来执行要切换到哪个身份。例如,要切换到sshd,可以执行sudo -u sshd cmds。

如果不指定-u,则使用root用户身份。

场景二:sudo免密

我们使用sudo时,在间隔一段时间后总会要求输入当前用户(jiang)的密码,用以供系统确认“执行sudo的确实是jiang本人”。

能否忽略掉这一验证,让系统不校验身份,总是认为执行root的是jiang本人?

通过执行visudo命令,修改/etc/sudoers策略文件:

将:

jiang all=(all) all

改为:

jiang all=(all) nopasswd: all

保存退出。

这次,无论间隔多长时间,系统都不需要再次对jiang用户进行密码鉴权,而总是认为“是jiang用户本人在执行sudo及后续命令”。

场景三:sudo 用户组 免密

我想要让所有归属于jiang的用户组的用户,都拥有同一权限。

visudo修改/etc/sudoers,

jiang all=(all) nopasswd: all

改为:

%jiang all=(all) nopasswd: all

注意jiang之前的百分号,指代后面的jiang是一个用户组。

现在有一个普通用户test1280:

[test1280@localhost ~]$ id
uid=501(test1280) gid=501(test1280) groups=501(test1280) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

将其加入到jiang用户组:

[root@localhost ~]# usermod -a -g jiang test1280

再查看test1280的用户组:

[test1280@localhost ~]$ id
uid=501(test1280) gid=501(test1280) groups=501(test1280),500(jiang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

在test1280用户身份下切到root用户身份:

[test1280@localhost ~]$ sudo su - 
[root@localhost ~]#

总结:

1.jiang all=(all) all

2.jiang all=(all) nopasswd: all

3.%jiang all=(all) nopasswd: all

当然啦,sudo以及visudo不仅仅有这些功能。以上列出的是最常见、最实用的功能点。


http://www.ngui.cc/el/5127105.html

相关文章

c/c :文件描述符与进程之间的关系

c/c:文件描述符与进程之间的关系 在unix中,文件在进程中通常抽象化为文件描述符(file descriptor)。 文件描述符是一个非负整数,可以理解为一个句柄。 我们可以通过open一个磁盘文件,获取一个文件描述符…

c/c :tcp服务压测客户端connect报错(cannot assign requested address)

c/c:tcp服务压测客户端connect报错(cannot assign requested address) 最近我们对自己的服务器进行了一次压测,在测试中出现客户端在调用connect时报错: cannot assign requested address(errno99&#x…

c/c :进程资源限制函数(getrlimit、setrlimit) shell-ulimit命令

c/c:进程资源限制函数(getrlimit、setrlimit)&& shell-ulimit命令 进程在操作系统内核中是一个独立存在的运行实体。 每个进程都有 一组 资源限制,限制进程对于系统资源的申请量。 可以通过 getrlimit 来获取当前进程某…

c/c :tcp的三次握手和四次挥手(实验)

c/c:tcp的三次握手和四次挥手(实验) 建立tcp连接需经过三次握手,释放tcp连接需经过四次挥手。 tcp报文段的首部中,比较重要的字段除了源端口、目的端口,还有以下几个字段与tcp连接的建立与释放相关&#…

tcp/ip:连接服务器失败(错误原因:connection refused)

tcp/ip:连接服务器失败(错误原因:connection refused) linux中,通过系统调用(system call) connect 连接指定服务器建立tcp连接。 connect 最常见的失败原因是 connection refused。 假设服务…

c/c :系统idle、进程cpu占用率、cpu核心数以及进程中的线程数

c/c:系统idle、进程cpu占用率、cpu核心数以及进程中的线程数 top命令可以显示当前进程的cpu占用率、cpu核心数以及系统忙闲程度(idle)。 他们之间有什么关系呢? 实验主机配置:物理cpu*4,逻辑cpu*8。 [r…

c:时间函数 localtime localtime_r

c:时间函数 localtime localtime_r localtime 和 localtime_r 的函数功能: converts the calendar time timep to broken-time representation 在调用 localtime 和 localtime_t 函数时,需特别注意: localtime 是不可重入函数&…

linux:strings 工具常用方法

linux:strings 工具常用方法 strings - print the strings of printable characters in files. strings prints the printable character sequences that are at least 4 characters long and are followed by an unprintable character. strings is mainly usef…

linux:ssh 信任免密登录

linux:ssh 信任免密登录 ssh 登录通常需要输入 remote 的用户名和密码。 可以通过在 local 和 remote 两侧进行一些信任配置,使得 local 通过 ssh 登录 remote 时不需要输入密码而直接登录。 主机: local: client192.168.44.150 [clientl…

lua:编译 lua 报错:error: readline/readline.h: no such file or directory

lua:编译 lua 报错:error: readline/readline.h: no such file or directory lua 版本:lua-5.3.5 在 lua-5.3.5 目录中执行 make linux,报错: gcc -stdgnu99 -o2 -wall -wextra -dlua_compat_5_2 -dlua_use_linux …
网站地图