Изменить права на файлы или папки в Linux (chown, chmod)

Для тех, кто ищет быстрый способ парой командой массово поменять права доступа на файлы и папки:

Сменить владельца для всех папкок и файлов, лежащих в данной папке

Чтобы сменить владельца, в Unix используется команда chown. Первая группа параметров данной команды — опции. Для того, чтобы изменения коснулись не только данной директории, но и всех поддиректорий, нужно применить командурекурсивно — с параметром «-R».

Вторая группа параметров — это владелец и группа владельцев, разделённые двоеточием (можно не устанавливать группу — тогда это просто логин владельца) — «user:group» или «user».

Третья же группа параметров — это пути до папок / файлов, к которым нужно применить команду. Например, «/home/user/dir/».

Итак, команда смены владельца и группы владельцев для директории и всех поддиректорий с файлами будет выглядеть так:

sudo chown -R user:group /home/user/dir/

Sudo говорит о том, что команда будет исполняться с повышенными привилегиями — обычный пользователь не способен изменить ни владельца, ни группу.

Введение

В Unix каждому файлу соответствует набор прав доступа, представленный в виде 9-ти битов. Он определяет, какие пользователи имеют право читать файл, записывать в него данные или выполнять его. Права могут изменяться владельцем файла или суперпользователем с помощью команды chmod.

Для каждого файла определяется доступ:

  • владельца (owner);
  • группового владельца (group owner);
  • остальных пользователей (everyone).

Реализация управления доступом осуществляется тремя флагам:

  • чтение — read (r);
  • запись — write (w);
  • выполнение — eXecute (x).

Также у файла присутствует дополнительный флаг, определяющий тип файла, так как в Unix системах всё является файлом, включая папки и устройства.

flag user group other
# rwx rwx rwx

Таблица типа флага.

Флаг Описание
Отсутствие флага
l Символическая ссылка (symbolic link)
d Директория (directory)
b Блочное устройство (block device)
c Символьное устройство (character device)
p Канал, устройство fifo (fifo device)
s Unix сокет (unix domain socket)

Права доступа

Сочетание трех флагов определяет право доступа, например r-x, rw- или rwx. Для удобства записи флаги представляются числами с отличающимся разрядом, что позволяет по их сумме определить право доступа.

  • read = 4
  • write = 2
  • eXecute = 1

Для файлов и каталогов, флаги r, w, x имеют отличный смысл.

Сумма Флаги Маска Права на файл Права на каталог
0 000 — — — отсутствие прав отсутствие прав
1 001 — — x права на выполнение доступ к файлам и их атрибутам
2 010 — w — права на запись отсутствие прав
3 011 — w x права на запись и выполнение все, кроме доступа к именам файлов
4 100 r — — права на чтение только чтение имен файлов
5 101 r — x права на чтение и выполнение чтение имен файлов и доступ файлам и их атрибутам
6 110 r w — права на чтение и запись только чтение имен файлов
7 111 r w x полные права все права

Для полноценного просмотра каталога, необходимы права на чтение каталога и доступ к файлам, а главное к их атрибутам, т.е. минимальные разумные права на каталог = 5 (r-x). Прав 4 (r–) хватит только на просмотр имен файлов, без атрибутов, т.е. не будут известны размер файла, права доступа, владелец. На практике для каталогов используется только три режима: 7 (rwx), 5 (r-x) и 0 (—).

drwxr-xr-x 13 allexserv nogroup 4096 2009-05-31 14:58 phpBB3Права доступа по-умолчанию (umask)

У каждого пользователя есть umask — инвертированная битовая маска накладываемая на набор прав по умолчанию. Значение umask хранится в профиле пользователя. Узнать значение можно командой umask.

$ umask 0002

Итак, инвертированная маска = 7775, режим полного доступа для директорий — 777, для файлов — 666. Таким образом при создании файла результирующий набор бит прав доступа:

  • Для файлов 666 & !umask (7775) = 664
  • Для директорий 777 & !umask (7775) = 775

Почитать:

  • Ubuntu wiki: Права доступа Unix
  • Права
  • umask

Калькуляторы

Зачем использовать Chmod

В UNIX-системах — FreeBSD, Ubuntu, Debian, Centos — у каждого файла и папки (каталога) есть свои владелец и группа, к которым они относятся. Сделано это с целью разграничения прав доступа на чтение (r, read), запись (w, write) и исполнение (x, execute) для разных пользователей: владельцев (u), пользователей, входящих в группу владельца (g) и остальных (o). Например, если вы пользуетесь хостингом, то должны знать, что ваш сайт физически находится на одном сервере рядом со множеством других сайтов таких же, как вы, пользователей со своими сайтами. Чтобы вы не смогли помешать друг другу, у каждой директории с сайтами свой владелец и группа пользователей, к которым они относятся. На shared хостинге о вас позаботятся профессиональные системные администраторы. А если вы имеете свой сервер VDS/VPS, то просто обязаны следить за прописанными правами на доступ к файлам. Например, если вдруг с помощью уязвимости на сайте злоумышленник сможет записать backdoor в директорию для загрузки файлов, то с правильно прописанными правами доступа он не сможет причинить большого вреда файловой системе. Конечно, в директории для загрузки файлов должно быть принудительно отключено исполнение скриптов, но это тема уже для другого разговора.

Работа с файлами и директориями Linux

