Спільні права на файли (для *nix)

  • 2011-11-15
  • (автор: yurb)

Нерідко виникає становище, коли одним компутором користується кілька людей. При тому значна частина даних у них також може бути спільною, як то, наприклад, фотоархів. У Unix-подібних системах, зазвичай, при створенні файл отримує схему прав доступу, яка дозволяє запис лише власнику файлу. Це стосується і тек. Якщо ж більшість Ваших даних є спільними, можливо, Вам буде зручніше, щоб створювані Вами файли (й теки) були одразу доступні до запису й иншими користувачами з групи, до якої Ви належите. УВАГА: Існує зручна альтернатива до описаного тут способу. Дивіться перші два відгуки. Для цього потрібно подбати про кілька речей:

  • аби усі «користувачі-друзі» належали до спільної групи у системі;
  • щоб усі спільні файли належали цій групі;
  • щоб файли при створенні одразу були з доступом для запису групою

Отож, спробуємо це організувати.

Спільна основна група користувачів

Кожен користувач належить до певної групи (а найчастіше — до кількох). Часто буває так, що при створенні користувача йому автоматично створюється ще й його персональна група, до якої більше ніхто не належить. За такого становища доступ запису групою до файлу не буде нічого змінювати, оскільки до цієї групи належатиме лише один користувач — творець файлу. Щоб реалізувати наш задум, нам потрібно, щоб файл при створенні відразу асоціювався із якось спільною групою. У Debian Gnu/Linux в системі вже наявна така група — «users» під номером 100. Якщо у Вашій системі такої немає, Вам доведеться самостійно створити групу (див. довідку команди «addgroup»). Отож, щоб встановити основну групу користувача на «users», потрібно відредагувати файл /etc/passwd, і замінити четверте поле у рядку цього користувача на 100:

tshevchenko:x:1001:1001:Taras Shevchenko,,,:/home/yurb:/bin/bash

ось тут:

___________________
                   v
tshevchenko:x:1001:100:Taras Shevchenko,,,:/home/yurb:/bin/bash

Далі потрібно змінити групу всіх файлів цього користувача на «users» (у цьому немає нічого страшного, оскільки група все одно не зможе у них записувати, а читати вона могла й раніше). Найкраще це зробити автоматизованим способом:

sudo find /home -group tshevchenko -exec chgrp --verbose users '{}' \;

Процедуру потрібно повторити з усіма иншими користувачами, які мають бути «друзями», відповідно заміняючи «tshevchenko» на їхні користувацькі імена.

Забезпечення бажаних прав при створенні файлу

Те, яку саме схему прав отримує файл при створенні, регулює команда «umask». Вона діє на більшість програм, що запущені як дочірні від тієї, в якій ми активували «umask» (працює за принципом змінних середовища). Отож, нам потрібно зробити так, щоб «umask» запускалась автоматично перед запуском кожного графічного сеансу. Це не складно: як відомо, більшість процедур запуску в Unixоподібних системах є простими текстовими файлами, які системний адміністратор може редагувати. Одним з них (зазвичай) є файл «/etc/X11/Xsession». Цей файл і запускається при кожній реєстрації у систему через графічний обладунок. У Debian цей файл поділено на кілька окремих фалів, що зберігаються у теці «/etc/X11/Xsession.d/». Тому маємо кілька варіянтів: або редагувати «Xsession», або додати окремий файл у теку «Xsession.d» (якщо вона є у Вашій системі). В будь-якому випадку, ось код, який нам потрібно додати:

# Хай файли при створенні будуть спільні!
umask g+w

Якщо у Вас є тека «/etc/X11/Xsession.d/», краще зребегти цей код туди під назвою, наприклад, «99-default-umask». Також дуже важливо подбати про те, щоб ніхто крім системного адміністратора не мав права у цей файл записувати (тоді це була б серйозна діра в безпеці системи), а також щоб цей файл можна було виконувати nсім. Якщо ж у Вас такої теки немає, тоді додайте цей код до «/etc/X11/Xsession» десь перед викликом дочірньої програми-сеансу, якa починається з команди «exec» у кінці файлу.

Як перевірити?

Після того, як Ви додали відповідні рядки до сценаріїв запуску, повторно зареєструйтесь у системі, і введіть у терміналі команду «umask». Вона повинна повернути «0002». Якщо, натомість, Ви бачите «0022», потрібно ще раз перевірити сценарії запуску.

На потім

У Debian є дуже корисний файл /etc/adduser.conf. Він регулює те, в який спосіб створюються користувачі у системі. Там можна вказати, щоб користувачі niдразу при створенні залучались до тієї чи иншої групи, а також вимкнути створення персональних груп для кожного користувача. Це може суттєво полегшити налаштування щойно встановленої системи за описаною схемою.

P.S.

Я займаюсь лише кількома домашніми машинами. Тому усе, що я вище написав, використовуйте на власний ризик;) Щасти!