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


75

Чому chownкоманда працює лише корінь? Чому не-користувачі не можуть використовувати програму chown, щоб передавати їм власні файли?


не можу зрозуміти, що ваша команда chown може бути використана і користувачем, який не користується коренем,
harish.venkat

Можливо, я неправильно ставлю це Ну точним питанням мого професора було: "Чому перехід прав від звичайного користувача не дозволяється в системах UNIX?" ...
флег

19
Я думаю, що справжнє питання: чому не можуть користувачі, котрі не користуються коренем, використовувати chownдля видачі власних файлів. (Я бачив системи, де, залежно від конфігурації файлової системи, ви можете.)
Кіт Томпсон,

Відповіді:


96

Більшість систем Unix забороняють користувачам «віддавати» файли, тобто користувачі можуть запускатись лише у chownвипадку, якщо вони мають цільові права користувача та групи. Оскільки для використання chownпотрібно володіти файлом або мати root (користувачі ніколи не можуть присвоювати файли інших користувачів), тільки root може запускатися, chownщоб змінити власника файлу на іншого користувача.

Причиною цього обмеження є те, що передача файлу іншому користувачеві може призвести до того, що погані речі трапляються в нечастому, але все ж важливому випадку. Наприклад:

  • Якщо в системі увімкнено дискові квоти, Аліса могла створити файл, що записується у світі, під каталог, доступний лише їй (щоб ніхто більше не міг отримати доступ до цього файлу, що записується у світі), а потім запустити, chownщоб зробити цей файл власником іншого користувача Білла. Файл тоді зараховуватиметься до дискової квоти Білла, навіть якщо тільки Аліса може використовувати цей файл.
  • Якщо Аліса передає файл Біллу, то немає й сліду, щоб Білл не створив цей файл. Це може бути проблемою, якщо файл містить незаконні дані або іншим чином компрометує дані.
  • Деякі програми вимагають, щоб їх вхідний файл належав певному користувачеві для автентифікації запиту (наприклад, файл містить деякі інструкції, які програма виконує від імені цього користувача). Зазвичай це не безпечна конструкція, оскільки навіть якщо Білл створив файл, що містить синтаксично правильні інструкції, він, можливо, не мав наміру виконувати їх саме в цей час. Тим не менш, дозволити Алісі створити файл з довільним вмістом і взяти його за вхід із Білла може лише погіршити ситуацію.

3
На попередній роботі я створив програмну систему, яка залежала від неможливості видавати файли. Він використовував право власності на файл, щоб перевірити, чи був поданий запит конкретним користувачем. Під час встановлення він перевіряв, чи дозволяється видавати файли, і якщо так, відмовився продовжувати.
Кіт Томпсон

2
Ще одна найважливіша проблема полягає в тому, що користувач може скопіювати /bin/bash, налаштувати його, а потім chownпередати його кому хоче. Тепер вони мають доступ до оболонки як ця людина.
Патрік

18
@Patrick chownзавжди очищає встановлені та встановлені жорсткі біти.
Жиль

1
@Gilles і з поважної причини ... якщо ви зможете скопіювати бінарний оболонку кудись, ви можете отримати до нього доступ, встановіть на нього встановлені / gid біти і порушуйте його на root (або будь-який порядок цього, який отримує вам 6755/0: 0 perms / володіння) ви можете отримати root у цій системі. О, точно пропустив коментар Патріка.
ханецер

Гаразд, але якщо я володію dir ( drwxr-xr-x ring0 ring0 .), у якому root має звичайний файл ( -rw-r--r-- root root file), чому я не можу це зробити, chown ring0 fileоскільки це все одно дозволено робити, як ring0, cp file x ; rm file ; mv x file(і деякі необов'язкові touch sometime file...)?
Кільце Ø

15

В Linux вам потрібна можливість CAP_CHOWN, щоб подати клопот. root наданий такий. Зверніться до: http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html для пояснень. Якщо ви маєте намір надати можливість CAP_CHOWN, створіть свій код за допомогою libcap-ng або libcap, як це продемонструвало: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html там, де вам потрібно просто замінити CAP_AUDIT_WRITE з CAP_CHOWN.


1
+1 для вас не потрібно мати root. Тому що вам більше не доведеться викорінювати корінь.
ctrl-alt-delor

1
Іноді вам навіть не потрібен CAP_CHOWN: unix.stackexchange.com/questions/399975/… З мого читання джерела ядра перед кожною реалізацією файлової системи покладається задача перевірити дозволи на chown. І виявляється, що з NFS дозволи перевіряються на стороні сервера. І якщо сервер ... дивний ... то це можливо.
Майк S

0

Ви можете запустити команду, але вона не працюватиме, якщо ви не root. Це легко: уявіть користувача, який може змінити програмне забезпечення на root користувача. Він може додати встановлений біт і, voilà, хлопець root! Отже, використання може додати біт із chmod, але немає шансів змінити власника файлів.


12
Ви не можете додати біт setuid до файлу, який у вас немає, та реалізацій, які дозволяють видалити файли очистити встановлений біт.
Жиль

Я думаю, що відповідь Дома полягає в наступному: Уявіть собі, чи могли б ви. Тоді були б неприємності. Ваша думка, що ви не можете, є правильною. Але ОП запитують "чому?" Очищення встановленого біта - це ще одна функція безпеки, яка знову запитує "чому?" Що б я потім посилався на відповідь Дома: Якщо користувач може подати клопот, а якщо користувач може налаштувати, то комбо було б згубним. Я думаю, що він робить точну крапку, навіть якщо його трохи не вистачає.
Майк S
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.