Справочник по Debian

Права доступа к файлам и каталогам


Права доступа к файлу и каталогу определяются индивидуально для каждой из трех следущих категорий пользователей:

  • для пользователя, который владеет этим файлом (u),

  • для пользователей из группы, владеющей данным файлом (g) и

  • для всех остальных пользователей(o).

    Для файла соответствующие права доступа позволяют соответственно:

    • право чтения (r): изучить содержимое файла

    • право записи (w): изменять файл



    • право выполнения (x): выполнять файл как команду.

      Для каталога права доступа позволяют соответственно:

      • право чтения (r): получать список содержимого каталога

      • право записи (w): добавлять или удалять файлы в каталог

      • право выполнения (x): получать доступ к файлам.

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

        Чтобы отобразить информацию о правах доступа (и многую другую) на файлы и каталоги используется программа ls. Смотрите ls(1). Когда программа ls запускается с опцией -l, она показывает следующую информацию в указанном порядке:

        • тип файла (первый символ)

          • -: обычный файл

          • d: каталог

          • l: символическая ссылка

          • c: файл символьного устройства

          • b: файл блочного устройства

          • p: именованный канал

          • s: сокет

          • Права доступа к файлу (следующие девять символов, объединенных в три группы прав для владельца, группы и прочих пользователей по три символа в каждой группе в порядке право-на-чтение право-на-запись право-на-выполнение)

          • количество ссылок на файл

          • имя пользователя, владеющего файлом

          • имя группы, владеющей файлом

          • размер файла в символах (байтах)

          • дата и время файла (mtime)

          • имя файла.

            Чтобы изменить владельца файла, используется программа chown, запущенная от имени учетной записи root. Чтобы изменить группу файла, используется программа chgrp, запущенная от имени учетной записи владельца файла или root. Для изменения прав доступа к файлу или каталогу используется программа chmod, запущенная от имени пользователя-владельца файла/каталога или от имени пользователя root. Основной синтаксис работы с файлом-примером foo следующий:


            # chown новый_владелец foo # chgrp новая_группа foo # chmod [ugoa][+-=][rwx][,...] foo

            Подробности смотрите в соответствующих man-страницах chown(1), chgrp(1) и chmod(1).

            Например, чтобы для некоторого дерева каталогов задать владельцем пользователя foo и сделать группу bar, владеющей этим деревом, выполните следующие команды от имени пользователя root:

            # cd /некий/каталог/ # chown -R foo:bar . # chmod -R ug+rwX,o=rX .

            Существует три бита специальных прав:




            • set user ID (в выводе ls выводится как s или S в позиции права выполнения для владельца),



            • set group ID (в выводе ls выводится как s или S в позиции права выполнения для группы),



            • sticky bit (в выводе ls выводится как t или T в позиции права выполнения для прочих).

              В выводе команде ls -l бит специального права выводится заглавной буквой (S или T), если бит выполнения, который он скрыл собой, не установлен, и наоборот.

              Установка бита set user ID на выполняемый файл позволяет пользователю выполнить этот файл от имени владельца файла (например, root) Подобным образом, установка бита set group ID на выполняемый файл позволяет выполнить данный файл от имени группы, владеющей этим файлом, например, от имени группы root). Так как эти установки могут создать серъезную дыру в безопасности системы, устанавливайте эти биты очень внимательно.

              Установка бита set group ID на каталог включает схему создания файлов как системах BSD, где все файлы созданные в данном каталоге будут принадлежать группе group, владеющей этим каталогом.

              Установка бита sticky bit на каталог предотвращает удаление файлов в каталоге пользователями, ими не владеющими. Для защиты содержимого файла в каталоге, в который разрешена запись всем, например, /tmp, или в каталоге, в который разрешена запись некоторой группе, нужно не только снять право записи в файл, но и установить бит sticky bit на каталог. В противном случае любой пользователь, имеющий право записи в этот каталог, может удалить этот файл и создать новый с тем же именем (и с любым содержимым - прим. переводчика)



              Вот несколько интересных примеров прав на файлы:

              $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd crw-rw---- 1 root dip 108, 0 Jan 18 13:32 /dev/ppp -rw-r--r-- 1 root root 1051 Jan 26 08:29 /etc/passwd -rw-r----- 1 root shadow 746 Jan 26 08:29 /etc/shadow -rwsr-xr-- 1 root dip 234504 Nov 24 03:58 /usr/sbin/pppd $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 4 root root 4096 Feb 9 16:35 /tmp drwxrwsr-x 10 root staff 4096 Jan 18 13:31 /usr/local drwxrwsr-x 3 root src 4096 Jan 19 08:36 /usr/src drwxrwsr-x 2 root mail 4096 Feb 2 22:19 /var/mail drwxrwxrwt 3 root root 4096 Jan 25 02:48 /var/tmp

              В командах chmod(1) существует альтернативный числовой способ описания прав на файлы. Этот числовой способ использует трех-четырехзначные восьмеричные (основание системы счисления = 8) числа. Каждая цифра соответствует:




              • Первая необязательная цифра: сумма атрибута set user ID (вес = 4), атрибута set group ID (вес = 2) и sticky bit (вес = 1)



              • Вторая цифра: сумма атрибута чтение (вес = 4), атрибута запись (вес = 2) и атрибута выполнения (вес = 1), относящиеся к списку прав пользователя



              • Третья цифра: то же самое для группы



              • Четвертая цифра: то же самое для прочих пользователей

                Это выглядит сложновато, но на самом деле все очень просто. Если вы посмотрите на первые несколько столбцов (2-10) вывода команды ls -l и проинтерпретируете их как двоичное (с основанием = 2) представление прав на файл ("-" означает "0", а "r", "w", "x" означает "1"), то полученное число, переведенное в восьмеричную систему счисления будет являться восьмеричным представлением прав на файл. [] Попробуйте для примера:

                $ touch foo bar

                $ chmod u=rw,go=r foo

                $ chmod 644 bar

                $ ls -l foo bar

                -rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 foo

                -rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 bar

                Маска прав на файл по умолчанию может быть установлена встроенной командой командного интерпретатора umask. Смотрите страницу builtins(7).


                Содержание раздела