![]() |
Права доступа в *nix системах
Права доступа в *NIX системах В этой статье я не претендую на написание чего-то нового. Видел подобную статью на античате, но решил побольше раскрыть эту тему именно для новичков, которые часто задают вопросы на эту тему. Так как статья рассчитана на новичков, постараюсь описать вопрос в доступной форме и с примерами, из-за этого придется пожертвовать некоторыми техническими деталями (так что сильно не придирайтесь). В общем поехали. Прежде всего, надо сказать, что в *NIX ОС каждый пользователь, зарегистрированный в системе, имеет свой уникальный номер не равный нулю (0 – номер администратора ОС), по которому ОС определяет (идентифицирует) пользователя. Этот номер в *NIX называется UID, но для удобства (например, авторизации) UID`у присваивается символьное значение (имя), для этого в *NIX существует файл passwd, хранящийся в каталоге /etc (всем известный /etc/passwd). В этом файле находятся настройки пользователей, в том числе и сопоставление имени и UID`а. Не ищите в этом файле паролей, их там попросту нет (когда-то давно были), а хранятся пароли (вернее не пароли, а их хеши) в файле shadow в Linux и master.passwd в BSD. Вот пример строки из файла passwd: Цитата:
Такая запись означает, что имени пользователя merabi (секция 1) присваивается идентификатор пользователя UID 1012 (секция 3), и идентификатор группы GID 80 (секция 4). Для администратора (обычно root) эта запись будет такой: root:*:0:0. В принципе возможно создать двух пользователей с правами администратора (UID - 0, GID – 0) но не будем на этом останавливаться. Также в строке есть * (секция 2) означает это, что пароль хранится не в этом файле, а в другом (shadow или master.passwd). 5 секция не на что не влияет и просто дает описание пользователя, в нашем случае, это, наверное, имя и фамилия, но в ней может быть, что угодно или она может быть пустая. Дальше, в 6 секции описан домашний каталог пользователя, (у нас: /usr/local/www/asthma) каталог в который попадает пользователь после авторизации. В последней, 7 секции, описывается шелл, командный интерпретатор который загружается при входе пользователя в систему (в нашем примере /usr/local/bin/bash), если пользователю не предназначен шелл, то сюда обычно записывают /sbin/nologin. Еще раз замечу, что символьное имя пользователя существует для удобства, все операции ведутся именно с числом UID. Также, каждый пользователь в *NIX должен принадлежать к какой-то группе, группа также определяется числом-идентификатором GID, которому также присваивается и символьное представление (имя группы). Одной группе могут принадлежать несколько пользователей, и наоборот, один пользователь может принадлежать нескольким группам, иногда это бывает удобно, но не будем заострять на это внимание. Часто для конкретного пользователя заводят свою группу с именем этого пользователя. Просмотреть UID и GID, а также их символьные представления можно с помощью команды id в шелле, для этого нужно выполнить id имя пользователя, id без параметров выведет значения для текущего пользователя. Ну, с этим вроде разобрались, едем дальше. В *NIX каждый файл принадлежит какому либо пользователю, будь то администратор (дальше root) или nobody или любой другой. Когда создается файл, в его атрибуты записывается UID создавшего его пользователя. Root может изменять этот атрибут, т.е. фактически изменять владельца файла, с помощью команды chown, но нам сейчас это не важно. Владелец файла может изменять атрибуты файла (например, изменять права доступа, об этом ниже) читать файл, записывать в файл, исполнять файл. Иногда, можно столкнуться с такой ситуацией, что владелец файла не может его удалить или переименовать, объясню на примере: Цитата:
Теперь об атрибутах файла. Выполнив в шелле команду ls –lp мы можем увидеть список файлов в текущем каталоге, и некоторые атрибуты этих файлов, пример строки: Код:
-rw-r--r-- 1 nobody nobody 899 Dec 5 17:08 default.htmВот о правах доступа поговорим поподробнее. Возьмем наш пример и условно разделим на четыре секции: Цитата:
Цитата:
Секция 2 показывает права доступа для владельца файла (у нас rw-), секция 3 показывает права доступа для группы в которую входит владелец файла (у нас r--), секция 4 показывает права доступа для всех остальных пользователей, кроме администратора, root является по сути владельцем всех файлов, т.е. имеет такие же права как и владельцы файлов. Рассмотрим теперь секцию 2 (3 и 4 абсолютно идентичны второй) Цитата:
Цитата:
Если в секции 2 стоит r--, т.е. не включена возможность записи, то и владелец файла не сможет в него записывать, но он всегда может изменить права доступа к файлу с помощью команды шелла chmod, т.е. добавить w и после этого записывать в файл. x – дает возможность исполнять файл, например если это бинарник или скрипт шелла или cgi скрипт (например perl-скрипт) то для исполнения файла наличие x необходимо, компилятор gcc сам добавляет эту опцию к откомпилированой программе, т.е. на выходе получается файл с включенной опцией x во всех трех секциях. PHP скрипты для исполнения не нуждаются в включенной опции x, главное что бы была включена опция r, если php является cgi-скриптом, т.е. в начале файла есть строчка #! /путь до php/php, то наличие x обязательно (если ошибаюсь поправьте меня). Опции rwx жестко привязаны к своему положению в строке (к последовательности), т.е. мы можем записать права доступа виде двоичного числа, где единица означает включенную опцию, а 0 значит, что опция выключена (т.е. стоит тире) обратимся к нашему примеру: Цитата:
Посчитать это восьмеричное число не сложно, каждая цифра числа показывает права доступа для каждой секции (у нас 6 – для владельцев, 4 –для группы, 4 – для остальных) Цитата:
При использовании функций для изменения прав доступа в различных языках программирования надо быть осторожным в использовании восьмеричной си, возьмем, к примеру, php, в php для этих целей существует функция chmod(права, “имя файла”). Обычно в ЯП для обозначения числа в восьмеричной системе исчисления, перед числом ставится 0 (0x для hex и т.д.), так вот если этот 0 забыть мы получим совсем другой результат, т.к. функция воспримет это число как десятичное, попробуйте сами: Цитата:
Права доступа обычных файлов и файлов каталогов немного различаются, а именно, отличие их в атрибутах r и x. В файле каталога, находится информация о файлах и подкаталогах, а именно отображаемые имена и ссылки на физическое расположение файлов и подкаталогов на диске. Атрибут r при этом отвечает за доступ к отображаемым именам, а атрибут x за доступ к ссылкам на физическое расположение. Что же у нас получается, если включена опция r в атрибутах каталога, а x выключена, то мы можем просмотреть файлы внутри этого каталога, т.к. доступ на чтение имен файлов у нас есть (r включена), но мы не сможем прочитать, изменить, или выполнить файл даже если у нас есть соответствующие права доступа на файл (при этом мы их не увидим), т.к. доступа к физическому расположению файла у нас нет, другими словами мы “незнаем” где физически расположен файл (опция x выключена). Если опция x включена, а опция r выключена то мы можем производить с файлами действия соответствующие нашим правам доступа к файлу, но отобразить имена у нас не получится. Хотя обычно опции r и x всегда вместе включены на каталогах. Интересно и поведение опции w установленной для каталога, дело в том, что каталог не знает о правах доступа его файлов, поэтому если у нас есть права на запись/изменение каталога, то мы можем удалять файлы независимо от того, какие права доступа стоят для этого файла. Цитата:
PS статью писал сам, так что в копипасте меня не обвиняйте Спасибо за прочтение, с уважением Scipio |
всё не читал, похоже на man chmod =)
Вот в конце страницы бросилось в глаза Цитата:
|
Spyder, читай внимательнее
Цитата:
|
ну смотри, много раз встречалось
на серваке папка, наши права nobody drwxrwxrwx в ней лежит файл -rw-r-r По идее изменение запрещено, но так как мы можем изменить папку, мы можем изменить и файлы и подпапки в ней т е chmod 777 index.html в данном случаем изменит права файла на -rwxrwxrwx или у тебя какой то хэк-экзотичесский случай? 0_о |
Какая разница можно или нельзя изменяь файл, если есть возможность сменить его права?
Сменил права - перезаписал. |
Не, Spyder, такое возможно если ты (наверное в твоем случае вебсервер) являешься владельцем файла, если сомневаешься, то можешь сам попробовать, допустим у тебя есть фтп доступ, и вебшелл, часто у файлов записанных в том и в другом случае соответственно, разный владелец, так что есть возможность поэксперементировать
|
Цитата:
|
щас поищу у себя шелл с uid=99, потом отпишу, всё равно мне кажется что я прав)
AciD_FreaK, так об это я и говорю =\ |
Не, Spyder, прочти статью всетаки, там написано, что файл каталога незнает о правах доступа для файлов расположенных в нем
Не в обиду, но получается так, как с романом "Доктор Живаго" Пастернака... Цитата:
ЗЫ Spyder, просьба к тебе персональная, отпишись о результате здесь, каким бы он не был |
Да, я прочитал, попробывал на примере и правда если хозяин файла не тот от кого ты работаешь то и изменить его не получится. Беру свои слова назад =)
Просто редко работаю с c99 и не могу видеть владельца файла и папки, обычно с ачат шелом, а там такой фигни нету, сколько раз не сталкивался с подобной ситуацией - всегда получалось изменить права |
Spyder, ту ситуацию, которую я описал не часто встретишь, это не хек, это банальная логика... еще раз говорю читайте статью повнимательнее, большинство вопросов должны исчезнуть сами собой, и еще раз скажу, что статью я писал имея на руках шелл, то есть я сначала пробовал, потом описывал ситуацию в статье
|
Хочу высказать пожелания по доработке статьи, т.к. не рассмотрены некоторые важные моменты. В общем, было бы интересно почитать, что ты напишешь об этом.
1. Маскирование прав (man umask) 2. Дополнительные атрибуты файлов (setuid bit, setgid bit, sticky bit) 3. Списки управления доступом (man getfacl, man setfacl) 4. Ну и про su и sudo почему-то не упомянул даже. |
iv., конечно можно было бы, но я же писал, что статья для новичков, я не думаю что на том уровне на котром/для которого написана эта статья это необходимо, нет, извини добавлять не буду по вышеперечисленным причинам, возможна часть 2 (скорее всего будет) и там попробую эти вопросы обозреть
|
Цитата:
без обид но улыбнуло))) Цитата:
ps: + |
Мне не понравилось по причине того, что это уже было написано раз сто разными людьми, и, поэтому, неоригинально.
|
Цитата:
|
Зачем настолько общие статьи писать?? (вообще зачем бесконечные статьи для новичков??) Типов файлов точно больше.. Я вот на вскидку ещё могу пример привести
Цитата:
|
Цитата:
|
Мне понравилось, спасибо за статью! Возможно уже об этом писалось, но для нупиков таких как я все очень понятно и доступно описано.
|
Если это интересно, в ближайшее время постараюсь написать вторую часть, где постораюсь углубится в этот вопрос, написать про суидные файлы ну и т.д.
|
Цитата:
|
вот здесь обвинения в том, что статья для новичков... люди почитайте, я уверен, что многие найдут для себя что-то новое, еще раз говорю, статью я писал не от балды, а проверяя каждый момент на практике, вобще для прочтения (и понимания)) статьи я советую запастись шеллом на FreeBSD, многие вопросы исчезнут сами собой... а теперь я хочу обратиться к будущим хакерам...:
хватит уже читать это все, пора бы самим это понимать, эксперементировать, находить, да и просто изучать, вы можете с помошью брутуса взломать мыло, но это мало, я призываю развиваться, если не получается, то это не ваше, а если получается, то не стоит себя портить публичными сплоитам, губят они молодежь, забудте про них... это мое имхо |
| Время: 00:16 |