Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > *NIX системы: Общие вопросы > Новичку: Права на файлы в Linux |
Автор: smartov 15.12.2007, 23:30 | ||||||||||||||||||||||||||||||||||||||||||||
Права на файлы в Linux Оригинал: http://polishlinux.org/console/file-permissions-in-linux/ Много копипастил и правил ошибки: http://linuxpeople.ru/2007/12/04/prava-na-fajly-v-linux/ ![]() 1. Основы С самого своего появления, UNIX позиционировался как мультипользовательская операционная система. Что соответственно повлекло за собой создание механизмов для защиты и обеспечения авторизорованного доступа к данным. Таким образом появился стандарт DAC (Discretionary Access Control). В соответствии с DAC, пользователь сам решает какие права доступа соответствуют файлам. Но с точки зрения разработки операционных систем эта модель оказалась неудовлетворительной. Из-за чего появились новые модели для организации доступа к файлам, такие как http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%83%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0 (Mandatory Access Control), http://ru.wikipedia.org/wiki/ACL (Access Control List), и их реализации, например SELinux, TrustedBSD, Trusted Solaris. 2. Владелец файла Обычно, владельцем файла является пользователь, создавший этот файл. В UNIX-подобных операционных системах, все файлы имеют два типа владельцев: user (пользователь) и group (группа). Владельцы не должны совпадать друг с другом, т.е. user не должен быть членом group. Но фактически почти всегда, пользователь принадлежит к той группе, которая владеет файлом. Если пользователь не является владельцем файла и не принадлежит к группе, владеющей файлом, то он считается “левым” (others, остальные). Каждому пользователю в системе присваивается UID-номер (user identification number, идентификатор пользователя), с помощью этого система однозначно определяет пользователя. Пользователь root имеет UID = 0, а максимально возможный номер принадлежит пользователю “nobody” (”никто”) (для Ubuntu это 65534, для NetBSD — 32767). Следовательно права привязываются не в к имени пользователя, а к его UID. Аналогично каждой группе соответствует GID (group identification number). Для того что бы в консоле вывести владельцев файлов используйте команду ls с ключом -l:
Третья и четвертая колонка означают, что пользователь и группа владеют файлом. 2.1. chgrp Эта команда позволяет изменить группу-владельца файла. Если эту команду использует простой пользователь, то он, во-первых, должен быть владельцем файла, а во-вторых, он должен быть членом группы, которой он хочет дать права. Интересный факт, пользователь не должен быть членом группы, которая владеет файлом. Синтаксис следующий: chgrp group-name files,можно использовать как и имя группы, так и GID группы.
Команду кстати можно использовать с ключом -R, что приведет к рекурсивному обходу всех файлов в каталоге и его подкаталогах.
2.2. chown Эта команда используется для изменения владельца, как пользователя так и группы. В большинстве систем, только root имеет право пользоваться этой командой. У команды следующий синтаксис: chown user:group files. Как и в команде chgrp, вы можете использовать как имена пользователей и групп, так и их GID и UID. Кстати команда не проверяет на существование пользователей и группы, так что можно задать несуществующие. Пример смены группы и пользователя
Смена владельца на пользователя zoidberg, группа остается без изменений.
Смена группы на futurama, владелец без изменений.
3. Права доступа В любой UNIX-подобной системе имеются 3 уровня доступа к файлу: чтение, read ®, запись, write (w) и выполнение, execute (x). Тип доступа r Для файла: Чтение содержимого файла Для каталога: Отображение содержимого каталога (например командой ls) w Для файла: Запись в файл Для каталога: Изменение содержимого каталога (удаление и добавление файлов из/в каталога; для пользователей windows: тут сильное отличие, если есть права записи на папку, то из неё можно удалить любой файл, вне зависимости от прав на этот файл, и наоборот) x Для файла: Запуск файла на исполнение Для каталога: Возможность войти в каталог командой cd Стоит заметить, что когда мы рассматриваем права на каталоги, нужно помнить, что каталог - это тоже файл, который содержит список файлов, т.е. их имена и расположение на диске. Для того что бы посмотреть содержимое каталога достаточно воспользоваться командой ls (без ключей), для этого необходимы только права на чтение, но для того что бы выполнить ls -l необходимы права на запись и выполнение (smartov: думаю при ro файловой системе или с опцией noatime, можно и без записи). Обобщая вышесказанное, для выполнения любой операции над каталогом (кроме простого просмотра содержимого) вам будут необходимы права на выполнение. Права на выполнение в случае с директориями, даёт вам возможность получать доступ к её содержимому через имена файлов.
Список прав доступен по команде ls с ключом -l. В первой колонке первый символ обозначает тип файла, а остальные 9 показывают права доступа. Первые 3 из 9 показывают права user, следующие 3 - это права group, и оставшиеся для “левых”. В приведенном примере blob - это каталог (d в первой колонке - directory), user имеет права на запись и чтение, но не на выполнение (rw-), у группы и у остальных есть права только на чтение. tapety - тоже каталог, и у user есть права на всё (rwx), а у группы и у остальных есть права на чтение и выполнение (r-x). Fme.py - это файл. 3.1. chmod Рассмотрим команду для смены прав доступа:
Перед выполнением команды необходимо выбрать класс пользователей, для кого мы хотим изменить права (ugo, User, Group, Others). Есть так же дополнительная группа a (all, все). Затем выбираем оператор: + (дать права), - (убрать права) и = (присвоить права - т.е. поставить только эти права, а остальные сбросить). И в конце выбрать сами права (rwx, r-x и т.д.). Например тут
пользователю (u) добавляется (+) право на выполнение (x) файла skrypt.sh.
У группы и остальных (go) отбирается (-) право на чтение ®.
Всем (a) присваивается (=) право на запись (w), а остальные права стираются (=).
Пользователю прибавляются права на все, группе тоже, а остальным прибавляется право на выполнение. 3.2. Числовое представление прав Для упрощения записи команды chmod можно использовать числовое представление прав. У каждого типа доступа есть числовое представление, для этого используется двоичное представление. Единица означает - есть право, 0 - нет права. Таким образом запись правила rwx r-x r-x в бинарном виде будет выглядить следующим образом: 111 101 101. Но двоичное представление не очень удобно, поэтому используют восьмеричное представление. 111 в двоичной системе - это 7 в восьмеричной, а 101 - это 5, таким образом 111 101 101 - это 755. Итак получаем: –x 1 -w- 2 -wx 3 r– 4 r-x 5 rw- 6 rwx 7 Таким образом вы можете записать как
так и
3.3. Специальные уровни доступа Рассмотрим несколько специальных уровней доступа, расширяющие стандартные. 3.3.1. X Данная опция добавляет выбранным классам права на выполнение тогда и только тогда, когда другие классы тоже имеют права на выполнение:
Т.к. для того, чтобы выполнить файл, нужно иметь право его прочитать, то права на чтение проставляются автоматически. 3.3.2. Липкий бит Если его установить на выполняемый файл, то его код будет храниться в оперативной памяти даже после завершения программы. Эта возможность редко используется в наши дни, но исторически она была спроектирована для уменьшения времени запуска часто запускаемых программ. Если поставить липкий бит на директорию, то удалять из неё файлы будет иметь право только владелец файла и root.
Эта возможность часто используется для каталога /tmp, в котором - в соответствии с соглашениями - все должны иметь право создавать файлы, но не иметь возможности удалить те, владельцем которых не являешься. Назначить липкий бит можно командой chmod:
или используя числовую запись
3.3.3. setuid Если установить этот режим на исполняемый файл, то он будет исполняться от имени владельца. Некоторые административные команды, например sudo, могут требуют наличие этого бита для корректной работы.
Установка:
3.3.4. setgid Полностью аналогична setuid, только для групп.
3.4. umask Команда umask используется для установки прав файлов для создаваемых файлов по умолчанию. Глобально, у всех новых файлов права по умолчанию 666 (rw-rw-rw-). С помощью этой команды задаются те опции которые НЕ будут присутствовать в новых файлах. Т.е. если мы передадим параметр 0022 (----w--w-), то по умолчанию права будут 644 (rw-r--r--).
http://polishlinux.org/console/file-permissions-in-linux/ |
Автор: GrayCardinal 16.12.2007, 09:57 |
А оно действительно надо было всё так разжёвывать ? |
Автор: smartov 16.12.2007, 16:05 |
MAKCim, спасибо, первые два исправил, последний не стал - статья для новичков. Странный народ линуксоиды... Лишнего и воды тут не написано. Лучше лишний раз разжевать имхо. Тем более см. название топика. |
Автор: MAKCim 16.12.2007, 16:37 |
истинный линуксоид учится по манам ![]() |
Автор: JackYF 16.12.2007, 19:15 |
угу, а как предлагаешь стать истинным линуксоидом тем, кто вчера установил систему на попробовать? ![]() |
Автор: MAKCim 19.12.2007, 01:11 | ||
сложный вопрос хотя в общем согласен: базу откуда-то брать нужно |
Автор: marykone 19.12.2007, 08:14 |
я считаю что лучше всегда разжовывать тебе понятно мне нет что тебе известно ты и так пропустишь беглым взглядом, а что неизвестно на том заостришь свое внимание. тем более как было ранее подмеченно воды тут нет |