Изменить права на файлы или папки в Linux

consoleРаботая в Linux (равно как и во FreeBSD и Windows), нужно не забывать о правах доступа на файлы и папки. Часто, разворачивая проекты, написанные другими программистами, возникает необходимость изменить права на файлы или папки. Потребность эта возникает при неправильном проектировании разработчиками прав доступа или же при тонкой настройке проекта на поддерживаемом сервере. Ниже приведённые рецепты помогут решить 90% проблем, возникающих при настройке прав доступа.

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

Чтобы сменить владельца, в Unix используется команда chown. Первая группа параметров данной команды — опции. Для того, чтобы изменения коснулись не только данной директории, но и всех поддиректорий, нужно применить команду рекурсивно — с параметром «-R». Вторая группа параметров — это владелец и группа владельцев, разделённые двоеточием (можно не устанавливать группу — тогда это просто логин владельца) — «user:group» или «user». Третья же группа параметров — это пути до папок / файлов, к которым нужно применить команду. Например, «/home/user/dir/». Итак, команда смены владельца и группы владельцев для директории и всех поддиректорий с файлами будет выглядеть так:

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

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

Изменить права доступа на файл или папку

Помимо владельца, можно настроить, что же может этот самый владелец и группа, а также все остальные. В Unix идёт разделение возможностей именно таким образом — есть 3 группы прав: владелец, группа владельцев и другие. И права, что можно присвоить каждой группе:

  • Право на запуск файла. Оно же — право на проход по директории (если устанавливаем права на директории).
  • Право на изменение файла. Оно же — право на создание и удаление файлов и папок в директории (опять же, если устанавливается для папки).
  • И право на чтение файла. Для папок — это право на просмотр содержимого папки.

Кодируются эти права следующим образом: запуск — 1, изменение — 2, чтение — 4. Складывая их мы получим набор прав, предоставляемый владельцу/группе/другим. Права на доступ изменяются командой chmod. Примеры:

  • Изменять файл имеет право только владелец, группа владельце может читать, остальные — ничего не могут: chmod 640 /media/share/file.txt
  • Создавать файлы в папке могут все, но видит их только владелец: chmod 622 /media/share/messages/
  • Есть программа, которая не хочет запускаться — не хватает прав на исполнение. Нужно, чтобы все могли её запустить, но никто, кроме владельца, не мог её редактировать: chmod 711 /media/share/exec

Для рекурсивного изменения прав используется опять же ключ «-R». Например, chmod -R 700 /home/user — доступ к файлам и папкам /home/user останется только у владельца. Стоит заметить, что изменять права на файлы и директории могут администраторы и владелец этих папок и файлов.

Изменение прав только на файлы или только на папки

Вышеприведённый пример рекурсивного изменения прав на файлы и папки в /home/user/ не так уж и хорош, как может показаться. Мы сделали, чтобы теперь и обычные файлы могли запускаться. Это может привести к проблемам, если среди фалов были примеры программ, на которые специально были выставлены права без запуска, дабы случайно не исполнить хранимые программы. Если бы мы поставили права 600 — мы бы потеряли доступ к подпапкам и файлам, лежащим в них, ибо без права «на исполнение» (оно же  — «право перехода по папке»), мы бы не смогли до них добраться. Так что мухи — отдельно, котлеты — отдельно: зададим права сначала для одних, потом — для других. В этом нам поможет команда find.

find /home/user -type f -exec chmod 600 {} \;

Немного магии :) Но если присмотреться, всё понятно: найти в /home/user все объекты, типа file (f) и выполнить для них chmod 600. Или же для директорий:

find /home/user -type d -exec chmod 700 {} \;

Что ещё можно посмотреть

Крайне полезны могут быть утилиты find, grep для поиска и фильтрации работы команд. chown и chmod также умеют больше, чем здесь описано. Есть ещё chattr — для смены атрибутов папок и файлов (про атрибуты — в другой раз). Все выше перечисленные утилиты имеют хорошую документацию. Чтобы её увидеть, нужно набрать в консоли man имя_утилиты. Думаю, этих знаний хватит на первое время всем тем, кто решил настроить права в своём Linux (и Unix). Больше понятной и полезной информации можно получить, заглянув в рубрику «Настройка» или, найдя статьи с меткой «Я познаю мир» .

Поделиться заметкой:
Узнать версию Linux
Все способы узнать версию дистрибутива Linux (а также FreeBSD, MacOS и прочих)
Права на файлы
Права на файлы и папки в Linux, FreeBSD и MacOS
Настоящий интеллект
  • parser

    убиться головой об стену :D

  • КО

    Попробуй файл сконфигурировать

  • Славик

    Открылся ресторан для программистов.
    Официант:
    - Вы программист Linux или Windows?
    - Linux.
    - Тогда там нож, там картошка, там кухня.

    Система, где все запрещено и все надо делать руками — это жопа!

  • Славик

    Чтобы сделать папку доступной из вне нужно установить специальный сервер Samba, настроить его конфиг, поменять права. И при этом может не заработать.
    Человеческому маразму нет предела.

  • Гость

    Статья просто бардадель. Будто Кличко писал

  • http://kfarfor.com/ Ilja Vost

    Права доступа, возможно, не всегда нужно трогать и нарушать безопасность. Особенно, если Вы просто хотите передать по локальнойвнутренней сети файлы — для этого есть например какой-нибудь: Dukto. А для передачи данных по интернету лучше использовать либо облака, либо сторонний софт и опять же не нарушать безопасность. Конечно, если задача в установке чего-либо или внесения изменений в закрытые «зоны», то тут без установки новых прав доступа не обойтись.

  • Максd

    $ sudo chown -R user:group /data/
    chown: неверный пользователь: «user:group»

  • ваня

    Спасибо. Всё ясно написано.

  • Евгений

    Можно для тупых, как прописать команду, чтобы всем файлам по маске exe, avi, mkv, jpeg, jpg, mp3 .bat выдало все права на чтение-запись? )) И тоже самое для папок. Спасибо!