sudo: pass env variables without /usr/bin/env
Using /usr/bin/env as a frontend for the actual command prevents sudoers from restricting allowed commands and configuring detailed command environment.
This commit is contained in:
parent
eb7c6ad195
commit
9ff7ceb563
@ -121,7 +121,7 @@ class SystemCommand
|
|||||||
|
|
||||||
sig { returns(T::Array[String]) }
|
sig { returns(T::Array[String]) }
|
||||||
def command
|
def command
|
||||||
[*sudo_prefix, *env_args, executable.to_s, *expanded_args]
|
[*command_prefix, executable.to_s, *expanded_args]
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@ -154,15 +154,23 @@ class SystemCommand
|
|||||||
|
|
||||||
return [] if set_variables.empty?
|
return [] if set_variables.empty?
|
||||||
|
|
||||||
["/usr/bin/env", *set_variables]
|
set_variables
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { returns(T::Array[String]) }
|
sig { returns(T::Array[String]) }
|
||||||
def sudo_prefix
|
def sudo_prefix
|
||||||
return [] unless sudo?
|
|
||||||
|
|
||||||
askpass_flags = ENV.key?("SUDO_ASKPASS") ? ["-A"] : []
|
askpass_flags = ENV.key?("SUDO_ASKPASS") ? ["-A"] : []
|
||||||
["/usr/bin/sudo", *askpass_flags, "-E", "--"]
|
["/usr/bin/sudo", *askpass_flags, "-E", *env_args, "--"]
|
||||||
|
end
|
||||||
|
|
||||||
|
sig { returns(T::Array[String]) }
|
||||||
|
def env_previx
|
||||||
|
["/usr/bin/env", *env_args]
|
||||||
|
end
|
||||||
|
|
||||||
|
sig { returns(T::Array[String]) }
|
||||||
|
def command_prefix
|
||||||
|
sudo? ? sudo_prefix : env_previx
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { returns(T::Array[String]) }
|
sig { returns(T::Array[String]) }
|
||||||
|
|||||||
@ -54,8 +54,8 @@ describe SystemCommand do
|
|||||||
expect(Open3)
|
expect(Open3)
|
||||||
.to receive(:popen3)
|
.to receive(:popen3)
|
||||||
.with(
|
.with(
|
||||||
an_instance_of(Hash), ["/usr/bin/sudo", "/usr/bin/sudo"], "-E", "--",
|
an_instance_of(Hash), ["/usr/bin/sudo", "/usr/bin/sudo"], "-E",
|
||||||
"/usr/bin/env", "A=1", "B=2", "C=3", "env", *env_args, pgroup: nil
|
"A=1", "B=2", "C=3", "--", "env", *env_args, pgroup: nil
|
||||||
)
|
)
|
||||||
.and_wrap_original do |original_popen3, *_, &block|
|
.and_wrap_original do |original_popen3, *_, &block|
|
||||||
original_popen3.call("true", &block)
|
original_popen3.call("true", &block)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user