ls #показать список файлов в текущем каталоге (list) ls -la <имя каталога> #список файлов в каталоге <имя каталога>, включая скрытые pwd #выводит текущий путь (команда вывода текущей директории) cd [каталог] #cменить текущий каталог (change directory) cp <что_копировать> <куда_копировать> #копировать файлы (copy) mv <что_перемещать> <куда_перемещать> #переместить или переименовать файл (move) mkdir <каталог> #создать новый каталог (make directory) rmdir <каталог> #удалить пустой каталог (remove directory) rm <файлы> #удалить файлы (remove) rm -rf <имя каталога> #удаление директории вместе с вложенными файлами locate /var/www* #найти все файлы с названием, заканчивающимся на #в директории /var/www tail <имя файла> #выводит конец файла. Удобно при работе с логами и большими файлами du . -bh | more #вывод на экран информации о размере файлов и каталогов, начиная с текущего каталога sudo chmod 777 -R ~/Общедоступные #разрешение на чтение/запись/исполнение для всех на каталог ~/Общедоступные # -R — рекурсивно, то есть и на все вложенные файлы и папки sudo chown <имя пользователя> <имя файла> #задать владельца файла >filename #делает filename пустым файлом, т.е. стирает содержимое touch filename #создаёт пустой файл, также меняет время последнего изменения файла

Что такое права доступа к файлам и папкам

Как правило мы размещаем свои сайты на хостингах, работающих под Unix-подобных операционных системах (Linux, например). Эти операционные системы отличаются от привычной рядовому юзеру Windows, в частности тем, что позволяют гибко задавать различные права доступа для разных групп лиц.

CHMOD (анг. change file mode) — изменение прав доступа к файлам в ОС типа Unix.

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

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

  • Владелец файла
  • Члены группы, к которой относится владелец
  • Остальные пользователи

Для каждого из этих видов пользователей существует три права: чтение (4), редактирование (2), выполнение (1). Если пользователю нужно задать несколько прав, то цифры в скобках складываются:

Чтение + редактирование = 4 + 2 = 6

Чтение + редактирование + выполнение = 4 + 2 +1 = 7

Что такое права доступа к файлам и папкам

Если установить права доступа 777 – полный доступ, это будет означать, что абсолютно любой пользователь сможет сделать с вашим файлом абсолютно все. Представьте, к чему может привести установление такого атрибута для важных системных файлов.

Поэтому, если при работе с блогом, у вас возникли проблемы с редактированием какого-то файла, поменяйте атрибут только для своего пользователя (первую цифру замените на 7), не нужно задавать файлу полные права 777.

Права можно записать другим способом – латинскими буквами

  • Чтение (Read) — r
  • Редактирование (Write) — w
  • Запуск на выполнение (Execute) — x
  • Отсутствие прав — (0) —

Примеры прав доступа:

Пользователь

Группа

Остальные
600 только владелец имеет право читать и редактировать
r— 644 владелец файла, владелец имеет право читать и редактировать, члены группы и остальные только читать
rw- 666 любой пользователь имеет право читать и редактировать
700 только владелец файла имеет право читать, редактировать и запускать на исполнение
—x 711 владелец файла имеет право читать, редактировать и запускать на исполнение, члены группы и остальные пользователи имеют право запускать на исполнение, но не могут читать и изменять
r-x 755 владелец файла имеет право читать, редактировать и запускать на исполнение, члены группы и остальные имеют право читать и запускать на исполнение, но не могут записывать
rwx 777 любой пользователь имеет право читать, редактировать и запускать на исполнение

По умолчанию для папок выставляются права — 755, а для файлов — 644.

Замена текста и данных в файлах Linux

Для взаимодействия с текстом внутри файлов есть команда sed. Команд множество, но чаще всего может понадобится команда по замене определенного текста в конкретном файле.

Например:

sed ‘s/odin/dva/g’

Заменяет в файле все слова «odin» на слова «dva».

Иногда требуется раскомментировать какую-то строчку в файле и для этого не обязательно открывать файл и редактировать его. Достаточно знать данные в нём, которые нужно раскомментировать.

sed -i "s/^#znachenie/znachenie/g" /etc/

где «^» — означает начало строки, # — символ, отвечающий за разрешение/запрещение чтения команд определенного языка программирования в выполняющем для этого файле.

Apache

Веб-сервер чуть медленнее, чем Nginx. Один из самых популярных в интернете.

Одна из ключевых особенностей — .htaccess файлы дополнительной конфигурации. Можно управлять отдельными папками. Размещаете этот файл в папке и прописываете в нём правила.

Этим хорош и плох Apache одновременно. Хорош, тем что можно гибко настраивать каждую папку, плох тем, что конфигурационные файлы разбросаны по разным местам.

service apache2 restart — перезапуск Apache

service apache2 reload — применение новых конфигов без перезапуска сервера.

service apache2 stop — остановка веб-сервера

Справочная информация

  • man command – показать ман-страницу для command
  • info command — показать info-страницу для command
  • whatis command – поиск man-страницы для command и отображение информации об имени из соответствующей man-странице
  • apropos command — поиск по ключевым словам в man-страниц и выводит те, которые содержат command(по существу, это аналог команды man -k, где ключ k — указывает на поиск в руководстве по ключевому слову)
    • editor — отобразит имеющиеся в системе текстовые редакторы
Читайте также:  Чего ждать от Apple: все прогнозы 2018 года