chmod и с чем его едят

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

Что же это такое? chmod — это команда, позволяющая устанавливать права доступа на файлы и каталоги для разграничения этих самых прав.

Существует символьное и цифровое представление прав доступа. Пример, rwxr-xr-x или 755 (в данном случае символ «-» — это не минус, а прочерк, пустое место). «Как же их «пересчитывать», задавал я себе когда-то вопрос и долго не  мог найти никакой толковой информации по этому поводу. Тогда еще не было wikipedia и гугл многое найти еще не мог. Яндекс же скромно отмалчивался.

Но сначала надо разобраться, почему именно такое представление имеют права доступа в Unix-like ОС.

Полные права на объект представляются как RWXRWXRWX. Т.е. имеют три группы по RWX.

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

2-я группа — это права для группы (например, юзер vasya, группа users. Вот разрешения для группы users тут и указываются. Группа может не принадлежать владельцу, т.е. владелец будет в группе users2, а права будут установлены для группы users).

3-я группа — все остальные пользователи.

Все просто и понятно. Далее не намного сложнее:

R — Read

W — Write

X — eXecute (для файлов) или search (для каталогов)

Таким образом rwxr-xr-x — это все права для владельца, право чтения/запуска(листинга каталога) для группы и остальных пользователей.

Все просто. Далее разберем как пересчитать это дело в цифровое представление прав.

В принципе, тут достаточно привести такие равности:

R = 4

W = 2

X = 1

Путем сложения в каждой группе и переводим rwxr-xr-x: 4+2+1=7, 4+1=5. Получаем 755.

Или же 644 = rw-r—r—. Вот так все просто.

Вы можете оставить комментарий, или поставить трэкбек со своего сайта.

8 комментариев(я)

  • 08.06.2008 06:16, virens сказал:

    Да, chmod дело такое, не сразу понимаешь. Я тоже долго искал на тему «что это за цифры!?» :-)

    • 08.06.2008 18:24, lecactus.ru сказал:

      все же как ни ругают винду, а в ней прав можно раздать на файлы намного больше и детальнее ДЛЯ КАЖДОГО пользователя.

      а таперь по теме:
      хотелось бы видеть все с примерами использования (включая различные ключи. например: chmod -R 777 папка) как в МАНАх, но маны обычно написаны «не для людей» и в них разобраться тяжело бывает
      еще не помешало бы сразу сюда добавить и описание chown (а можно и отдельно)

      • 08.06.2008 19:57, Silver Ghost сказал:

        lecactus, чем больше прав, тем сложнее в них разобраться… А вообще, тут гибкость весьма немаленькая открывается… сам подумай…

        Про более развернутый пост — уже была идея. Когда оформлю — пока не знаю… Там и chown будет рассмотрен.

        • 08.06.2008 20:01, Silver Ghost сказал:

          Да… И еще забыл… В линуксе есть SELinux… Там все гораздо навороченее, но я его не пользую в виду отсутствия необходимости…

          • 26.06.2008 07:39, www2 сказал:

            Я не считаю в уме, а всегда пользуюсь мнемониками вроде:
            chmod u+x,g-w file
            или
            chmod ug=rw,o= file

            • 27.10.2008 15:28, Dmitry сказал:

              А не проще пользоваться битовыми масками? Права доступа разбиваются на триады прав доступа для владельца/группы/всех. Соответственно в каждой триаде 1 — разрешен доступ, 0 — запрещен.
              т.е. RWX — это 111, если перевести из двоичной в десятичную систему — 7
              RW — 110 — 6
              RX — 101 — 5
              т.е. права 755 это 111 101 101 — RWX R-X R-X

              • 28.10.2008 00:14, Silver Ghost сказал:

                @Dmitry: Спасибо за подробное дополнение. Но все же,разве у меня не то же самое описано? :)

                • 28.10.2008 07:49, www2 сказал:

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

                  Нужно добавить группе право на запись — «chmod g+w file»,
                  Нужно отнять все права у «остальных» — «chmod o= file»,
                  Нужно владельцу дать право чтения и записи, группе добавить право чтения, а у остальных отнять права — «chmod u=rw,g+r,o= file»,
                  Нужно сделать всё то же самое, но для каталога рекурсивно — соответственно «chmod -R g+w dir», «chmod -R o= dir», «chmod -R u=rw,g+r,o= dir».

                  Мне совершенно не нужно напрягаться и вычислять что-то в уме, я лишь кратко записываю свои мысли.

                  (Обязательно)
                  (Обязательно, не публикуется)

                  Надпись "Выполнено на 99%" радует только первые три часа....
                  Яндекс.Метрика beget