Які різні способи встановлення дозволів на файли тощо на gnu / linux


19

У Unix, давно назад, я дізнався про chmod: традиційний спосіб встановлення дозволів, на Unix (і дозволити програмам отримувати привілеї, використовуючи setuid, setgid).

Нещодавно я виявив новіші команди в GNU / Linux:

  • setfaclрозширює традиційні ugo:rwxбіти і tбіт chmod.
  • setcapдає більший контроль зерна плавника, ніж ug:sбіт chmod.
  • chattr Дозволяє деякі інші елементи управління (трохи суміші) файлу.

Чи є інші?


Дивіться також unix.stackexchange.com/q/183994/4778 для більш детальної інформації проchmod
ctrl-alt-delor

Дивіться також unix.stackexchange.com/q/246606/4778 для розширених ACL (richACL).
ctrl-alt-delor

Відповіді:


28

chmod: зміна бітів режиму файлу

Використання (восьмеричний режим):

    chmod <octal-mode> files...

Використання (символічний режим):

    chmod <references><operator><modes> files..

references- це комбінація букв ugoa, які вказують, яким користувачеві доступ до filesволі буде змінено:

  • u користувач, який ним володіє
  • gінших користувачів у групі file's
  • o інші користувачі, які не входять до групи файлів
  • a всі користувачі

    Якщо цей пункт пропущено, він використовується за замовчуванням для всіх користувачів, але umaskзмінюються лише дозволи, дозволені

    operatorє одним із персонажів +-=:

    • + додати вказані біти режиму файлу до існуючих бітів режиму файлів кожного file
    • - видаляє вказані біти режиму файлів до існуючих бітів режиму файлів кожного file
    • =додає вказані біти і видаляє не визначені біти, за винятком setuidі setgidбітів, встановлених для каталогів, якщо явно не вказано.

    modeскладається з комбінації букв rwxXst, які вказують, який біт дозволу потрібно змінити:

    • r читати
    • w писати
    • x виконання (або пошук каталогів)
    • X виконати / шукати лише в тому випадку, якщо файл є каталогом або вже встановлений біт виконання для якогось користувача
    • ssetuid або setgid (залежно від зазначеного references)
    • t прапор обмеженого видалення або клейкий біт

    Альтернативно, modeбаночка може складатися з одного з літер ugo, і в цьому випадку режим відповідає дозволам, наданим власникам ( u), членам групи file's ( g) або дозволам користувачів у жодній з попередніх категорій ( o).

