
    7i2                         U d Z ddlZddlZddlmZmZ g dZeee                  e	d<    e
g d          Zeee                  e	d<   d eD             Zd	ed
efdZd	ed
edz  fdZdS )u   命令安全检测模块。    N)Final	FrozenSet)z\brm\s+(-[rf]+\s+|.*-rf)z\bchmod\s+(-R\s+)?777z
\bchown\s+z\bdd\s+z\bmkfs\bz\b(fdisk|parted)\bz>\s*/dev/sdz\biptables\bz\bshutdown\bz
\breboot\bz\bsudo\bz\bsh\s+-c\bz\bbash\s+-c\bz\|.*\b(bash|sh)\bz\$\([^)]+\)z`[^`]+`DANGEROUS_PATTERNS)rmchmodchownddmkfsfdiskpartediptablesshutdownrebootinitDANGEROUS_COMMANDSc                 L    g | ]!}t          j        |t           j                  "S  )recompile
IGNORECASE).0ps     8/root/projects/qq-shell/src/butler/security/guardrail.py
<listcomp>r      s&    OOOqbjBM22OOO    cmdreturnc                 4   t           D ]}|                    |           r dS 	 t          j        |           }|rL|d         t          v r=|d         dk    r/|dd         D ]"}|                    d          rd|v sd|v r dS #d	S dS n# t          $ r Y dS w xY wd	S )
u   
    检查命令是否危险。

    Args:
        cmd: 要检查的命令字符串

    Returns:
        如果命令危险返回 True
    Tr   r      N-rfF)_COMPILED_PATTERNSsearchshlexsplitr   
startswith
ValueError)r   patternpartsparts       r   is_dangerous_commandr,   "   s     &  >># 	44	
C   	U1X!333Qx4!!""I $ $Ds++ $t#ttu4   tt 5s   AB B 
BBc                      t                     sdS d v r
d v sd v rdS d v rd v rdS d	 v rd
S d v rdS t           fddD                       rdS dS )u   
    获取命令被标记为危险的原因。

    Args:
        cmd: 命令字符串

    Returns:
        危险原因描述，如果安全则返回 None
    Nr   z-rfz-fru   递归强制删除文件r   777u   开放所有权限sudou   需要 root 权限r	   u   磁盘操作c              3       K   | ]}|v V  	d S )Nr   )r   xr   s     r   	<genexpr>z$get_danger_reason.<locals>.<genexpr>T   s'      
4
418
4
4
4
4
4
4r   )r   r   u   系统操作u   潜在危险命令)r,   any)r   s   `r   get_danger_reasonr4   ?   s      $$ ts{{))#~~%3,,##}}##s{{~

4
4
4
43
4
4
444 ~r   )__doc__r   r%   typingr   r   r   liststr__annotations__	frozensetr   r#   boolr,   r4   r   r   r   <module>r<      s   ! ! ! 				  # # # # # # # #( ( ( E$s)$   & -6I 7 7 7 - - E)C.)   
 PO<NOOO c d    : 3  3:            r   