diff options
author | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-06-24 11:01:22 +0200 |
---|---|---|
committer | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-06-25 13:41:41 +0200 |
commit | 6282cb41a8d3dac4995432baee1e25056a30909b (patch) | |
tree | 23564dbfeb89aa509e7944af07307311d213421c /src/live | |
parent | 1c9a13cd968559f89ba6b114c978eeb8c9629bed (diff) |
live: add restricted execution mode to shell/run
Try to find the script to run for a shell/run request in
/opt/opengnsys/shell/, restricted mode is enabled if the
script is found.
Excute the script without shell=True and executable=OG_SHELL in
restricted mode.
Restricted mode is a safer execution method as it only executes
code manually defined by the administrator.
Each script needs to define a shebang, this way more than just bash
is supported.
Diffstat (limited to 'src/live')
-rw-r--r-- | src/live/ogOperations.py | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/live/ogOperations.py b/src/live/ogOperations.py index a3997b3..d0129e8 100644 --- a/src/live/ogOperations.py +++ b/src/live/ogOperations.py @@ -281,11 +281,26 @@ class OgLiveOperations: self._restartBrowser(self._url_log) + shell_path = '/opt/opengnsys/shell/' + + restricted_mode = False + + for file_name in os.listdir(shell_path): + file_path = os.path.join(shell_path, file_name) + + if cmds[0] == file_name: + cmds[0] = file_path + restricted_mode = True + break + try: - ogRest.proc = subprocess.Popen(cmds, - stdout=subprocess.PIPE, - shell=True, - executable=OG_SHELL) + if restricted_mode: + ogRest.proc = subprocess.Popen(cmds, stdout=subprocess.PIPE) + else: + ogRest.proc = subprocess.Popen(cmds, + stdout=subprocess.PIPE, + shell=True, + executable=OG_SHELL) (output, error) = ogRest.proc.communicate() except OSError as e: raise OgError(f'Error when running "shell run" subprocess: {e}') from e |