|
Candidate for Deletion |
Содержание |
Права доступа в системе Linux
Поскольку Linux (да и UNIX вообще) - многопользовательская OS, в ней существует система прав доступа к файлам, служащая для защиты файлов каждого пользователя от влияния других пользователей системы.
Права доступа подразделяются на три типа:
чтение (read)
запись (write)
выполнение (execute)
Разрешение на чтение позволяет пользователю читать содержимое файлов, а в случае каталогов - просматривать перечень имен файлов в каталоге (используя, например, команду ls). Разрешение на запись позволяет пользователю писать в файл, изменять его или удалять. Для каталогов это дает право cоздавать в каталоге новые файлы и каталоги, или удалять файлы в этом каталоге. Наконец, разрешение на выполнение позволяет пользователю выполнять файлы (как бинарные программы, так и командные файлы). Если на файле стоит атрибут Execute, то независимо от его расширения он считается программой, которую можно запустить. (Вот почему в *nix не принято ставить исполняемым файлам расширения по типу DOS'овских *.com, *.exe, *.bat. Вообще в Unix/Linux нет такого жесткого понятия расширение файла, как в Dos/Windows, и система сама определяет тип файлов независимо от их расширения, но это - уже другая история...). Так же атрибут выполнения может стоять у shell-скриптов, CGI-скриптов, и у всего, что можно хоть как-то запустить. Разрешение на выполнение применительно к каталогам означает возможность выполнять команды вроде cd.
Эти типы прав доступа могут быть предоставлены для трех классов пользователей:
владельцы - у каждого файла в Linux'e есть один владелец.
группы - с каждым файлом связана группа пользователей этого файла.
остальные пользователи.
Владельцем файла становится юзер, который создал этот файл. Короче говоря, для файла все юзеры делятся на 3 типа: хозяин, или владелец, юзеры, состоящие в одной группе с владельцем, и все остальные юзеры. Для каждого типа - свои права. Учтите, что директории и все системные устройства в UNIX являются обычными файлами. Тот же самый /dev/fd0 - это не сам Floppy disk, а всего лишь файл, связанный с флопповодом. Поэтому, если root запретил юзеру доступ к этому файлу, тот не сможет использовать флопповод (так же обстоят дела с модемами, хардами и т.п.). Владельцем всех системных файлов является root. Он же имеет право забирать файлы у одного юзера и передавать их другому (менять владельца).
Команда chmod
Изменить права доступа к файлу может либо его владелец, либо сам root. Делается это командой chmod. Существует две формы представления прав доступа: символьная и цифровая.
Символьная форма прав доступа
Если войти в любой каталог, где есть файлы, и набрать ls -l, то появится список всех файлов в этом каталоге и права доступа в символьной форме. Строка прав доступа состоит из 10 символов. Первый символ указывает на тип файла: d - директория, - - обычный файл. Три последующих - права доступа владельца к этому файлу. Если первый символ из этих трех - r, владелец имеет право читать этот файл, а если -, то не имеет. Следующие 2 символа - w - писать и x - запускать. Если вместо них стоит -, значит, владелец этого права не имеет. Еще 3 символа - права доступа группы, еще три - права всех остальных пользователей.
Примеры:
drwxrwxrwx - директория, к которой все имеют любые права доступа.
-rwxr--r-- - обычный файл, владелец может делать все, а остальные - только читать.
-r-------- - обычный файл, который владелец может только читать, а остальные пользователи не видят.
Важно заметить, что права доступа, которые имеет файл, зависят также от прав доступа к каталогу, в котором этот файл находится. Например, даже если файл имеет -rwxrwxrwx, другие пользователи не смогут до него добраться, если у них не будет прав на чтение и выполнение каталога, в котором находится файл. Например, если юзер захочет ограничить доступ ко всем своим файлам, он может просто изменить права доступа своего домашнего каталога /home/user на drwx------. Таким образом, никто другой не будет иметь доступ в его каталог, а следовательно посторонним будут недоступны и все файлы. Так что, пользователь может не заботиться об индивидуальной защите своих файлов. Другими словами, чтобы иметь доступ к файлу, вы должны иметь доступ ко всем каталогам, лежащим на пути от корня к этому файлу, а также разрешение на доступ собственно к этому файлу. Обычно пользователи UNIX весьма открыты всеми своими файлами. По умолчанию файлам устанавливается защита -rw-r--r--, которая позволяет другим пользователям читать файлы, но ни коим образом их не менять. Каталогам обычно устанавливаются права доступа drwxr-xr-x, что позволяет другим пользователям ходить с правами экскурсантов по вашим каталогам, но ничего в них не трогать и не записывать.
Но многие пользователи хотят держать других подальше от своих файлов. Установив права доступа файла -rw-------, вы никому не покажете этот файл и не дадите записать в него. Также хорошо закрывает файлы защита соответствующего каталога drwx------.
С правами доступа в символьной форме chmod работает так:
chmod {a,u,g,o}{+,-}{r,w,x} <filenames>
Кратко, вы выбираете из all (все), user (пользователь), group (группа) или other (другие). Далее указываете, либо вы добавляете права (+), либо лишаете прав (-). И наконец, вы указываете один или несколько режимов: read, write или execute.
Числовая форма прав доступа
Теперь права доступа в числовой форме. Для некоторых эта форма может показаться более простой. Надо запомнить только следующее:
- 400 - владелец имеет право на чтение
- 200 - владелец имеет право на запись
- 100 - владелец имеет право на выполнение
- 40 - группа имеет право на чтение
- 20 - группа имеет право на запись
- 10 - группа имеет право на выполнение
- 4 - остальные имеют право на чтение
- 2 - остальные имеют право на запись
- 1 - остальные имеют право на выполнение
Теперь осталось только просуммировать числа, соответствующие тем правам доступа, которые мы хотим поставить файлу.
Примеры
Символьная форма
chmod a+r stuff
Дает всем пользователям право читать файл stuff.
chmod +r stuff
То же самое, что и ранее (a - по умолчанию).
chmod og-x stuff
Лишает права на выполнение всех, кроме владельца.
chmod u+rwx stuff
Разрешает владельцу все (read, write и execute).
chmod o-rwx stuff
Запрещает все (read, write и execute) пользователям категории другие (other).
=== Числовая форма===
400+200+100+40+4=744
chmod 744 stuff
владелец может делать все, а остальные - только читать.
400+40+4=444
chmod 444 stuff
все имеют право только на чтение.
400+100+10+1=611
chmod 611 stuff
владелец может читать и выполнять, остальные - только выполнять.
400+200+100+40+10+4+1=755
chmod 755 script
Классическая команда. Скрипт - это исполняемый файл, и все должны иметь к нему доступ на чтение и выполнение. Только владелец этого файла может его изменять или удалять.
Команда chown
Изменение владельца файла осуществляется командой chown, например:
sudo chown <имя нового владельца> <имя файла>
Для передачи каталога надо вводить:
sudo chown -R <имя нового владельца> <имя каталога>
Команда chgroup
Изменение группы, которой принадлежит файл.
sudo chown <название новой группы> <имя файла>
Для передачи каталога надо вводить:
sudo chown -R <название новой группы> <имя каталога>