Хто "інші" в дозволах Linux, і що означає "виконувати"?


13

Я не зміг знайти відповіді на ці три питання:

  • Хто "інші", якщо ми надаємо користувачу всі сервіси на нашому сервері, "інші" не існують? Наприклад, якщо ми поставимо Apache користувачеві, і ми встановимо, що він /var/wwwпорушений apache, і ми введемо його , chmod 700він повинен працювати, правда?

  • Яка різниця між "виконувати" та "читати"?

  • Які дозволи файлів за замовчуванням для всієї системи після чистої установки (наприклад, в Ubuntu)?

Відповіді:


16

Хто "інші", якщо ми надаємо користувачу всі сервіси на нашому сервері, "інші" не існують? Наприклад, якщо ми поставимо Apache користувачеві, і ми встановимо, що він /var/wwwпорушений apache, і ми введемо його , chmod 700він повинен працювати, правда?

Ось як працюють дозволи, пояснені дуже коротко:

  • Перша цифра для фактичного власника файлу (перевірте , хто володіння файлу ls -lі змінити його chown)

  • Друга цифра для групи файлу (хоча власник файлу не повинен обов'язково бути в тій же групі , що є власником файлу)

  • Третя цифра є хто - то інший, тобто НЕ власник файлу , і все не в групі.

Тож якщо ви маєте chmodфайл до 700 і ним належить apache, навіть ваш "звичайний" користувач не зможе його прочитати, записати чи виконати. Це дуже обмежувально і потрібно лише в рідкісних випадках - наприклад, коли ви хочете захистити приватний ключ SSH, він отримує 600дозволи. Для Apache це може спричинити навіть інші проблеми, окрім того, що зі звичайним обліковим записом користувача ви більше не зможете редагувати жодні файли /var/www.

Отже, загалом кажучи, вам не потрібно видаляти дозволи x00для читання ( ) для інших.

Ви можете дозволити apacheвласний /var/wwwкаталог, але 644можливо (лише для читання для інших). Інший підхід , який я часто використовую додавання власних користувачів і користувача Apache на нову www-usersгрупу, а потім chmodding файлів /var/wwwз 775. Таким чином, і ви, і Apache можете записувати у файли. Дивіться тут для отримання додаткової інформації: Групові дозволи для apache


Яка різниця між "виконувати" та "читати"?

Виконані файли можуть працювати безпосередньо користувачем - прямо з оболонки. Щоб продемонструвати це, давайте напишемо короткий файл і назвемо його "тест". Додайте наступний вміст:

echo "I am executable"

Збережіть файл. Тепер у своїй оболонці спробуйте ввести ./test. Ви отримаєте помилку " -bash: ./test: Дозвіл відхилено ". Це тому, що за замовчуванням новостворені файли не мають дозволу на виконання. Якщо ви додасте дозвіл на виконання, воно працюватиме.

$ chmod +x test
$ ./test
I am executable

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

Це, наприклад, системні програми, здебільшого знайдені в /bin. Запустіть ls -l /binперевірити їхні дозволи. Як бачите, вони належать root, і ви не можете їх змінити, але ви завжди можете їх виконати.

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

Щоб дізнатися більше про дозволи Unix, прочитайте статтю у Вікіпедії . Основні дозволи, які ви знаєте як "читання-запис-виконання", існують вже давно, але є лише частиною того, що ви називаєте "Списки контролю доступу", які пропонують набагато більше функціоналу, ніж цей.


Які дозволи файлів за замовчуванням для всієї системи після чистої установки (наприклад, в Ubuntu)?

Вони залежать від каталогу та власника. Деякі файли та каталоги системно зарезервовані та належать root. У більшості випадків ви зможете прочитати їх у звичайному обліковому записі користувача.

Інші каталоги, наприклад, ваша домашня папка, очевидно, належать вашому користувачеві. Можливо, має сенс відмовити в дозволі на читання іншим користувачам на машині, якщо вони поділяться між кількома людьми - адже ви не хочете, щоб ваші приватні речі були відкриті.

Нарешті, деякі файли виконуються за замовчуванням (наприклад, в /bin), а інші - (наприклад, файли конфігурації в /etc).

Filesystem Hierarchy Standard визначає передбачуване використання для каталогів , знайдених в системах Linux. Ви майже можете «здогадатися», які дозволи повинні базуватися на тому, що ви хочете зробити з каталогом.


Дякую, що ти дуже мені дуже допомогла! Я не можу подякувати вам, ще одне питання, де знаходиться лінія між "файл" та "виконуваний файл", наприклад, чи файли PHP виконуються чи читаються Apache? Ще раз дякую!
randomKek

.phpЗазвичай файли не виконуються. Вони, просто кажучи, читаються Apache лише тоді, коли ви вказуєте свій браузер, наприклад, http://example.com/file.phpперш ніж Apache зможе показати вихід, вони повинні інтерпретуватись вашою установкою PHP, але Apache про це піклується. Теоретично ви можете зробити файл PHP виконуваним і запустити його як сценарій - в тому ж ключі, що і ми з нашим testфайлом, але це рідко використовується.
slhck

5

Просто хочу додати, що дозвіл на виконання має різні ефективні значення для каталогів:

Для файлів :

  • Прочитати: Якщо вміст файлу можна прочитати
  • Написати: Якщо користувач або процес може записати у файл (змінити його вміст)
  • Виконати: якщо файл можна виконати

Для папок :

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

Ні, немає окремого дозволу на видалення каталогів.

(Отримайте цю інформацію тут .)


0

Я не фахівець з Linux, але все ж намагаюся відповісти.

Кожен запис файлової системи має асоційованих користувачів та групи. Дозволи користувача обробляються прапорами "user". Права користувачів, які входять до однієї групи, обробляються прапорами "групи". Усі інші користувачі обробляють прапорами "інші".

"читати" означає те, що воно говорить. "Execute" означає, що ви можете запустити файл (наприклад, команду) або що ви можете перерахувати каталог.

Щодо дозволу за замовчуванням, я не впевнений. Я думаю, це можна налаштувати якось, а значить, може бути різним для кожного користувача.


0

Щоб дати вам гідну відповідь на питання 2, принаймні, ось таблиця з підсумками, яка показує, що ви можете / чого не можете зробити:

+--------------------------------------------------+
| Execute Yes (./file.sh) | Read Yes (vim file.sh) |
|--------------------------------------------------|
| Execute Yes (./file.sh) | Read No (ERROR)        |
|--------------------------------------------------|
| Execute No (ERROR)      | Read Yes (vim file.sh) |
|--------------------------------------------------|
| Execute No (ERROR)      | Read No (ERROR)        |
+--------------------------------------------------+

Що важливо пам’ятати, це те, що це не файл, який читає файл USER, в пам'ять для того, щоб виконати його, це KERNEL робить це від імені USER.


0

Це може бути складним, якщо ви хочете виключити всіх інших. Подивіться на цей список з мого файлу / etc / passwd (дозволи та що-небудь не видалено для наочності):

root daemon bin sys sync games man lp mail news uucp proxy www-data резервний список irc gnats libuuid syslog messagebus usbmux haldaemon нікого

a {це я, а нижче наведені речі, які я встановив, перш за все, із системою}

avahi mysql імпульс rtkit пісня боязкість didiwiki

Наприклад, видаліть дозволи з lp чи uucp, і ви порушите друк. видаліть дозвіл з бінь, sys або демон, і, ймовірно, багато чого зламається. irc, ігри, пошту, новини та резервну копію, ймовірно, можна буде безпечно видалити (якщо ви не використовуєте їх через систему, а не через браузер). решту я залишаю вашим навичкам пошукової системи.

Це ubuntu / bodhi linux, але в інших системах може бути менше додатків. всі ці інші, однак, повинні запобігти необхідності запускати все як root. Я думаю, що можливо створити систему, де кожен файл може читати / записувати / виконувати лише один із користувачів системи (барний корінь), але я не впевнений, що це було випробувано.

Execute - це дозвіл на запуск коду. Прочитати - це лише дозвіл на перегляд (чи копіювання?).

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