Чому непривілейований користувач не може змінити право власності на файл?


15

З чууна (2):

Лише привілейований процес (Linux: той, який має можливість CAP_CHOWN) може змінити власника файлу. Власник файлу може змінити групу файлів на будь-яку групу, членом якої є власник. Привілейований процес (Linux: з CAP_CHOWN) може змінювати групу довільно.

У чому причина цього обмеження? Чому непривілейований користувач не може змінити право власності на власний файл (тобто немає / etc / shadow)?

$ touch blah
$ chown root:root blah
chown: changing ownership of `blah': Operation not permitted

Відповіді:


27

Дозволяючи користувачам "роздавати" файли, ви отримуєте доступ до різних функцій ОС. Як от:

Taking up another user's disk quota.
Impersonating another user (or even root) via setuid.
Having insufficient privileges to undo a mistaken chown.
Making it appear that someone else had created a given file.
Setting up cron jobs to run on other user's accounts.
And many more...

8

Це просто особистий вибір дизайнерів Linux, щоб не допустити цього - усі дані псевдобезпеки є сумлінними, оскільки існують системи Unix, які це дозволяють.

Я думаю, що ця функціональність зводилася до того, чи слідкувала ваша поведінка Unix як "System-V" (AT&T) чи unix Берклі (BSD) ...

Щодо інших згаданих питань безпеки:

  • Видання себе за іншого користувача (або навіть root) через setuid.

    Не випуск: Зміна "власника" очищає будь-які "setXid" біти (U / G)

  • Не маючи достатніх привілеїв, щоб скасувати помилковий хаун

    Насправді це не "ризик безпеки", Але це може бути в системах, які дозволяють змінювати користувача, ви можете змінити його назад, якщо він знаходиться у вашому каталозі, іншим чином: "будьте уважні"!

  • Здається, що хтось ще створив заданий файл.

    Це все ще буде в каталозі, який ви можете написати. Тобто ви не змогли перенести його в їхній хомедір, якщо тільки не буде відкрито для запису вашій групі або всім (або ви конкретно, якщо доступні ACL).

  • Налаштування завдань cron для роботи в облікових записах інших користувачів.

    Знову ж таки, це не спрацює - оскільки crondirs належить користувачеві і не може бути читаним навіть іншими користувачами, не кажучи вже про можливість запису.

  • якщо хтось може змінити право власності, то хтось може змінити дозволи, щоб отримати доступ до будь-якого файлу в системі.

    Ні, тільки якщо користувач "володіє" каталогом, що містить цей файл. Тобто я можу дати корінь файлу з назвою 'passwd', але я не зміг його перемістити в / etc /, якщо у мене немає дозволу на запис / etc /.

  • квоти

    Потенційно достовірний момент - ЯКЩО ви використовуєте квоти, але здається, що його було б легко виявити, якщо ви підсумуєте дисковий простір в домашньому режимі; Єдина проблема полягатиме в тому, що вони переписуються кількома користувачами. У такому випадку, можливо, їде власник того "dir". Це МОЖЕ бути випадок на тих системах , які підтримують «роздавати» файли, які ви можете зробити це тільки в каталогах , які ви «свої», але це було давно , так як я на самом деле був в системі , яка дозволяє це, так Я не пам'ятаю точних обмежень.

Я, мабуть, пам’ятаю, що там було якесь «розправлення» за те, що дозволяло «видавати файли» ... наприклад - у системах, які це дозволяли, щось інше не дозволялося, що Linux дозволяє, але не можу згадати, що це було вимкнено рука ...

Я б сказав, що вищезазначена "відповідь" повинна бути відзначена як відповідь, оскільки це НЕ справжня відповідь. Це більше дизайнерське рішення - я просто не знаю, які були компроміси.

Можливо, проблеми з безпекою не піднімаються вище, що може викликати побоювання, але зазначені вище недостовірні.

IMO, це має бути встановлене системою «значення» в «/ proc», але, загалом кажучи, я думаю, що більшість людей це не так сильно хвилює.

Якщо в цьому є сильна потреба, "chown" може бути посилений у безпеці та модифікований, щоб дозволити його, а потім встановити w / setuid "root", щоб він міг реалізувати таку політику.


Квоти завжди базуються на власності файлів , а не на розташуванні . Інакше хтось міг би все тримати /tmp.
grawity

+1, вам здається чорт правильно :). У системах OpenSolaris (яка насправді є нащадком System V) ви можете встановити це за допомогою mountопції (тому цей параметр може бути обмежений однією точкою монтажу, а не загальносистемною згідно з пропозицією щодо встановленого вами системи): rstchown(за замовчуванням ) обмежити зміни власника файлів для кореневого користувача, norstchownщоб непривілейовані користувачі могли змінити власника своїх файлів (вони не можуть змінити його назад).
WhiteWinterWolf

6

Ну, якщо хтось міг змінити право власності, то будь-хто міг змінити дозволи, щоб отримати доступ до будь-якого файлу в системі. Це погано не лише з точки зору зловмисного програмного забезпечення (не вимагається судового забезпечення), але і з точки зору системного адміністратора. Якщо хтось із користувачів міг змінити будь-який із файлів, то дозволи на використання файлів марні.


2
Правильно. Я змінив питання, щоб було зрозуміло, я мав на увазі файли, якими володіє користувач, а не будь-який файл.
Олександру

1
@Alexandru: подумайте про зловмисного користувача, який переходить myTrojan.shна root та має прапор SUID.
Бенджамін Баньє

@honk: зараз має сенс.
Олександру

5

Тому що тоді користувач може ухилятися від квот файлової системи. Якщо у мене квота в 100 МБ, а у вас квота в 100 МБ, я можу завантажити 100 МБ, chmod a + r, подати вас, а потім завантажити ще 100 МБ.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.