UTS (UNIX Time-Sharing System) простір імен є функцією ядра Linux, яка забезпечує ізоляцію двох системних ідентифікаторів: ім'я хоста та ім'я домену NIS (Служба інформації про мережу). Ця ізоляція дозволяє кожному UTS простору імен мати своє власне незалежне ім'я хоста та ім'я домену NIS, що особливо корисно в сценаріях контейнеризації, де кожен контейнер повинен з'являтися як окрема система зі своїм ім'ям хоста.
How it works:
Коли створюється новий UTS простір імен, він починається з копії імені хоста та імені домену NIS з його батьківського простору імен. Це означає, що при створенні новий простір імен ділить ті ж ідентифікатори, що й його батько. Однак будь-які подальші зміни в імені хоста або імені домену NIS в межах простору імен не вплинуть на інші простори імен.
Процеси в межах UTS простору імен можуть змінювати ім'я хоста та ім'я домену NIS за допомогою системних викликів sethostname() та setdomainname(), відповідно. Ці зміни є локальними для простору імен і не впливають на інші простори імен або хост-систему.
Процеси можуть переміщатися між просторами імен, використовуючи системний виклик setns(), або створювати нові простори імен за допомогою системних викликів unshare() або clone() з прапором CLONE_NEWUTS. Коли процес переходить до нового простору імен або створює його, він почне використовувати ім'я хоста та ім'я домену NIS, пов'язані з цим простором імен.
Lab:
Create different Namespaces
CLI
sudounshare-u [--mount-proc] /bin/bash
При монтуванні нового екземпляра файлової системи /proc, якщо ви використовуєте параметр --mount-proc, ви забезпечуєте, що новий простір монтування має точний та ізольований вигляд інформації про процеси, специфічної для цього простору.
Помилка: bash: fork: Не вдається виділити пам'ять
Коли unshare виконується без параметра -f, виникає помилка через те, як Linux обробляє нові PID (ідентифікатори процесів) простори. Основні деталі та рішення наведені нижче:
Пояснення проблеми:
Ядро Linux дозволяє процесу створювати нові простори за допомогою системного виклику unshare. Однак процес, який ініціює створення нового PID простору (який називається "процесом unshare"), не входить до нового простору; лише його дочірні процеси входять.
Виконання %unshare -p /bin/bash% запускає /bin/bash в тому ж процесі, що й unshare. Відповідно, /bin/bash та його дочірні процеси знаходяться в оригінальному PID просторі.
Перший дочірній процес /bin/bash у новому просторі стає PID 1. Коли цей процес завершується, це викликає очищення простору, якщо немає інших процесів, оскільки PID 1 має особливу роль усиновлення сирітських процесів. Ядро Linux тоді вимкне виділення PID у цьому просторі.
Наслідок:
Завершення PID 1 у новому просторі призводить до очищення прапора PIDNS_HASH_ADDING. Це призводить до того, що функція alloc_pid не може виділити новий PID при створенні нового процесу, що викликає помилку "Не вдається виділити пам'ять".
Рішення:
Проблему можна вирішити, використовуючи параметр -f з unshare. Цей параметр змушує unshare створити новий процес після створення нового PID простору.
Виконання %unshare -fp /bin/bash% забезпечує, що команда unshare сама стає PID 1 у новому просторі. /bin/bash та його дочірні процеси тоді безпечно містяться в цьому новому просторі, запобігаючи передчасному завершенню PID 1 та дозволяючи нормальне виділення PID.
Забезпечивши, що unshare виконується з прапором -f, новий PID простір правильно підтримується, що дозволяє /bin/bash та його підпроцесам працювати без виникнення помилки виділення пам'яті.
sudofind/proc-maxdepth3-typel-nameuts-execreadlink{} \; 2>/dev/null|sort-u# Find the processes with an specific namespacesudofind/proc-maxdepth3-typel-nameuts-execls-l{} \; 2>/dev/null|grep<ns-number>
Увійти в UTS простір імен
<div data-gb-custom-block data-tag="hint" data-style='success'>Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details><summary>Support HackTricks</summary>* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details></div></details></div></details></div></details></div></details></div></details></div></details></div></details></div></details></div></details></div></details></div></details></div></details></div></details></div></details></div></details></div>