/opt/cloudlinux/venv/lib/python3.11/site-packages/lvemanager/__pycache__
NameSizeModeActions
config_parser.cpython-311.pyc49640644editdlrm
helpers.cpython-311.pyc20940644editdlrm
sudoers.cpython-311.pyc149110644editdlrm
__init__.cpython-311.pyc4180644editdlrm
Edit: /opt/cloudlinux/venv/lib/python3.11/site-packages/lvemanager/__pycache__/sudoers.cpython-311.pyc (14911B)
§ Fl™jX<ãó —dZddlmZddlmZddlmZddlZddlZddlZddlm Z ddl m Z m Z m Z mZddlmZmZdd lmZdd l mZdd lmZd Zd ZdZdZeddh¦«ZdZd„Zd„Zd„Z dd„Z!d„Z"d„Z#d„Z$d„Z%d„Z&d„Z'dS)u‚ clsudoers unix group management for lvemanager. Operator upgrade note (CLOS-4576, F-37): ``add_unix_user_to_sudoers()`` now fails closed when the ``clsudoers`` unix group has pre-existing members outside the legitimate set (``admins()`` + the user being added + package-owned runtime users vetted by ``_is_system_owned_user``). Previously, ``groupadd -f`` was silently idempotent and any stowaway primary-GID owners or ``gr_mem`` entries (left by manual admin steps or another RPM's post-install) were quietly elevated to passwordless sudo for selectorctl / cloudlinux-selector. Package-owned runtime users (``root``; the lvemanager RPM's ``lvemanager`` system user; DA-side ``lvemanager_`` variants) are exempted via ``_is_system_owned_user``, which requires the name to belong to the lvemanager package family AND the account's UID to fall in the system-UID range (< 1000). CLOS-5544 (F-30) closes the earlier regression where those names were seeded directly into the expected set and thereby short-circuited the UID check — a regular-UID account sharing a package-owned name (e.g. a legacy ``lvemanager`` UID 5000) would otherwise slip through the gate. After upgrading to a build that ships this change, the first admin-add operation on an AFFECTED host (one with non-package stowaways in the group) raises an exception from ``_assert_sudoers_group_clean()``. To recover, operators must either: * remove the stowaway entries from the ``clsudoers`` group (audit with ``getent group clsudoers`` and ``awk -F: '$4== {print $1}' /etc/passwd`` for primary-GID owners), OR * add those users via the panel's ``admins()`` interface (panel admin user list) so they are recognised as legitimate members before retrying. This is intentional — silent elevation of unaudited accounts is the vulnerability being closed; reverting to ``groupadd -f`` idempotence is not an acceptable workaround. é)Úprint_function)Údivision)Úabsolute_importN)Ú remount_proc)ÚadminsÚcpusersÚ getCPNameÚ is_reseller)Ú SysCtlConfÚSYSCTL_CL_CONF_FILE)ÚFeature)Úis_panel_feature_supported)ÚClsudoÚadminÚ clsupergidÚ clsudoersiçÚrootÚ lvemanager)Ú lvemanager_cóÖ‡—‰dkrdS‰tvptˆfd„tD¦«¦«}|sdS tj‰¦«jt kS#t$rYdSwxYw)uîReturn True if `name` is a known package-owned `clsudoers` member (always-allowed name OR an lvemanager-package-family name) AND lives in the system-UID range. Both conditions are required — a regular user named `lvemanager_evil` (UID 5000) is NOT package-owned; an unrelated system account named `daemon` (UID 2) is NOT package-owned either. The gate exists to fire on the F-37 priv_group_reuse signature; we only want to exempt the RPM's own post-install state. rTc3óB•K—|]}‰ |¦«V—ŒdS©N)Ú startswith)Ú.0ÚpÚnames €úI/opt/cloudlinux/venv/lib64/python3.11/site-packages/lvemanager/sudoers.pyú z(_is_system_owned_user..ds/øèè€Ð OÐ O 1ˆD�OŠO˜AÑ Ô Ð OÐ OÐ OÐ OÐ OÐ OóF)Ú _PACKAGE_OWNED_CLSUDOERS_MEMBERSÚanyÚ&_PACKAGE_OWNED_CLSUDOERS_NAME_PREFIXESÚpwdÚgetpwnamÚpw_uidÚ_SYSTEM_UID_MAXÚKeyError)rÚ is_known_names` rÚ_is_system_owned_userr)Vs˜ø€ð ˆv‚~€~àˆtà Õ0Ð0ð PÝ Ð OÐ OÐ OÐ OÕ(NÐ OÑ OÔ OÑOÔOðð ð؈uðÝŒ|˜DÑ!Ô!Ô(­OÒ;Ð;øÝ ððððˆuˆuðøøøs¸!AÁ A(Á'A(cóF—tjdd||g¦«}|dkrdSdS)zAdd user to given unix groupú/usr/bin/gpasswdz-arFT©Ú subprocessÚcall©Ú user_nameÚ group_nameÚretcodes rÚ_add_user_to_groupr3ps.€åŒoÐ1°4¸ÀJÐOÑPÔP€GØ�!‚|€|؈uØ ˆ4rcóF—tjdd||g¦«}|dkrdSdS)Nr+z-drFTr,r/s rÚ_remove_user_from_groupr5ys.€ÝŒoÐ1°4¸ÀJÐOÑPÔP€GØ�!‚|€|؈uØ ˆ4r©có,— tj|¦«j}n#t$rYdSwxYw|sdS t t ¦«¦«}t t ¦«¦«}n-#t$r }td|›d|›�¦«Yd}~dSd}~wwxYw|std|z¦«dSt |¦«|z}|D]S}||vs||vrŒ t|¦«rŒn#t$rYŒ)wxYwtd|›d|›d�¦«t||¦«ŒTdS)a6 Remove panel end-users (tenants) from a privileged group. CLOS-4594 (F-54/F-56): membership of the fs.proc_super_gid group (clsupergid) is privileged and must be limited to legitimate elevated actors. lve-utils (clsupergid_process / clsetuplib) may reuse a pre-existing group of that name, so we reconcile its membership here. lve-utils cannot tell a legitimate panel admin (a regular uid >= UID_MIN login) from a tenant; lvemanager can, because it knows the authoritative cpapi sets. Here we remove only CONFIRMED panel end-users (cpapi.cpusers() that are neither admins nor resellers) -- a tenant must never be a member. This deliberately does NOT use a uid threshold (which is what made the earlier in-tool attempt false-abort on real cPanel/DA/Plesk hosts by flagging legitimate panel admins as untrusted). Fail-safe rules (must never strip a legitimate elevated actor): * If cpapi enumeration raises, OR admins() returns an EMPTY set, do nothing and return. An empty admin set cannot be distinguished from a failed-open read (e.g. DirectAdmin admins() returns set() without raising when admin.list is empty/truncated mid-write, while DA admins are simultaneously listed by cpusers()); reconciling against it would strip every real admin from the group -- the very regression this fix exists to avoid. * Admins (admins()), the just-added admin (keep), and resellers (is_reseller()) are elevated actors and are never removed. Service accounts (nagios/mailman/polkitd, the lvemanager system user, ...) are not panel users, so they are never candidates. :param group_name: the group to reconcile (the configured proc-super group) :param keep: extra usernames to preserve regardless (e.g. the admin being added right now) NzCWARNING: could not enumerate panel admins/users to validate group 'z': zSWARNING: admins() returned no admins; skipping tenant eviction for '%s' (fail-safe)zWARNING: removing panel user 'z' from privileged group 'z ' (CLOS-4594)) ÚgrpÚgetgrnamÚgr_memr'ÚsetrrÚ ExceptionÚprintr r5)r1ÚkeepÚmembersÚ admin_setÚ tenant_setÚeÚkeep_setÚmembers rÚ_remove_tenants_from_grouprE€s¤€ð8Ý”,˜zÑ*Ô*Ô1ˆˆøÝ ðððØˆˆðøøøà ð؈ðÝ�™œ‘M”Mˆ Ý�™œ‘^”^ˆ ˆ øÝ ðððÝ ˆØ��˜Q˜Qð ñ !ô !ð !àˆˆˆˆˆøøøøðøøøð ðõ ÐcØññ ô ð àˆÝ�4‰yŒy˜9Ñ$€HØð 4ð 4ˆØ �XÐ Ð  ¨zÐ!9Ð!9Ø ð ݘ6Ñ"Ô"ð Øð øåð ð ð Ø ˆHð øøøå ˆØ��˜˜˜ð%ñ &ô &ð &å ¨ Ñ3Ô3Ð3Ð3ð 4ð 4s5‚œ *©*²6A)Á) BÁ3BÂBà Cà C*Ã)C*có¼—tt¦«¦«}||vr| |¦«|D]}t||¦«Œt ||f¬¦«dS)z� Add all present DA admins (plus new_admin_name admin) to supplied group :param new_admin_name: new admin name to add :return: )r>N)ÚlistrÚappendr3rE)r1Únew_admin_nameÚ admin_listrs rÚ_add_admins_into_grouprK½sr€õ•f‘h”h‘”€JؘZÐ'Ð'Ø×Ò˜.Ñ)Ô)Ð)Øð.ð.ˆÝ˜5 *Ñ-Ô-Ð-Ð-õ˜z°Ð0AÐBÑBÔBÐBÐBÐBrcóD—tjdd|g¦«}|dkrdSdS)zCreate group with given namez/usr/sbin/groupaddz-frFTr,)r1r2s rÚ _create_grouprMÎs,€åŒoÐ3°T¸:ÐFÑGÔG€GØ�!‚|€|؈uØ ˆ4rcóê—ttjt¦«j¦«}t t ¬¦«}| d¦«}| d¦«s-|  d|¦«tt|¦«dSt¦«dkrr ttjt¦«j¦«}n#t$rd}YnwxYw||kr-|  d|¦«tt|¦«dS t|¦«}n#t$rt!d¦«‚wxYwtj|¦«j}t||¦«dS)z— Add all present DA admins (plus new_admin_name admin) to current supergid group :param new_admin_name: new admin name to add :return: )Ú config_filezfs.proc_super_gidNÚ DirectAdminz6Bad fs.proc_super_gid option value in /etc/sysctl.conf)Ústrr8r9ÚSUPER_GROUP_NAMEÚgr_gidr r ÚgetÚ has_parameterr;rKr ÚDEFAULT_GROUP_NAMEr'ÚintÚ ValueErrorÚ RuntimeErrorÚgetgrgidÚgr_name)rIÚ super_gidÚ sysctl_cfgÚproc_super_gidÚ admin_gidÚproc_super_names rÚ_add_admins_into_supergid_grpraÖs€€õ•C”LÕ!1Ñ2Ô2Ô9Ñ:Ô:€IåÕ(;Ð<Ñ<Ô<€Jð —^’^Ð$7Ñ8Ô8€Nð × #Ò #Ð$7Ñ 8Ô 8ð Ø�ŠÐ*¨IÑ6Ô6Ð6ÝÕ/°Ñ@Ô@Ð@ØˆÝ ‰Œ˜ Ò %Ð %ð Ý�CœLÕ);Ñ<Ô<ÔCÑDÔDˆIˆIøÝð ð ð ØˆIˆIˆIð øøøà ˜YÒ &Ð &Ø �NŠNÐ.° Ñ :Ô :Ð :Ý "Õ#3°^Ñ DÔ DÐ DØ ˆFðUݘ^Ñ,Ô,ˆˆøÝ ðUðUðUÝÐSÑTÔTÐTðUøøøõ”l >Ñ2Ô2Ô:€Oݘ?¨NÑ;Ô;Ð;Ð;Ð;sÂ++Cà C&Ã%C&ÄD-Ä-Ec󇇗 tj|¦«Šn#t$rYdSwxYwt|¦«Šˆfd„‰jD¦«}ˆˆfd„t j¦«D¦«}|s|rtd|›d|›d|›�¦«‚dS)a? Refuse to grant %group_name passwordless sudo if the unix group already exists with members or primary-GID owners that the lvemanager flow did not place there. `groupadd -f` is silently idempotent and would otherwise elevate any pre-existing member on the first call. :param group_name: target group (clsudoers) :param expected_members: iterable of usernames the lvemanager flow is about to authorize (panel admins + the user being added). :raises Exception: if any unexpected secondary member or primary-GID owner is found. Ncó:•—g|]}|‰v¯t|¦«°|‘ŒSr6)r))rÚmÚexpecteds €rú z/_assert_sudoers_group_clean..s<ø€ðððØØ �HÐ Ð Õ%:¸1Ñ%=Ô%=Ð ð Ø Ð Ð rcóx•—g|]6}|j‰jkr$|j‰v¯t|j¦«°/|j‘Œ7Sr6)Úpw_gidrSÚpw_namer))rrreÚgrs €€rrfz/_assert_sudoers_group_clean.."sSø€ðððØØ Œ8�r”yÒ Ð Ø ŒI˜XÐ %Ð %Ý% a¤iÑ0Ô0ð &ð Œ à %Ð %Ð %rzERROR: refusing to grant %z9 passwordless sudo: group already has unexpected members z and primary-GID owners )r8r9r'r;r:r#Úgetpwallr<)r1Úexpected_membersÚunexpected_membersÚunexpected_primaryrerjs @@rÚ_assert_sudoers_group_cleanroýsøø€ðÝ Œ\˜*Ñ %Ô %ˆˆøÝ ðððàˆˆðøøøõÐ#Ñ$Ô$€HððððØ”9ðñôÐðððððÝœ<™>œ>ðñôÐð ðEÐ/ðE݈ið� � Ð.Ð.Ð.Ð0BÐ0Bð DñEôEð EðEðEs „™ '¦'có¸—ttj¦«rjtt¦«st dtz¦«‚t |¦«t|t¦«st d|›dt›d�¦«‚tt¦«¦«}|  |¦«tt|¦«tt¦«st dtz¦«‚t|t¦«st d|›dt›d�¦«‚t¦«}| t¦«t¦«dS)NzERROR: Can't create %s group zERROR: Can't add user z to z group )rr ÚLVErMrRr<rar3r;rÚaddroÚSUDOERS_GROUP_NAMErÚadd_lvemanager_groupr)rÚexpected_clsudoersÚsudos rÚadd_unix_user_to_sudoersrw/sO€å!¥'¤+Ñ.Ô.ð)ÝÕ-Ñ.Ô.ð QÝÐ<Õ?OÑOÑPÔPÐ På% dÑ+Ô+Ð+å! $Õ(8Ñ9Ô9ð )Ý�)Ø��Õ&Ð&Ð&ð(ñ)ô)ð )õ�V™XœX™œÐØ×Ò˜4Ñ Ô Ð ÝÕ 2Ð4FÑGÔGÐGå Õ+Ñ ,Ô ,ðOÝÐ8Õ;MÑMÑNÔNÐNå ˜dÕ$6Ñ 7Ô 7ð'݈iØ ˆDˆDÕ$Ð$Ð$ð&ñ'ô'ð 'õ ‰8Œ8€DØ×ÒÕ0Ñ1Ô1Ð1õ�N„N€N€N€NrcóZ—t|t¦«t|t¦«dSr)r5rRrs)rs rÚremove_unix_user_from_sudoersryYs*€å˜DÕ"2Ñ3Ô3Ð3ݘDÕ"4Ñ5Ô5Ð5Ð5Ð5r)r6)(Ú__doc__Ú __future__rrrr8r#r-Úcl_proc_hidepidrÚclcommon.cpapirrr r Úclcommon.sysctlr r Úclcommon.constr rÚclsudorrVrRrsr&Ú frozensetr r"r)r3r5rErKrMrarorwryr6rrúr‚sÕðð $ð$ðL&Ð%Ð%Ð%Ð%Ð%ØÐÐÐÐÐØ&Ð&Ð&Ð&Ð&Ð&à € € € Ø € € € ØÐÐÐà(Ð(Ð(Ð(Ð(Ð(ØBÐBÐBÐBÐBÐBÐBÐBÐBÐBÐBÐBØ;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø"Ð"Ð"Ð"Ð"Ð"Ø5Ð5Ð5Ð5Ð5Ð5ØÐÐÐÐÐðÐð Ðð!Ðð€ð$- 9¨f°lÐ-CÑ#DÔ#DÐ Ø)9Ð&ðððð4ðððððð:4ð:4ð:4ð:4ðzCðCðCð"ððð$<ð$<ð$<ðN/Eð/Eð/Eðd'ð'ð'ðT6ð6ð6ð6ð6r