Різні шматочки chmodпояснюються:

  • Контроль доступу (див. Також setfacl)
    • rwx - читати (r), write (w), а також виконувати / перетинати (x) дозволи.
      • Прочитання (r) впливає на те, чи можна прочитати файл або чи можна вказати каталог.
      • Write (w) впливає на те, чи можна записати файл або якщо каталог можна редагувати (файли додані, видалені, перейменовані).
      • Execute (x) впливає на можливість запуску файлу, використання для скриптів (див. #!) Та інших виконуваних файлів.
      • Cross (x) впливає на те, чи можна пройти каталог.
    • sі t- липкий біт (t) і setgid (s) у каталогах
      • Клейкий біт впливає лише на каталоги. Не дасть удалити файли в каталозі будь-кому, окрім власника файлу та root.
      • встановлений біт setgid в каталогах призведе до того, що нові файли та каталоги матимуть групу, встановлену в одній групі, а нові каталоги мають встановити жорсткий біт (див. також за замовчуванням у setfacl).
    • s - setuid, setgid, на виконуваних файлах.
      • Це може погіршити безпеку, якщо ви не знаєте, що робите.
      • Якщо виконується виконуваний файл, якщо встановлено один з цих бітів, то ефективним користувачем / групою виконуваного файлу стане файл цього файлу. Таким чином, програма працює як цей користувач. шукати setcapбільш сучасний спосіб зробити це.

chown chgrp:


chattr: зміна атрибутів файлу

Використання:

    chattr <operator><attribute> files...

operatorє одним із символів +-=: * +додає вибрані атрибути до існуючих attributesіз files * -видаляє вибраний attributes * =перезаписує поточний набір атрибутів, які мають файли із зазначеними attributes.

attribute- це комбінація літер acdeijstuADST, що відповідають атрибутам:

  • a додавати лише
  • c стиснута
  • d без сміття
  • e формат міри
  • i непорушний
  • j обмін даними
  • s безпечне видалення
  • t немає з’єднання хвоста
  • u незмінний
  • Aatimeоновлень немає
  • D синхронні оновлення каталогу
  • S синхронні оновлення
  • T у верхній частині ієрархії каталогів

setfattr: зміна розширених атрибутів файлу

Використання (встановити атрибут):

    setfattr -n <name> -v <value> files...

Використання (видалення):

    setfattr -x <name> files...

name - це ім'я розширеного атрибуту для встановлення або видалення

value - нове значення розширеного атрибута


setfacl: зміни списків контролю доступу до файлів

Використання:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option повинен містити одне з наступних:

  • --set встановіть ACL файлу чи каталогу, замінюючи попередній ACL
  • -m| --modifyзмінити ACL файлу чи каталогу
  • -x| --remove видалити записи файлу або каталогу ACL

    target- це одна з букв ugmo(або довша форма, показана нижче):

  • u, usersдозвіл названого користувача, ідентифікований користувачем paramфайлу, за замовчуванням, uidякщо він пропущений

  • g, groupдозвіл названої групи, ідентифікованої за paramзамовчуванням для володіння групою, uidякщо вона пропущена
  • m, maskефективна маска прав
  • o, otherдозволи інших

    perms- це комбінація букв rwxX, які відповідають дозволам:

  • r читати

  • w писати
  • x виконати
  • X виконати, лише якщо файл є каталогом або вже має дозвіл на виконання для якогось користувача

    Крім того, це permsможе бути восьмерична цифра ( 0- 7), що вказує набір дозволів.


setcap: зміна можливостей файлу

Використання:

    setcap <capability-clause> file 

A capability-clauseскладається із списку розділених комами імен можливостей, а потім списку пар оператора-прапора.

Доступні оператори =, +і -. Доступні прапори e, iі pякі відповідають Діють , успадковані і Дозволені наборами можливостей.

=Оператор підніме зазначені набори можливостей і скинути інші. Якщо спільно з =оператором не вказано жодних прапорів, усі набори можливостей будуть скинуті. +І -оператори будуть підвищувати або знижувати один або більше зазначених набори можливостей відповідно.


chcon: змінити контекст безпеки файлу SELinux

Використання:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

користувач - це користувач SELinux, наприклад user_u, system_uабо root.

роль - це роль SELinux (завжди object_rдля файлів)

тип - предметний тип SELinux


chsmack: зміна розширених атрибутів SMACK

Використання:

    chsmack -a <value> file

valueє міткою SMACK, яку потрібно встановити для SMACK64розширеного атрибута файлу


setrichacl : змінити список розширеного контролю доступу.

richacl s - це функція, яка додасть більш досконалі ACL.

Наразі триває робота, тому я не можу сказати вам багато про них. Я не користувався ними.

Дивіться також це питання Чи існують більш просунуті файлові системи ACL за межами традиційних 'rwx' та POSIX ACL? і сторінка людини


5
+1 Якщо ви додали приклади використання кожного cmd, ця відповідь була б дуже корисною, як канонічну відповідь, яку ми можемо згадати вниз!
slm

1
@slm Дякую за пропозицію. Я додав коротке пояснення використання для кожної команди.
Томас Найман

Попередження для кожного, хто бажає скористатися можливостями далі, ніж показано тут. Я використовував можливості, як описано тут. Однак намагатися успадкувати їх (корисно) через fork та exec здається неможливим. Я думаю, що є помилка див. Unix.stackexchange.com/questions/196483/…
ctrl-alt-delor

Помилка я вже згадував в попередньому Coment, це була помилка і дизайн був зафіксований в ядрі 4.3 з додаванням можливостей навколишнього середовища, див man7.org/linux/man-pages/man7/capabilities.7.html
Ctrl-Alt-Делор

1
Я хотів би бачити приклади всього цього, це стане канонічною відповіддю!
стаціонарний

1

з високого рівня:

  • основні дозволи файлової системи, що підтримуються всіма Linux та всіма файловими системами, якими -rwxrwxrwxобробляється chmod, а також ідентифікаторами власника та групи, прив’язаними до кожного файлу чи папки файлової системи, якою обробляється chownта chgrp; всі в основному знають цей твір.
  • Розширені атрибути файлів, які скорочуються або відомі xattr . Вони є функціями файлової системи, які дозволяють користувачам пов'язувати комп'ютерні файли з метаданими, не інтерпретованими файловою системою, тоді як звичайні атрибути мають чітко визначене файловою системою призначення; атрибути - це ім'я: пари значень, пов'язані постійно з файлами та каталогами, подібно до рядків середовища, пов'язаних з процесом. Існують спеціальні команди Linux, пов'язані з простою установкою цих метаданих на різні файли / папки.
  • SELINUX відомий як захищений Linux . Ви можете шукати в Інтернеті історію. Також знайте, що існують альтернативи SELINUX, такі як AppArmor, і, ймовірно, є й інші. На даний момент це модулі ядра, які забезпечують функціональність та механізми для роботи MAC (обов'язкового контролю доступу) , використовуючи xattr; selinux зберігає мітки безпеки файлів у xattrs . І є конкретні команди, пов’язані з selinux.

інші ключові моменти:

  • ера та версія gnu / linux стосується xattr та selinux для того, що є, а що є функціональним.
  • повідомляється, що не всі файлові системи підтримують xattr; найкраще залишитись на індивідуальних дослідженнях, заснованих на розповсюдженні та використаній версії linux (rhel / suse / debian, irix, solaris, aix, unix з 1960-х)
  • це справді лише притаманні базові дозволи на файли / папки з uid's / gid плюс xattr, що робить все можливим; SELinux використовує xattr для зберігання ярликів безпеки файлів / папок ... із selinux вся робота на низькому рівні дещо зроблена / визначена в xattr, яку ви можете використовувати. Отже, якщо ваша стародавня файлова система не підтримує xattr, ви не будете використовувати selinux.
  • ви можете ввімкнути або вимкнути selinux (або apparmor або будь-який інший модуль ядра)
  • залежно від вашої версії Linux, можливо, можна включити або вимкнути xattr для заданої змонтованої файлової системи; Я пам'ятаю в SLES 11 варіант монтажу fstab, user_xattrі я міг вирішити, щоб у кореневій файловій системі не було доступно xattr під час встановлення; Я думаю, що зараз з RHEL / CentOS 7, що xattr є за замовчуванням, і ви не можете його мати.
  • коли це робиться, lsякщо ви бачите, -rwxrwxrwx+що +вказує, що атрибут розширеного файлу присутній на цьому об'єкті .
  • Список контролю доступу (ACL): це список дозволів, приєднаних до об'єкта. ACL вказує, яким користувачам або системним процесам надається доступ до об'єктів, а також які операції дозволено над даними об'єктами.
  • від centos wiki selinux: selinux - це механізм захисту MAC, реалізований у ядрі; без включеного SELinux використовуються лише традиційні методи дискреційного контролю доступу (DAC), такі як дозволи файлів або списки контролю доступу (ACL) для управління доступом до файлів користувачів; Користувачам і програмам дозволяється надавати недостовірні дозволи для файлів іншим або, навпаки, отримувати доступ до частин системи, які інакше не повинні бути необхідними для нормальної роботи; По суті за традиційною моделлю ЦАП, є два рівні привілеїв, root і користувач, і непростий спосіб застосувати модель найменшого привілею. Багато процесів, запущених root, пізніше втрачають свої права працювати як обмежений користувач
  • Варто прочитати, щоб поставити використання xattr та ACL в перспективі, оскільки Linux [ядро] розглядає все як файл (блокування пристроїв або мережевих портів), ви можете теги майже що завгодно за допомогою xattr та запровадити якийсь контроль доступу через selinux, це не лише файли / папки. https://wiki.centos.org/HowTos/SELinux
  • xattr може спричинити проблеми з переміщенням даних між системами та файловими системами та NFS, де [новіші] системи мають більш повну підтримку xattr порівняно зі старими системами, які можуть не розпізнавати всі ці розширені атрибути [якщо взагалі]. Пам’ятайте про використання tarречей з xattr, якщо він залишається в цій системі, це не проблема, але якщо він іде в іншому місці, це може бути проблематично, якщо xattr важливі (тобто самба та копіювання між win10 ntfs та linux ext3 / 4, btrfs, xfs; або назад і далі між мережевими пристроями зберігання даних)
  • якщо немає селінукса чи іншого механізму, що примушує ACL, відповідно до того, що визначено в xattrs, то xattrs теоретично нічого не може означати і бути відкинутим або позбавленим, тому що в цей момент це просто зайвий багаж.
  • будьте обережні, відключаючи selinux зараз у rhel / centos 7, тому що якщо файлова система не працює через xattr, це спричинить проблеми при зміні списку selinux на примусовий або дозвільний ; знову ж, це залежить від вашої версії Linux та того, як вона використовує xattr через selinux.

Базова частка Samba не працює в RHEL / CentOS 7 ... тому що selinux за замовчуванням встановлений для виконання; selinux відмовив у всьому, поки ви не дозволите це, або відключіть selinux (погано) або встановіть його на дозвільне. Якщо ви залишите selinux як примусовий, вам потрібно позначити папку, якою ви хочете ділитися samba, розширеним атрибутом, тому selinux розпізнає та дозволить поділитися. Тож якщо ви залишите примусове виконання selinux, то з усіма командами selinux (які потім встановлять необхідні xattrs):

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

ви додатково використовуєте selinux в системі Linux з цією спільною інформацією samba, щоб застосувати обмеження на файли / папки під цим спільним ресурсом samba (використовуючи будь-який розширений атрибут). Оскільки ці файли / папки поділяються спільно, користувач законно копіює деякі на свій Win10 ПК, а потім копіює назад, втрачаючи розширений атрибут. Тепер після цього копіювання вперед і назад, на цій Linux-системі selinux обмежить доступ до згаданих файлів, тому що потрібного xattr більше немає, а користувачі / адміністратори стукають там головно цікаво, чому все просто працювало, тепер це не відбувається ... встановити selinux щоб дозволити та розпізнати проблему втрачених xattrs, що відображаються в журналах аудиту, але це не вказуватиме безпосередньо, що це було результатом копії назад та назад, яка втрачає xattr. Також врахуйте резервне копіювання та відновлення даних та потенційну роботу, необхідну для запам'ятовуванняxattrs на додаток до uid / gid, якщо ви хочете застосувати безпеку на основі правильних xattrs.

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