fixes remote code execution for su/sudo and strict remote umasks
* temporarily changes umask for creating temporary directories * otherwise parent directories may not get chmod'ed and end up unreadable refs #9902
This commit is contained in:
parent
e505a1b7c4
commit
d9aa14feea
2 changed files with 8 additions and 3 deletions
|
@ -144,7 +144,7 @@ class ActionBase:
|
||||||
|
|
||||||
tmp_mode = None
|
tmp_mode = None
|
||||||
if self._play_context.remote_user != 'root' or self._play_context.become and self._play_context.become_user != 'root':
|
if self._play_context.remote_user != 'root' or self._play_context.become and self._play_context.become_user != 'root':
|
||||||
tmp_mode = 'a+rx'
|
tmp_mode = 0755
|
||||||
|
|
||||||
cmd = self._connection._shell.mkdtemp(basefile, use_system_tmp, tmp_mode)
|
cmd = self._connection._shell.mkdtemp(basefile, use_system_tmp, tmp_mode)
|
||||||
self._display.debug("executing _low_level_execute_command to create the tmp path")
|
self._display.debug("executing _low_level_execute_command to create the tmp path")
|
||||||
|
|
|
@ -65,9 +65,14 @@ class ShellModule(object):
|
||||||
if system and (basetmp.startswith('$HOME') or basetmp.startswith('~/')):
|
if system and (basetmp.startswith('$HOME') or basetmp.startswith('~/')):
|
||||||
basetmp = self.join_path('/tmp', basefile)
|
basetmp = self.join_path('/tmp', basefile)
|
||||||
cmd = 'mkdir -p "%s"' % basetmp
|
cmd = 'mkdir -p "%s"' % basetmp
|
||||||
if mode:
|
|
||||||
cmd += ' && chmod %s "%s"' % (mode, basetmp)
|
|
||||||
cmd += ' && echo "%s"' % basetmp
|
cmd += ' && echo "%s"' % basetmp
|
||||||
|
|
||||||
|
# change the umask in a subshell to achieve the desired mode
|
||||||
|
# also for directories created with `mkdir -p`
|
||||||
|
if mode:
|
||||||
|
tmp_umask = 0777 & ~mode
|
||||||
|
cmd = '(umask %o && %s)' % (tmp_umask, cmd)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
|
||||||
def expand_user(self, user_home_path):
|
def expand_user(self, user_home_path):
|
||||||
|
|
Loading…
Reference in a new issue