§ ½@¾jãóz—ddlZddlZddlmZmZddlmZmZddlm Z m Z dddddœZ d„Z d „Z dd „Zd „Zd efd„ZdS)éN)ÚFeatureÚis_panel_feature_supported)Ú SysCtlConfÚSYSCTL_CL_CONF_FILE)ÚgrepÚ)proc_can_see_other_uid_and_hidepid_syncedéé)ÚnoaccessÚ invisibleÚ1Ú2c ó²—d} t|dd¬¦«5}|D]g}| ¦«}|rO| d¦«s:| ¦«}|r$|ddkrd|d vrd d d ¦«d SŒh d d d ¦«n #1swxYwYn=#tt f$r)}t d |d t|¦«¦«Yd }~nd }~wwxYwdS)zª Search for line like "proc /proc proc defaults,hidepid=2,gid=clsupergid 0 0" in /etc/fstab Return True if /proc is mounted with hidepid option in /etc/fstab z /etc/fstabÚrúutf-8)Úencodingú#rÚproczhidepid=éNTzError: failed to parseú:F)ÚopenÚstripÚ startswithÚsplitÚIOErrorÚ IndexErrorÚprintÚstr)ÚfstabÚfÚlineÚ splitted_lineÚes úpy/cl_proc_hidepid.pyÚ hidepid_foundr%sh€ð €Eð <Ý �%˜ wÐ /Ñ /Ô /ð $°1Øð $ð $�Ø—z’z‘|”|�Øð$ §¢°Ñ 4Ô 4ð$Ø$(§J¢J¡L¤L�MØ$ð$¨°qÔ)9¸VÒ)CÐ)CÈ ÐVcÐdeÔVfÐHfÐHfØ#ð  $ð $ð $ñ $ô $ð $ð $ð $øð $ð $ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $øøõ •ZÐ ð<ð<ð<Ý Ð&¨¨sµC¸±F´FÑ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð<øøøà ˆ5sG„B–ABÁ3 BÂB BÂBÂBÂBÂBÂCÂ+CÃCcót—|r#tdd |¦«¦«tj|¦«S)NÚ executingú )rÚjoinÚ subprocessÚcall)ÚcmdÚverboses r$Úexecuter.-s4€Øð*Ý ˆk˜3Ÿ8š8 C™=œ=Ñ)Ô)Ð)Ý Œ?˜3Ñ Ô ÐóFcó—t¦«rdSttj¦«s|rt d¦«dSt t ¬¦«}|rt d¦«t¦«r#|rt d¦«tgd¢|¦«S|  d¦«}|  d¦«}|d kr#|rt d ¦«tgd ¢|¦«S|rt d ¦«td dd|zdg|¦«S)z9 Remount /proc with hidepid=2 option when needed Nz>environment without LVE detected - remounting /proc is skipped)Ú config_filezapply sysctl settingszUhidepid option is found in /etc/fstab - remounting /proc with options from /etc/fstab)ú /bin/mountú-oÚremountú/proczfs.proc_can_see_other_uidzfs.proc_super_gidÚ0zJvirtualized procfs feature is not enabled in sysctl conf - disable hidepid)r2r3zremount,hidepid=0,gid=0r5zenable hidepid for /procr2r3zremount,hidepid=2,gid=r5) rrrÚLVErrrr%r.Úget)r-ÚsysctlÚproc_can_see_other_uidÚ super_gids r$Ú remount_procr<3sA€õ1Ñ2Ô2ðØˆÝ %¥g¤kÑ 2Ô 2ðØ ð TÝ ÐRÑ SÔ SÐ SØˆÝ Õ$7Ð 8Ñ 8Ô 8€FØð'Ý Ð%Ñ&Ô&Ð&Ý�„ðJà ð kÝ ÐiÑ jÔ jÐ jÝÐ?Ð?Ð?ÀÑIÔIÐIØ#ŸZšZÐ(CÑDÔDÐØ— ’ Ð.Ñ/Ô/€IØ Ò$Ð$Ø ð `Ý Ð^Ñ _Ô _Ð _ÝÐOÐOÐOÐQXÑYÔYÐYØð*Ý Ð(Ñ)Ô)Ð)Ý �L $Ð(@À9Ñ(LÈgÐVÐX_Ñ `Ô `Ð`r/có¸—tdd¦«}d} |D]¥}| ¦«}||vrŒ| |¦«}|dkrŒ7|dz }||d…}| d¦«}|dkr |d|…}n)| d¦«}|dkr |d|…}ndSt|¦«cSn#tt t f$rYnwxYwdS) zN Retrieve hidepid gid from /proc/mounts :return: gid, 0 if absent z ,hidepid=ú /proc/mountsz,gid=éÿÿÿÿéNú,r()rrÚfindÚintrrÚ ValueError)Ú lines_genÚ gid_prefixr!Úposs r$Úget_gid_from_mountsrHSs€õ �[ .Ñ1Ô1€IØ€Jð Øð ð ˆDØ—:’:‘<”<ˆDØ Ð%Ð%Øà—)’)˜JÑ'Ô'ˆCØ�bŠyˆyØØ �1‰HˆCؘ˜˜”:ˆDØ—)’)˜C‘.”.ˆCØ�bŠyˆyؘD˜S˜D”z��à—i’i ‘n”n�ؘ"’9�9Ø   œ:�D�Dð˜2˜2Ý�t‘9”9Ð Ð Ð ð) øõ* •Z¥Ð ,ð ð ð Ø ˆð øøøð ˆ2s”BB=Â+B=Â=CÃCÚreturnc ó®—d}d} t|dd¬¦«5}|D]~}tjd|¦«}| ¦« d¦«sŒ?|r=t  t| d¦«¦«d¦«}nŒd d d ¦«n #1swxYwYn##ttttf$rYnwxYw|S) zT Retrieve hidepid value from /proc/mounts :return: hidepid, 0 if absent r>rrr)Úmoderzhidepid=(\d|\w+)z proc /procr N) rÚreÚsearchrrÚHidepidValuesDictr8rÚgroupÚOSErrorrrrD)Ú mounts_pathÚresÚfiler!Úms r$Úget_hidepid_typing_from_mountsrUvs&€ð !€KØ €Cð  å �+ C°'Ð :Ñ :Ô :ð ¸dØð ð �Ý”IÐ1°4Ñ8Ô8�Ø—z’z‘|”|×.Ò.¨|Ñ<Ô<ðØØðÝ+×/Ò/µ°A·G²G¸A±J´J±´ÀÑCÔC�CØ�Eðð  ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øøõ •W�j­*Ð 5ð ð ð Ø ˆð øøøð €Js5†B2˜BB& B2Â&B*Â*B2Â-B*Â.B2Â2CÃC)F)r*rLÚclcommon.cpapirrÚclcommon.sysctlrrÚclcommon.utilsrrrNr%r.r<rHrCrU©r/r$úrZsëððÐÐÐØ € € € à>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ØJÐJÐJÐJÐJÐJÐJÐJðØØ Ø ð ðÐðððð& ð ð ð aðaðaðað@ ð ð ðF¨ððððððr/