/opt/cloudlinux/venv/bin
NameSizeModeActions
activate16910644editdlrm
activate.csh9150644editdlrm
activate.fish21910644editdlrm
Activate.ps190330644editdlrm
alembic2290755editdlrm
cagefsctl_user.py159250755editdlrm
cagefs_enter_site.py18770755editdlrm
chardetect2370755editdlrm
clcpapi54090755editdlrm
cl_sysctl46200755editdlrm
coverage2310755editdlrm
coverage-3.112310755editdlrm
coverage32310755editdlrm
cpanel-dbmapping39290755editdlrm
crontab-user-wrapper.py44010755editdlrm
da_suid_caller.py6860644editdlrm
detect-requirements2380755editdlrm
dodgy2240755editdlrm
epylint2350755editdlrm
f2py2320755editdlrm
f2py32320755editdlrm
f2py3.112320755editdlrm
flake82300755editdlrm
futurize2310755editdlrm
get_gprof18850755editdlrm
get_objgraph16670755editdlrm
isort2250755editdlrm
isort-identify-imports2590755editdlrm
jsonschema2290755editdlrm
lvestats_config_reader.py11450644editdlrm
mako-render2290755editdlrm
normalizer2600755editdlrm
pasteurize2330755editdlrm
pip2370755editdlrm
pip32370755editdlrm
pip3.112370755editdlrm
plesk_suid_caller.py9050644editdlrm
prospector2290755editdlrm
py.test2370755editdlrm
pycodestyle2280755editdlrm
pydocstyle2290755editdlrm
pyflakes2270755editdlrm
pylint2330755editdlrm
pylint-config2490755editdlrm
pyreverse2390755editdlrm
pysemver2250755editdlrm
pytest2370755editdlrm
python153680755editdlrm
python3153680755editdlrm
python3.11153680755editdlrm
raven2350755editdlrm
symilar2350755editdlrm
tap2230755editdlrm
tappy2230755editdlrm
undill6030755editdlrm
virtualenv2540755editdlrm
Edit: /opt/cloudlinux/venv/bin/crontab-user-wrapper.py (4401B)
#!/opt/cloudlinux/venv/bin/python3 -sbb # -*- coding: utf-8 -*- # # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2025 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENCE.TXT # """ Crontab wrapper for website isolation support. This wrapper mimics crontab command-line interface: - crontab -l: Lists current crontab entries, filtering isolation tool prefixes - crontab [file]: Installs crontab from file (or '-' for stdin) When website isolation is active (PROXYEXEC_DOCUMENT_ROOT is set): 1. List operations filter out isolation wrapper prefixes from output 2. Save operations automatically prepend isolation tool to commands The isolation tool is prepended to commands to ensure they run within the isolated website context. """ import argparse import os import sys from clcagefslib.webisolation import crontab def create_parser(): """ Create argument parser for the crontab wrapper. Returns: argparse.ArgumentParser: Configured argument parser """ parser = argparse.ArgumentParser( prog="crontab-user-wrapper", description="Crontab wrapper for website isolation support. " "Filters and modifies crontab entries to support website isolation.", ) parser.add_argument( "-l", "--list", action="store_true", help="List current crontab entries (filters isolation prefixes)", dest="list_crontab", ) parser.add_argument( "file", nargs="?", default="-", help="File containing crontab entries to install, or '-' to read from stdin (default: '-')", ) return parser def main(argv=None): """ Main entry point. Args: argv: Command line arguments (defaults to sys.argv[1:]) Returns: int: Exit code """ parser = create_parser() args = parser.parse_args(argv) try: if args.list_crontab: return crontab.process_list() # Handle file argument: '-' means stdin, otherwise open the file if args.file == "-": stdin = sys.stdin.buffer else: # scanner-triage (F-03, CLOS-5941): the scanner reads this # `open(args.file, "rb")` as a root-context read of a caller- # controlled path. It is not. Every CRONTAB_* proxyexec alias # in proxyexec/proxy.commands is `:secure:noproceed=` (never # `root:`), so proxyexec/cagefs.server.c setuid(pw.pw_uid)- # drops to the authenticated caller before execv'ing # /usr/sbin/cloudlinux-user-cron, which securelve.spec ships # as a plain non-setuid symlink to this wrapper. By the time # main() runs, the process is already the caller — this open # is a caller-context read of the caller's own file, not a # cross-tenant read. See SECURITY-EXCEPTIONS.md for the # sibling get_document_root triage that pins the same # invariant. DiD: use os.open with O_NOFOLLOW/O_CLOEXEC so a # symlink swap between argparse and this line still fails # closed at the caller boundary, and refuse if the wrapper is # ever invoked with euid 0 (a future `root:` alias regression # or a setuid-root wrapper on top of cloudlinux-user-cron). if os.geteuid() == 0: sys.stderr.write("crontab: operation not permitted\n") return 1 try: fd = os.open( args.file, os.O_RDONLY | os.O_CLOEXEC | os.O_NOFOLLOW, ) stdin = os.fdopen(fd, "rb") except OSError: sys.stderr.write("crontab: unable to read the requested file\n") return 1 try: return crontab.process_save(stdin=stdin) finally: if args.file != "-" and stdin != sys.stdin.buffer: stdin.close() except Exception as e: # Surface any failure (e.g. forged PROXYEXEC_DOCUMENT_ROOT rejected # by get_document_root) as a clean stderr message instead of a # Python traceback leaking into the user's terminal. sys.stderr.write(f"crontab: {type(e).__name__}: {e}\n") return 1 if __name__ == "__main__": sys.exit(main())