我正在尝试授予特定用户超级用户权限,特别是 root 具有的全局写入权限。相关用户必须拥有这些权限,而无需使用sudo
。这是运行服务的用户,该服务试图将文件写入它没有写入权限的目录。我不知道那是什么目录,或者我只会根据需要更改其权限。我尝试按照此处的说明操作,但没有成功:在 Linux 中添加具有 root 访问权限的新用户。所讨论的用户是elasticsearch
。我在 中有以下几行/etc/sudoers
:
root ALL=(ALL:ALL) ALL
elasticsearch ALL=(ALL:ALL) ALL # Attempt to give elasticsearch the same permissions as root
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
这是我的证据,我elasticsearch
是该组的成员sudo
,但仍然没有写权限/
:
[16:22:32][root@pre-staging:/]$ groups elasticsearch
elasticsearch : elasticsearch sudo
[16:22:44][root@pre-staging:/]$ sudo -u elasticsearch touch foo
touch: cannot touch `foo': Permission denied
我为什么elasticsearch
没有我需要的写权限?
答案1
我不明白为什么 elasticsearch 没有我需要的写权限?
您在 sudoers 文件中写入的内容允许您在作为 elasticsearch 用户时获得 root 权限。但是,您在测试时所做的是从 root 用户更改为 elasticsearch 用户。
你做了什么:
root@pre-staging: sudo -u elasticsearch touch foo
你应该做的:
elasticsearch@pre-staging$ sudo -u root touch foo
... 但实际上,你不应该做任何这些事情。你真正应该做的是回答有关文件被触碰的问题。
我不知道那是什么目录,否则我只会根据需要更改其权限。
也有办法做到这一点,也许你应该这么做。查看斯特拉斯命令并使用它来跟踪所有打开的调用(strace -e trace=open
)
答案2
使用户帐户成为 root 的一个快速而丑陋的方法是编辑密码文件 /etc/passwd并将用户 ID 更改为 0。用户 ID 是第 3 个条目:
root:x:0:0:root:/root:/bin/bash
这通常不被推荐,但似乎使用正常的“Sudo”方法效果并不好。
编辑:还可以将用户帐户添加到根组,该组仅适用于文件访问。
编辑 /etc/passwrd 时也应小心,因为输入错误可能会造成灾难性的后果。