Ніхто ще не має ✓, тому я зібрав відповідь, у якій є все, що я міг придумати.
1 Під час запуску виконуваного файлу іноді ОС відмовить вашому дозволу на. Наприклад, для запуску make install з префіксом, який є системним шляхом, знадобиться sudo, тоді як префікс як несистемний шлях не буде запитуватися для sudo. Як ОС вирішує, що для запуску виконуваного файлу потрібно більше привілеїв, ніж у користувача, ще до того, як програма щось зробить?
Ні, це не робиться при запуску виконуваного файлу. Це робиться, коли виконуваний файл намагається щось зробити.
Os перевірять дозволи та можливості файлової системи (вони не охоплені дозволами файлової системи, і включають зменшення приємного рівня, mknode, деяких мережевих матеріалів низького рівня, вбивають процеси інших, перезавантажують, встановлюють час тощо). Якщо у вас немає дозволів, ви не можете цього зробити. Root має повний набір можливостей, включаючи CAP_DAC_OVERRIDE (ігнорування дозволу на файл).
2 Іноді на запуск програми не буде відмовлено у дозволі, але програма зможе зробити більше речей, якщо вона запускається з sudo. Наприклад, при запуску du в деякому системному каталозі, лише за допомогою sudo він зможе отримати доступ до деякого каталогу. Чому ОС не відмовляє в дозволі на запуск такої програми, або дружнє повідомлення надає більше привілеїв, перш ніж програма може запуститися?
ОС не може знати, що буде робити програма. Тому програма повинна перевірити дозволи перед її запуском та вирішити, що робити. Але цього не потрібно робити.
Примітка: на android є маніфест, в цьому додаток оголошує, якими привілеями він може користуватися. ОС знищить будь-яку програму, яка намагається використовувати привілей, який він не декларує, а ОС не завжди гарантує, що привілей може бути шанований. наприклад, доступ до мережі може бути недоступний.
2 Чи правда, що коли судо працює, су також буде працювати, і коли су працює, судо також буде працювати? або із су, користувач може зробити більше, ніж із судо? Як ОС вирішує, коли працює sudo і коли su потрібен?
sudo
і su
зробіть приблизно щось. Деякі відмінності полягають у змінній обробці середовища та інших подібних проблемах уникнення безпеки. Однак вони обидва інструменти, що дозволяють вам стати іншим користувачем, і обидва мають користувача root за замовчуванням.
su
був оригінальним інструментом, він вимагає ввести пароль користувача / групи, до якого ви змінюєтеся.
sudo
новітня і вимагає, за замовчуванням, введення власного пароля, але може бути налаштована на прийняття пароля користувача / групи, на який ви переходите, або взагалі немає пароля. Він також дозволяє безліч конфігурацій, з якими командами він буде працювати, для кого і як він буде автентифікувати цю програму для цього користувача на цій машині. Також sudoedit
це є частиною sudo
і може бути використане для дозволу редагування як іншого користувача та уникнення проблеми безпеки підсумкового обстрілу з редактора (виклик exec з редактора для запуску довільного процесу з нарощеними привілеями).