我想要配置无密码的 sudoedit,以便编辑除/etc
sudoers 文件本身之外的文件。
我尝试使用以下方法/etc/sudoers.d/sudoedit
:
%sudo ALL=(root) NOPASSWD: sudoedit ^/etc/(?!sudo).*$
但这似乎不起作用,因为 sudo 使用了没有负向前瞻功能的旧正则表达式引擎。
还有其他方法可以实现这一点吗?也许结合/etc
和否定!/etc/sudo
?
我想要配置无密码的 sudoedit,以便编辑除/etc
sudoers 文件本身之外的文件。
我尝试使用以下方法/etc/sudoers.d/sudoedit
:
%sudo ALL=(root) NOPASSWD: sudoedit ^/etc/(?!sudo).*$
但这似乎不起作用,因为 sudo 使用了没有负向前瞻功能的旧正则表达式引擎。
还有其他方法可以实现这一点吗?也许结合/etc
和否定!/etc/sudo
?
在 Linux Ubuntu 上,当我在终端运行sudo su
或sudo su -
系统创建一个具有新控制的新会话时pts
,即
ubuntu@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
ubuntu@ubuntu:~$
ubuntu@ubuntu:~$ uname -a
Linux ubuntu 5.15.0-124-generic #134-Ubuntu SMP Fri Sep 27 20:20:17 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ubuntu:~$
ubuntu@ubuntu:~$ ps
PID TTY TIME CMD
143254 pts/0 00:00:00 bash
143302 pts/0 00:00:00 ps
ubuntu@ubuntu:~$
ubuntu@ubuntu:~$ sudo su -
root@ubuntu:~#
root@ubuntu:~# ps
PID TTY TIME CMD
143304 pts/1 00:00:00 sudo
143305 pts/1 00:00:00 su
143306 pts/1 00:00:00 bash
143316 pts/1 00:00:00 ps
root@ubuntu:~#
这是预期的行为吗?
根据评论中的要求:
$ ps
PID TTY TIME CMD
146202 pts/0 00:00:00 bash
146231 pts/0 00:00:00 ps
$ sudo -s
root@ubuntu:/home/ubuntu# ps
PID TTY TIME CMD
146233 pts/1 00:00:00 sudo
146234 pts/1 00:00:00 bash
146240 pts/1 00:00:00 ps
我在 Docker 容器中运行 Amazon Linux 2023,我希望能够将一些自定义审计规则加载到内核中,并确保在容器重新启动时保留这些规则。我已将规则添加到该文件中,并可以在尝试使用该文件加载规则/etc/audit/rules.d/audit.rules
时看到它们。但是,当我运行此命令时,我得到的输出是cat
augenrules --load
/usr/sbin/augenrules: No change
You must be root to run this program.
即使使用 sudo ( ) 运行命令,我也收到相同的响应sudo augenrules --load
。我已经以 root 身份登录(whoami
返回root
)。
我想知道是否可能是因为auditd
服务未启动(在这种情况下,的输出augenrules
具有误导性),但我无法检查此服务的状态,因为service auditd status
(以及任何其他服务命令,如service auditd start
)命令给我
Redirecting to /bin/systemctl status auditd.service
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
ps -p1
表示 PID 1 是 bash
PID TTY TIME CMD
1 pts/0 00:00:00 bash
我猜这是因为我在容器中运行,但不知道这是否就是为什么augenrules
当我是 root 用户时即使使用也拒绝运行的原因sudo
。
什么原因导致了这种行为?
将变量添加LD_PRELOAD
到末尾/etc/profile
:
export LD_PRELOAD=/tmp/libhooks.so
LD_PRELOAD
然后我启动一个新的 ssh 会话,其中有一个变量:
[admin@Centos8 ~]$ env | grep LD_PRELOAD
LD_PRELOAD=/tmp/libhooks.so
但是,如果在保存变量时通过 sudo 运行此命令,则由于某种原因LD_PRELOAD
它不会被保存:
[admin@Centos8 ~]$ sudo --preserve-env env | grep LD_PRELOAD #doesn't output anything
这并不是一个真正的问题,只是我想了解的一个特点。
如果我得到一个 root shellsudo bash -l
然后运行less somefilename
我得到的信息更少只显示:
该帐户当前不可用。
(这不会显示为错误,而是显示在 less 内,就好像它是文件的内容一样。)
但是,如果我使用相同的 root shell 并sudo bash -l
运行,cat somefilename | less
那么我会看到文件的实际内容。
另外,如果我获得一个 root shell 并sudo bash
跳过-l
然后运行less somefilename
它将显示文件的内容。
Root登录被禁用;该/etc/passwd
线路root:x:0:0:root:/root:/sbin/nologin
根本sudo su -
不起作用。
但是,为什么该条目会对在文件上nologin
运行产生任何影响呢?为什么它只在直接在文件上运行而不是也应用于在其标准输入上运行时less
才会产生影响?less
而且,为什么只有bash -l
shell 才会出现这种情况?
(这是在 CentOS 7 系统上。)
我得到了这一行sudoers
:
Cmnd_Alias NVIDIA = /sbin/sh -c 'echo ON > /proc/acpi/bbswitch; modprobe nvidia; modprobe nvidia_drm modeset=1'
user ALL=(ALL) ALL, NOPASSWD: /sbin/systemctl suspend,NVIDIA
我的sudo -l
向我展示:
sudo -l
User user may run the following commands on devbox:
(ALL) ALL, NOPASSWD: /sbin/systemctl suspend, /sbin/sh -c 'echo ON > /proc/acpi/bbswitch; modprobe nvidia; modprobe nvidia_drm modeset\=1'
尽管如此,如果我尝试运行/sbin/sh -c 'echo ON > /proc/acpi/bbswitch; modprobe nvidia; modprobe nvidia_drm modeset=1'
- 仍然提示我输入密码。
我怀疑=
我在 nvidia 负载的争论中存在一些关于符号的问题modeset
?
在关闭互联网的情况下在终端中运行此命令:
while true;do sudo -n uptime 2>/dev/null;echo "`date`($((i++)))";sleep 0.1;done
现在打开互联网(这里是WIFI)。
现在日志每 5 到 10 秒就会发生一次......
如何让 sudo 忽略网络?
另外,为什么它会有这样的表现?
观测:ubuntu 22.04
PS.:我用来sudo -n uptime
警告终端是否具有 sudo 访问权限(我将其全部涂成红色)。所以我在终端中运行的每个命令都会遇到这个问题。
WIFI开启时的延迟日志:
Fri 5 Jan 00:07:41 -03 2024(0)
Fri 5 Jan 00:07:47 -03 2024(1)
Fri 5 Jan 00:07:52 -03 2024(2)
Fri 5 Jan 00:07:57 -03 2024(3)
Fri 5 Jan 00:07:57 -03 2024(4)
Fri 5 Jan 00:08:02 -03 2024(5)
Fri 5 Jan 00:08:02 -03 2024(6)
Fri 5 Jan 00:08:13 -03 2024(7)
Fri 5 Jan 00:08:18 -03 2024(8)
Fri 5 Jan 00:08:18 -03 2024(9)
Fri 5 Jan 00:08:23 -03 2024(10)
Fri 5 Jan 00:08:28 -03 2024(11)
Fri 5 Jan 00:08:28 -03 2024(12)
Fri 5 Jan 00:08:34 -03 2024(13)
Fri 5 Jan 00:08:39 -03 2024(14)
Fri 5 Jan 00:08:44 -03 2024(15)
Fri 5 Jan 00:08:44 -03 2024(16)
当 WIFI 关闭时:
Fri 5 Jan 00:11:45 -03 2024(21)
Fri 5 Jan 00:11:45 -03 2024(22)
Fri 5 Jan 00:11:46 -03 2024(23)
Fri 5 Jan 00:11:46 -03 2024(24)
Fri 5 Jan 00:11:46 -03 2024(25)
Fri 5 Jan 00:11:46 -03 2024(26)
Fri 5 Jan 00:11:46 -03 2024(27)
Fri 5 Jan 00:11:46 -03 2024(28)
Fri 5 Jan 00:11:46 -03 2024(29)
Fri 5 Jan 00:11:46 -03 2024(30)
Fri 5 Jan 00:11:47 -03 2024(31)
Fri 5 Jan 00:11:47 -03 2024(32)
Fri 5 Jan 00:11:47 -03 2024(33)
Fri 5 Jan 00:11:47 -03 2024(34)
Fri 5 Jan 00:11:47 -03 2024(35)
Fri 5 Jan 00:11:47 -03 2024(36)
Fri 5 Jan 00:11:47 -03 2024(37)
Fri 5 Jan 00:11:47 -03 2024(38)
Fri 5 Jan 00:11:47 -03 2024(39)
Fri 5 Jan 00:11:48 -03 2024(40)
Fri 5 Jan 00:11:48 -03 2024(41)
Fri 5 Jan 00:11:48 -03 2024(42)
Fri 5 Jan 00:11:48 -03 2024(43)
Fri 5 Jan 00:11:48 -03 2024(44)
Fri 5 Jan 00:11:48 -03 2024(45)
Fri 5 Jan 00:11:48 -03 2024(46)
Fri 5 Jan 00:11:48 -03 2024(47)
Fri 5 Jan 00:11:49 -03 2024(48)
Fri 5 Jan 00:11:49 -03 2024(49)
Fri 5 Jan 00:11:49 -03 2024(50)
Fri 5 Jan 00:11:49 -03 2024(51)
Fri 5 Jan 00:11:49 -03 2024(52)
Fri 5 Jan 00:11:49 -03 2024(53)
Fri 5 Jan 00:11:49 -03 2024(54)
Fri 5 Jan 00:11:49 -03 2024(55)
Fri 5 Jan 00:11:50 -03 2024(56)
Fri 5 Jan 00:11:50 -03 2024(57)
Fri 5 Jan 00:11:50 -03 2024(58)
Fri 5 Jan 00:11:50 -03 2024(59)
Fri 5 Jan 00:11:50 -03 2024(60)
Fri 5 Jan 00:11:50 -03 2024(61)
Fri 5 Jan 00:11:50 -03 2024(62)
Fri 5 Jan 00:11:50 -03 2024(63)
Fri 5 Jan 00:11:50 -03 2024(64)
Fri 5 Jan 00:11:51 -03 2024(65)
Fri 5 Jan 00:11:51 -03 2024(66)
Fri 5 Jan 00:11:51 -03 2024(67)
Fri 5 Jan 00:11:51 -03 2024(68)
Fri 5 Jan 00:11:51 -03 2024(69)
Fri 5 Jan 00:11:51 -03 2024(70)
Fri 5 Jan 00:11:51 -03 2024(71)
Fri 5 Jan 00:11:51 -03 2024(72)
Fri 5 Jan 00:11:52 -03 2024(73)
Fri 5 Jan 00:11:52 -03 2024(74)
Fri 5 Jan 00:11:52 -03 2024(75)
Fri 5 Jan 00:11:52 -03 2024(76)
Fri 5 Jan 00:11:52 -03 2024(77)
Fri 5 Jan 00:11:52 -03 2024(78)
Fri 5 Jan 00:11:52 -03 2024(79)
Fri 5 Jan 00:11:52 -03 2024(80)
Fri 5 Jan 00:11:52 -03 2024(81)
Fri 5 Jan 00:11:53 -03 2024(82)
Fri 5 Jan 00:11:53 -03 2024(83)
Fri 5 Jan 00:11:53 -03 2024(84)
Fri 5 Jan 00:11:53 -03 2024(85)
Fri 5 Jan 00:11:53 -03 2024(86)
Fri 5 Jan 00:11:53 -03 2024(87)
Fri 5 Jan 00:11:53 -03 2024(88)
Fri 5 Jan 00:11:53 -03 2024(89)
Fri 5 Jan 00:11:54 -03 2024(90)
Fri 5 Jan 00:11:54 -03 2024(91)
Fri 5 Jan 00:11:54 -03 2024(92)
Fri 5 Jan 00:11:54 -03 2024(93)
Fri 5 Jan 00:11:54 -03 2024(94)
Fri 5 Jan 00:11:54 -03 2024(95)
Fri 5 Jan 00:11:54 -03 2024(96)
Fri 5 Jan 00:11:54 -03 2024(97)
Fri 5 Jan 00:11:54 -03 2024(98)
Fri 5 Jan 00:11:55 -03 2024(99)
'!' 的限制 操作员
使用“!”从 ALL 中“减去”命令通常无效 操作员。用户可以通过将所需的命令复制到不同的名称然后执行该命令来轻松规避此问题。例如:
账单 ALL = ALL, !SU, !SHELLS
并不能真正阻止 bill 运行 SU 或 SHELLS 中列出的命令,因为他可以简单地将这些命令复制到不同的名称,或者使用编辑器或其他程序的 shell 转义。因此,此类限制最多应被视为建议性的(并通过政策强化)。
一般来说,如果用户拥有 sudo ALL,则没有什么可以阻止他们创建自己的程序,为他们提供 root shell(或制作自己的 shell 副本),无论任何“!”如何 用户规范中的元素。
什么是
他可以简单地将这些命令复制到不同的名称
意思是?是命令别名还是其他什么?
按照此解决方案,我想授予用户daemon
执行/bin/date
. 这是我所做的:
apache2
找到生成时使用的用户:
# ps | grep httpd
252 root /usr/bin/httpd -k start
260 daemon /usr/bin/httpd -k start
262 daemon /usr/bin/httpd -k start
264 daemon /usr/bin/httpd -k start
467 root grep httpd
找到正确的路径date
:
# which date
/bin/date
使用visudo
添加以下行:
Cmnd_Alias DATE=/bin/date
daemon ALL=NOPASSWD: DATE
重启
测试新权限:
# sudo -u daemon date -s "2023-09-09 10:16:00"
date: can't set date: Operation not permitted
Sat Sep 9 10:16:00 UTC 2023
我的语法有什么问题吗?我也尝试过:
ALL ALL=NOPASSWD: DATE
但都是一样的。这是一个 Buildroot 环境。
我不会添加sudo
RPi 3 B+ 的 Buildroot 环境,因为我只需要apache2
使用date -s TIME
.
有没有办法在不安装和配置的情况下授予此权限sudo
?