вторник, 23 января 2018 г.

Права на папку и файлы

Как установить права доступа на запись в папку и на все подпапки и файлы:

chmod -R 755 /home/vasya

смена прав, -R рекурсивно, т.е. изменит и то, что внутри каталога vasya

циферки - это три отдельных атрибута:

7 - rwx - читать, писать, выполнять
6 - rw- - читаь, писать
5 - r-x - читать, выполнять
4 - r-- - читать
3 - -wx - писать, выполнять
2 - -w- - писать
1 - --x - выполнять
0 - --- - ничего нельзя делать

Первая цифра означает применения прав для пользователя,
Вторая - для группы
Третья - права для всех остальных

Для смены владельца файлов/каталогов используем chown:

chown -R vasya:users /home/vasya

поменяет владельца и группу каталога vasya и содержимое онного!



Сегодня хочется задеть одну очень скользкую тему: права (и обязанности) на файлы в системах, основанных на Unix.
Как всегда, хочется рассказать интересно и не упустить важные моменты. Но многим это просто не надо. Им нужен очередной stackoverflow с ответами, в которые не надо вдумываться… Вжух-вжух и ты ботнет.
Поэтому вот рецепты (tl;dr), а объяснение будет ниже.
Чтобы сменить владельца файлов в директории и во всех поддиректориях (рекурсивно), выполните:
sudo chown -R user:group /home/user/path/to/directory/
sudo chown -R www-data:www-data /home/user/www/site/upload/
chmod o+r /var/www/index.html
chmod -R o+r /var/www/index.html
find /var/www/html-site -type f -exec chmod 644 {} \;
find /var/www/html-site -type d -exec chmod 755 {} \;
sudo su user_name
$ sudo chown -R user:group /data/
chown: неверный пользователь: «user:group»
Файлы в Unix
  1. Обычный файл — как раз всё то, что мы называем файлом.
  1. Директория — она же «папка», она же «каталог».
  1. Символическая ссылка — этакий ярлык на другой «файл».
  1. Блочное устройство — те же жёсткие диски, флешки.
  1. Символьное устройство — например, терминалы tty.
  1. Канал (fifo) — один из вариантов межпроцессорного взаимодействия.
  1. Unix сокет — ещё один из вариантов межпроцессорного взаимодействия.

Права в Unix
  1. У каждого файла есть владелец. Владелец устанавливает права доступа на свои файлы (например, командой chmod).
  1. В системе есть супер-пользователь (root), который устанавливает владельцев файлов (например, командой chown).
Доступ по пользователям делится на 3 группы
  1. Владелец (user) — тот самый, что имеет возможность изменять права доступа.
  1. Группа (group) — какая-то группа пользователей, которая должна иметь определённые права на файл. Посмотреть группы пользователя можно командой
$ groups gosha
gosha : gosha adm cdrom sudo dip plugdev lpadmin sambashare libvirtd
$ grep cdrom /etc/group
cdrom:x:24:gosha
  1. Все другие (other) — любой пользователь, существующий в системе.
Сами права доступа также делятся на 3 группы
  1. Права на чтения (read или «4» в битовой маске) — право читать файл или читать содержимое директории.
  1. Права на запись (write или «2» в битовой маске) — право писать в файл или создавать файлы в директории.
  1. Право на исполнение (execute или «1» в битовой маске) — право запускать файл (программу, записанную в файле) или переходить по директории вглубь (например, сделать cd в поддиреторию).
Битовая маска прав доступа
drwxr-xr-x 2 root root 4096 май 6 03:24 bin
||||||||||
|||||||||+-исполнение для всех остальных - разрешено
||||||||+--запись для всех остальных - НЕ разрешено
|||||||+---чтение для всех остальных - разрешено
||||||+----исполнение для группы владельца - разрешено
|||||+-----запись для группы владельца - НЕ разрешено
||||+------чтение для группы владельца - разрешено
|||+-------исполнение для владельца - разрешено
||+--------запись для владельца - разрешено
|+---------чтение для владельца - разрешено
+----------тип файла - диретория
владелецгруппаостальные
буквенноеrwxr-xr-x
числовое (десятичное)421401401
итоговое (сумма)755

Например, чтобы apache смог в какой-то папке сохранять файлы, выполняем:
Чтобы дать права на чтение файла для всех, выполните:
Чтобы сделать это для всей папки и подпапок (рекурсивно):
Чтобы для всех файлов в папке (рекурсивно) выставить права «владелец может читать и менять, остальные — только читать»:
Чтобы для папки и подпапок (рекурсивно) выставить права «владелец может просматривать содержимое и создавать файлы и папки, остальные — только просматривать»:
Чтобы проверить, что у пользователя есть права, самое простое — зайти под ним:
— прочитать файл / создать файл прямо под этим пользователем.
Ну и самое интересное, что я нашёл в популярных вопросах:
— замените user на имя пользователя (не «Иван Иванович Иванов», а «ivanov»), а «:group» можно не указывать.
А на самом деле…
Начнём с того, что файлы в Unix бывают разные. Идеология «всё есть файл» предполагает, что файлы — не то, чем кажутся.
Так что даже с понятием «файл» не так уж и просто. Зато есть возможность на всех них единообразно раздавать права, пользоваться ими. Например, можно сделать cat на устройство, echo для записи в сеть и т. д.
Во FreeBSD я успешно делал cat на директорию, правда получал не особо читаемую информацию. Но и её можно было использовать для получения нужной информации о файле типа «каталог».
В особо весёлых Unix-ах, например Plan9 можно использовать вместо интерфейса сокетов файлы типа /net/tcp. В общем, как всегда идеология «всё есть что-то» не имеет границ здравого смысла. И это прекрасно!
Здесь мы рассмотрим базовую модель прав в Unix (модель дискреционного управления доступом), без всяких расширений типа атрибутов файлов, эффективных прав и прочих липких битов.
Суть модели прав довольно проста:
Теперь подробнее по первому пункту.
  1. — пользователь gosha состоит в группах: gosha adm cdrom sudo dip plugdev lpadmin sambashare libvirtd.
    С другой стороны можно посмотреть всех пользователей, состоящих в группе:
    Не самый элегантный способ, но работает на всех Unix. Также можно использовать утилиты lid и members.
Давайте посмотрим права на папку /bin, например, с помощью команды ls -l / | grep bin :
Кроме указанного представления полномочий доступа (символьного), существует так же и числовое представление. Для общего понимания, приведу таблицу соответствия числового (двоичного и десятичного) значения прав доступа и буквенного:
В приведенной таблице показано, что право чтения, соответствует значению 4, право записи — 2, право выполнения — 1, отсутствие права — 0, складывая данные показатели, можно представлять и назначать права в числовом виде. Таким образом, вместо drwxr-xr-x можно написать 755. Часто можно увидеть именно числовое определение прав доступа — теперь вы понимаете, что это значит.
Часто можно увидеть на файле права 644 — постарайтесь понять, что это значит, чтобы закрепить полученные знания.

Комментариев нет:

Отправить комментарий