Hsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/userspace-api/no_new_privsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/zh_TW/userspace-api/no_new_privsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/it_IT/userspace-api/no_new_privsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/ja_JP/userspace-api/no_new_privsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/ko_KR/userspace-api/no_new_privsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/sp_SP/userspace-api/no_new_privsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh[/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/userspace-api/no_new_privs.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h-Documentation/userspace-api/no_new_privs.rst h]h)}(h,Documentation/userspace-api/no_new_privs.rsth]h,Documentation/userspace-api/no_new_privs.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h李睿 Rui Li h]h)}(h李睿 Rui Li h](h李睿 Rui Li <}(hj hhhNhNubh reference)}(h me@lirui.orgh]h me@lirui.org}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:me@lirui.orguh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h无新权限标志h]h无新权限标志}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjXhhhhhK ubh)}(hX8execve系统调用可以给一个新启动的程序授予它的父程序本没有的权限。最明显的两个 例子就是setuid/setgid控制程序和文件的能力。为了避免父程序也获得这些权限,内 核和用户代码必须小心避免任何父程序可以颠覆子程序的情况。比如:h]hX8execve系统调用可以给一个新启动的程序授予它的父程序本没有的权限。最明显的两个 例子就是setuid/setgid控制程序和文件的能力。为了避免父程序也获得这些权限,内 核和用户代码必须小心避免任何父程序可以颠覆子程序的情况。比如:}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh block_quote)}(hX- 程序在setuid后,动态装载器处理 ``LD_*`` 环境变量的不同方式。 - 对于非特权程序,chroot是不允许的,因为这会允许 ``/etc/passwd`` 在继承 chroot的程序眼中被替换。 - 执行代码对ptrace有特殊处理。 h]h bullet_list)}(hhh](h list_item)}(hS程序在setuid后,动态装载器处理 ``LD_*`` 环境变量的不同方式。 h]h)}(hR程序在setuid后,动态装载器处理 ``LD_*`` 环境变量的不同方式。h](h+程序在setuid后,动态装载器处理 }(hjhhhNhNubhliteral)}(h``LD_*``h]hLD_*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 环境变量的不同方式。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h对于非特权程序,chroot是不允许的,因为这会允许 ``/etc/passwd`` 在继承 chroot的程序眼中被替换。 h]h)}(h~对于非特权程序,chroot是不允许的,因为这会允许 ``/etc/passwd`` 在继承 chroot的程序眼中被替换。h](hC对于非特权程序,chroot是不允许的,因为这会允许 }(hjhhhNhNubj)}(h``/etc/passwd``h]h /etc/passwd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, 在继承 chroot的程序眼中被替换。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h(执行代码对ptrace有特殊处理。 h]h)}(h'执行代码对ptrace有特殊处理。h]h'执行代码对ptrace有特殊处理。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKhj{ubah}(h]h ]h"]h$]h&]uh1jyhhhKhjXhhubh)}(hX这些都是临时性的修复。 ``no_new_privs`` 位(从 Linux 3.5 起)是一个新的通 用的机制来保证一个进程安全地修改其执行环境并跨execve持久化。任何任务都可以设 置 ``no_new_privs`` 。一旦该位被设置,它会在fork、clone和execve中继承下去 ,并且不能被撤销。在 ``no_new_privs`` 被设置的情况下, ``execve()`` 将保证 不会授予权限去做任何没有execve调用就不能做的事情。比如, setuid 和 setgid 位不会再改变 uid 或 gid;文件能力不会被添加到授权集合中,并且Linux安全模块( LSM)不会在execve调用后放松限制。h](h"这些都是临时性的修复。 }(hjhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 位(从 Linux 3.5 起)是一个新的通 用的机制来保证一个进程安全地修改其执行环境并跨execve持久化。任何任务都可以设 置 }(hjhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhi 。一旦该位被设置,它会在fork、clone和execve中继承下去 ,并且不能被撤销。在 }(hjhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 被设置的情况下, }(hjhhhNhNubj)}(h ``execve()``h]hexecve()}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX 将保证 不会授予权限去做任何没有execve调用就不能做的事情。比如, setuid 和 setgid 位不会再改变 uid 或 gid;文件能力不会被添加到授权集合中,并且Linux安全模块( LSM)不会在execve调用后放松限制。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh)}(h 设置 ``no_new_privs`` 使用::h](h设置 }(hjXhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh 使用:}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK!hjXhhubh literal_block)}(h'prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);h]h'prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);}hjzsbah}(h]h ]h"]h$]h&]hhuh1jxhhhK#hjXhhubh)}(h不过要小心,Linux安全模块(LSM)也可能不会在 ``no_new_privs`` 模式下收紧约束。 (这意味着一个一般的服务启动器在执行守护进程前就去设置 ``no_new_privs`` 可能 会干扰基于LSM的沙箱。)h](h?不过要小心,Linux安全模块(LSM)也可能不会在 }(hjhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhl 模式下收紧约束。 (这意味着一个一般的服务启动器在执行守护进程前就去设置 }(hjhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) 可能 会干扰基于LSM的沙箱。)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK%hjXhhubh)}(h请注意, ``no_new_privs`` 并不能阻止不涉及 ``execve()`` 的权限变化。一个拥有 适当权限的任务仍然可以调用 ``setuid(2)`` 并接收 SCM_RIGHTS 数据报。h](h 请注意, }(hjhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 并不能阻止不涉及 }(hjhhhNhNubj)}(h ``execve()``h]hexecve()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhH 的权限变化。一个拥有 适当权限的任务仍然可以调用 }(hjhhhNhNubj)}(h ``setuid(2)``h]h setuid(2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" 并接收 SCM_RIGHTS 数据报。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK)hjXhhubh)}(h9目前来说, ``no_new_privs`` 有两大使用场景:h](h目前来说, }(hjhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 有两大使用场景:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK,hjXhhubjz)}(hX- 为seccomp模式2沙箱安装的过滤器会跨execve持久化,并能够改变新执行程序的行为。 非特权用户因此在 ``no_new_privs`` 被设置的情况下只允许安装这样的过滤器。 - ``no_new_privs`` 本身就能被用于减少非特权用户的攻击面。如果所有以某个 uid 运行的程序都设置了 ``no_new_privs`` ,那么那个 uid 将无法通过攻击 setuid, setgid 和使用文件能力的二进制来提权;它需要先攻击一些没有被设置 ``no_new_privs`` 位的东西。 h]j)}(hhh](j)}(h为seccomp模式2沙箱安装的过滤器会跨execve持久化,并能够改变新执行程序的行为。 非特权用户因此在 ``no_new_privs`` 被设置的情况下只允许安装这样的过滤器。 h]h)}(h为seccomp模式2沙箱安装的过滤器会跨execve持久化,并能够改变新执行程序的行为。 非特权用户因此在 ``no_new_privs`` 被设置的情况下只允许安装这样的过滤器。h](h为seccomp模式2沙箱安装的过滤器会跨execve持久化,并能够改变新执行程序的行为。 非特权用户因此在 }(hj)hhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh: 被设置的情况下只允许安装这样的过滤器。}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK.hj%ubah}(h]h ]h"]h$]h&]uh1jhj"ubj)}(hXB``no_new_privs`` 本身就能被用于减少非特权用户的攻击面。如果所有以某个 uid 运行的程序都设置了 ``no_new_privs`` ,那么那个 uid 将无法通过攻击 setuid, setgid 和使用文件能力的二进制来提权;它需要先攻击一些没有被设置 ``no_new_privs`` 位的东西。 h]h)}(hXA``no_new_privs`` 本身就能被用于减少非特权用户的攻击面。如果所有以某个 uid 运行的程序都设置了 ``no_new_privs`` ,那么那个 uid 将无法通过攻击 setuid, setgid 和使用文件能力的二进制来提权;它需要先攻击一些没有被设置 ``no_new_privs`` 位的东西。h](j)}(h``no_new_privs``h]h no_new_privs}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhp 本身就能被用于减少非特权用户的攻击面。如果所有以某个 uid 运行的程序都设置了 }(hjShhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh ,那么那个 uid 将无法通过攻击 setuid, setgid 和使用文件能力的二进制来提权;它需要先攻击一些没有被设置 }(hjShhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh 位的东西。}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK1hjOubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]jjuh1jhhhK.hjubah}(h]h ]h"]h$]h&]uh1jyhhhK.hjXhhubh)}(hXK将来,其他潜在的危险的内核特性可能被非特权任务利用,即使 ``no_new_privs`` 被置位。 原则上,当 ``no_new_privs`` 被置位时, ``unshare(2)`` 和 ``clone(2)`` 的几个选 项将是安全的,并且 ``no_new_privs`` 加上 ``chroot`` 是可以被认为比 chroot本身危 险性小得多的。h](hU将来,其他潜在的危险的内核特性可能被非特权任务利用,即使 }(hjhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 被置位。 原则上,当 }(hjhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 被置位时, }(hjhhhNhNubj)}(h``unshare(2)``h]h unshare(2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 和 }(hjhhhNhNubj)}(h ``clone(2)``h]hclone(2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh* 的几个选 项将是安全的,并且 }(hjhhhNhNubj)}(h``no_new_privs``h]h no_new_privs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 加上 }(hjhhhNhNubj)}(h ``chroot``h]hchroot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh< 是可以被认为比 chroot本身危 险性小得多的。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK6hjXhhubeh}(h]id1ah ]h"]无新权限标志ah$]h&]uh1jVhhhhhhhK ubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j[N generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjJerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}j$j!s nametypes}j$sh}j!jXs footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jXKsRparse_messages]transform_messages] transformerN include_log]?Documentation/translations/zh_CN/userspace-api/no_new_privs.rst(NNNNta decorationNhhub.