我需要允许用户在没有 tty 的情况下运行无密码 sudo。
我有一个包含/etc/sudoers.d/我需要的特殊命令和设置的文件,因为我不喜欢直接编辑该sudoers文件。在该文件中,我有以下内容:
# My list of commands that the user can run passwordless
myUser ALL=(ALL) NOPASSWD:SETENV: /foo/bar /foo/zaz
# My new defaults.
Defaults exempt_group = myUser
Defaults !env_reset,env_delete-=PATH
Defaults: myUser !requiretty
Run Code Online (Sandbox Code Playgroud)
但是,当我su到用户并运行时,sudo -l我在默认值中得到了这个:
Matching Defaults entries for myUseron this host:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION
LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME …Run Code Online (Sandbox Code Playgroud) 为什么建议/etc/sudoers使用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
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.
Run Code Online (Sandbox Code Playgroud)
有什么特殊原因吗?
我曾经sudoedit创建一个文件:
$ sudoedit /etc/systemd/system/apache2.service
Run Code Online (Sandbox Code Playgroud)
但是当我去保存文件时,它把它写在一个临时目录(/var/temp/blahblah)中。到底是怎么回事?为什么不把它保存到系统目录?
sudo -e和之间有主要区别吗sudo vim?我已经设置了该sudoers文件,以便 vim 成为我的默认编辑器。两者之间有关键区别吗?另外,我应该从 切换到vim吗rvim?我尝试过,但我的配置文件有一些问题
我们需要在 Linux 上的 sudoers 文件中添加几个用户。除了以下内容之外,他们应该能够做任何 root 可以做的事情:
/nfsshare/config/etc/passwd/etc/sudoers或运行visudo以添加其他用户这可能吗?
我们知道使用 sudoedit 更安全*,但是如果我们在 sudoers 中有以下内容会发生什么坏事?
Cmnd_Alias FOO = /bin/ed, /usr/bin/ed, /usr/bin/vi
foouser LOCALHOST = NOPASSWD: NOEXEC: FOO
Run Code Online (Sandbox Code Playgroud)
“foouser”可以转义到 root 提示符吗?- 当然,除此之外,他现在可以编辑 /etc/shadow 文件,将自定义密码散列添加到 root 用户,在大约 3 秒内成为 root..
也许一些魔法使用 LD_PRELOAD 和 ed?具体如何?
*=sudo ed 将以 root 身份运行。但是 sudoedit 将以给定用户身份运行,编辑后的文件将在编辑之前/之后复制。
我已经开始使用sudoedit <file>而不是sudo vim <file>. 优点之一是它使用我的本地~/.vimrc. 但是,当使用 时sudo crontab -e,它会使用/root/.vimrc。有没有办法sudo crontab -e利用我的本地~/.vimrc?
这是一个相关的问题,关于使用sudoeditwith vimdiff。然而,取代crontab -e了vimdiff不起作用。
我正在用 Vim 编写一些脚本,我刚刚开始使用sudoedit.
问题是,当我:w写入临时文件时,除非我退出编辑器,否则无法对脚本进行任何测试。
我怎样才能强制更新原件,或者我错过了重点sudoedit?
为什么我不能编辑 root 拥有的文件,但在我个人目录深处的某个地方,它说:
Run Code Online (Sandbox Code Playgroud)sudoedit: existingFile: editing files in a writable directory is not permitted
虽然我定义了以下函数:
function sunano {
export SUDO_EDITOR='/usr/local/bin/nano'
sudoedit "$@"
}
Run Code Online (Sandbox Code Playgroud)
我像这样编辑:
sunano existingFile
Run Code Online (Sandbox Code Playgroud)
文件确实归 root 所有:
ls -l existingFile
Run Code Online (Sandbox Code Playgroud)
证明:
Run Code Online (Sandbox Code Playgroud)-rwxr-xr-x 1 root root 40 Jun 15 2015 existingFile
系统:Linux Mint 18.1 64 位 Cinnamon。
目标:定义Bash别名以在从模拟器以root模式打开文件时启动各种CLI和GUI文本编辑器。gnome-terminal
例如,以下别名似乎按预期工作:
alias sunano='sudo nano'
Run Code Online (Sandbox Code Playgroud)
alias suxed='sudo xed'
Run Code Online (Sandbox Code Playgroud)
他们都以root身份打开文件。
我有一个问题gksudo与sublime-text:
alias susubl='gksudo /opt/sublime_text/sublime_text'
Run Code Online (Sandbox Code Playgroud)
有时它有效。大多数时候它什么都不做。
我如何调试这种行为不一致的东西?它不输出任何东西。没有错误信息或类似信息。
gksudo 已在 Debian 中被弃用,也不再包含在 Ubuntu 18.04 Bionic 中,所以让我将这个问题重新表述为一个仍然有效的问题:
如何在 Linux 的 GUI(和 CLI)中正确编辑系统文件(以 root 身份)?
在这种情况下,我正确地定义为安全,例如,在文件编辑期间发生断电,另一个示例可能是 SSH 连接丢失等。