Изменение прав доступа к папке ubuntu

Опубликовано 4 февраля, 2008 - 20:17 пользователем AracooL

Основы

С самого своего появления, UNIX позиционировался как мультипользовательская операционная система. Что соответственно повлекло за собой создание механизмов для защиты и обеспечения авторизорованного доступа к данным. Таким образом появился стандарт DAC (Discretionary Access Control). В соответствии с DAC, пользователь сам решает какие права доступа соответствуют файлам. Но с точки зрения разработки операционных систем эта модель оказалась неудовлетворительной. Из-за чего появились новые модели для организации доступа к файлам, такие как MAC (Mandatory Access Control), ACL (Access Control List), и их реализации, например SELinux, TrustedBSD, Trusted Solaris.

Чтобы разрешить проблемы с правами доступа, вы должны использовать и исправлять ошибочные права доступа.

  • О окне Информация.
  • О терминале.
  • Сброс с помощью паролей.
Чтобы изменить и восстановить права доступа через окно «Информация», щелкните файл правой кнопкой мыши и выберите «Информация».

В этой области вы можете увидеть, какие пользователи и какие группы пользователей могут получить доступ к файлу и какие права у них есть. Каждый файл принадлежит группе «все», обычно эта группа имеет только права на чтение или отсутствие. Все файлы в вашей «домашней» папке также должны иметь запись с вашим именем пользователя. Поскольку у вас есть файл, у вас есть права на чтение и запись. Вы делаете это, открыв блокировку в правом нижнем углу, а затем нажав на существующие права доступа за своим именем.

Владелец файла

Обычно, владельцем файла является пользователь, создавший этот файл. В 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:

В дополнение к меню информации вы также можете изменить права доступа через терминал. Терминал можно найти в папке «Утилиты». В терминале переход к отдельным файлам несколько сложнее. Во-первых, вам нужно знать точное местоположение файла, из которого вы хотите изменить права доступа, с другой стороны, навигация осуществляется командами, а не мышью. Наиболее важными командами для изменения прав доступа являются.

Чтобы было проще понять, допустим, вы хотите изменить права пользователя на файл на рабочем столе. Как только вы запустите терминал, вы по умолчанию используете свою учетную запись. Вы можете сказать, что в начале линии есть тильда. Один, чтобы попасть в папку вашего рабочего стола. Теперь пусть файлы и права доступа с помощью команды.

$ ls -l razem 1822 drwxr-xr-x 3 adam adam 120 2007-09-03 16:00 Desktop -rw-r–r– 1 adam adam 400 2007-08-22 18:49 prog_09.py

Третья и четвертая колонка означают, что пользователь и группа владеют файлом.

chgrp

Эта команда позволяет изменить группу-владельца файла. Если эту команду использует простой пользователь, то он, во-первых, должен быть владельцем файла, а во-вторых, он должен быть членом группы, которой он хочет дать права. Интересный факт, пользователь не должен быть членом группы, которая владеет файлом. Синтаксис следующий: chgrp new-group files,можно использовать как и имя группы, так и GID группы.

Затем вы увидите список файлов с соответствующими правами доступа, которые находятся на вашем рабочем столе. На картинке вы можете увидеть, как выглядит результат команды. Каждая строка содержит информацию о файле. Разрешения файла находятся в начале строки в форме строки. После прав доступа информация о владельце файла - в этом случае иона.

Следующая временная метка записывает время последнего редактирования. Теперь сосредоточьтесь на правах доступа: строки прав доступа разделены на блоки «Каталог», «Пользователь», «Группа» и «Все». Черточка указывает, что просматриваемый объект является файлом. Во втором блоке вы можете увидеть права владельца файла - в этом случае пользователь иона. Если одно или несколько прав недоступны, тогда это обозначается тире вместо соответствующей буквы. Третий блок отображает права доступа для соответствующей группы пользователей - в этом примере персонал.

$ ls -l -rw-r–r– 1 adam root 0 2007-09-03 15:33 file.txt $ chgrp users file.txt $ ls -l -rw-r–r– 1 adam users 0 2007-09-03 15:33 file.txt

Команду кстати можно использовать с ключом -R, что приведет к рекурсивному обходу всех файлов в каталоге и его подкаталогах.

chown

Эта команда используется для изменения как владельца так и группы. В большинстве систем, только root имеет право пользоваться этой командой. У команды следующий синтаксис: chown new user:new group files. Как и в команде chgrp, вы можете использовать как имена пользователей и групп, так и их GID и UID. Кстати команда не проверяет на существование пользователей и группы, так что можно задать несуществующие.

Интерпретация трех цифр в этом блоке идентична интерпретации блока для владельца. Четвертый блок представляет права доступа каждой группы пользователей. Опять же, те же правила синтаксиса применяются, как и в двух других блоках. Права определяются численными значениями. Разрешение чтения - 4, право на запись - 2, а право на выполнение файла - это значение. Значение 0 не представляет никаких прав. Если вы хотите предоставить владельцу и группе пользователей все права, но оставить права для всех читать, команда.

О дисковой утилите

Если вы посмотрите на права, вы увидите, что права доступа изменились и теперь выглядят так. В нижней левой области вы найдете две точки. С одной стороны, проверка прав доступа к тому и, с другой стороны, исправление прав доступа тома. Это содержит всю важную информацию для проверяемых файлов. Наконец, права доступа пользователя также могут быть полностью сброшены. Однако эта функция доступна только в режиме восстановления. Затем нажмите «Утилиты» в строке меню и выберите «Терминал».

$ ls -l -rw-r–r– 1 adam users 0 2007-09-03 15:33 file.txt root@laptop:# chown root:root file.txt adam@laptop:~$ ls -l -rw-r–r– 1 root root 0 2007-09-03 15:33 file.txt

Смена группы и пользователя.

Root@laptop:# chown zoidberg file.txt

Смена владельца на пользователя zoidberg, группа остается без изменений.

# chown:futurama file.txt

Смена группы на futurama, владелец без изменений.

Права доступа

В любой UNIX-подобной системе имеются 3 уровня доступа к файлу: чтение, read (r), запись, write (w) и выполнение, execute (x).

После того, как окно терминала открыто, введите. Существует три типа доступа: чтение, запись и исполнение. И три типа групп: владелец, группа и пользователь. Значение каждой цифры указывает, какое разрешение будет иметь каждый тип пользователя: 4 соответствует чтению, 2 - письму и 1 - исполнению. Чтобы дать несколько разрешений одновременно, мы должны добавить значения.

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

Стоит заметить, что когда мы рассматриваем права на каталоги, нужно помнить, что каталог - это тоже файл, который содержит список файлов, т.е. их имена и расположение на диске. Для того что бы посмотреть содержимое каталога достаточно воспользоваться командой ls (без ключей), для этого необходимы только права на чтение, но для того что бы выполнить ls -l необходимы права на запись и выполнение. Обобщая вышесказанное, выполняя любую операцию над каталогом (кроме простого просмотра содержимого) вам необходимы права на выполнение, таким образом обладая этими правами вы получаете доступ к содержимому каталога использую имена файлов.

Наоборот, если это скрипт, вам, вероятно, понадобятся права на чтение и выполнение и т.д. Владелец Лицо, которое система распознает как владельца файла. Группа: набор пользователей с аналогичными разрешениями. Широко используется в рабочих средах, он ограничен для приложений на веб-страницах. Другие: Любой другой человек.

Ошибочно ассоциировать концепцию пользователя с реальным человеком. Это абстракция, которая относится не к людям, а к категориям. Например, если вы создаете скрипт, он фактически является его автором и владельцем; но этот сценарий предназначен для сети. Вы и остальные люди получите доступ к файлу не через локальную машину, а через Интернет. Обычно на серверах создаются общие пользователи. Короче говоря, не забывайте, что когда вы назначаете разрешения для скрипта, Владельцем может быть любой, кто посещает страницу, что будет необходимо, если, как обычно, это скрипты, которые администрируются через Интернет.

Drw-r–r– 2 adam adam 96 2007-09-05 18:04 blob drwxr-xr-x 2 adam adam 176 2007-09-04 15:57 tapety -rw-r–r– 1 adam adam 125 2007-08-29 18:31 fme.py

Список прав доступен по команде ls с ключом -l. В первой колонке первый символ обозначает тип файла, а остальные 9 показывают права доступа. Первые 3 из 9 показывают права user, следующие 3 - это права group, и оставшиеся для “левых”.

В приведенном примере blob - это каталог, user имеет права на запись и чтение, но не на выполнение (rw-), у группы и у остальных есть права только на чтение. Tapety - тоже каталог, и у user есть права на все (rwx), а у группы и у остальных есть права на чтение и выполнение (r-x). Fme.py - это файл.

Он используется для каталогов со скриптами, формами и т.д. - Сценарий: без разрешения. Наиболее распространенным способом является предоставление разрешений численно. Чтобы понять смысл, вы должны иметь в виду, что условно 4 означает разрешение на чтение, 2 разрешения на запись и 1 разрешение на выполнение. Добавляя эти значения, мы видим, что файл может иметь следующие разрешения.

Как показано, есть три цифры, слева направо назначают разрешения владельца, группы и других. Таким образом были изменены только те атрибуты, которые были указаны, но другие, которые ранее были назначены, не были изменены, например, он не изменяет предыдущую атрибуцию группе разрешения на выполнение.

chmod

Рассмотрим команду для смены прав доступа:

Chmod access rights files

Перед выполнением команды необходимо выбрать класс пользователей, для кого мы хотим изменить права (ugo, User, Group, Others). Есть так же дополнительная группа a (all, все). Затем выбираем оператор: + (дать права), - (убрать права) и = (присвоить права). И в конце выбрать сами права (rwx, r-x и т.д.).

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

Эти буквы сгруппированы в три группы с тремя позициями каждая, плюс первая позиция, которая сообщает нам, что это за файл. Первая группа из трех человек рассказывает нам, какие разрешения имеет владелец файла. Последняя группа из трех говорит нам, какие права у всех остальных есть. пользователей системы в этом файле. Вторая группа из трех говорит нам, какие права есть у группы файлов. . Имея это ясно, остальное очень легко. Синтаксис команды будет иметь следующую форму. Мы можем использовать номенклатуру, упомянутую выше, или использовать простой цифровой код для установки разрешений на основе двоичных правил.

$ chmod u+x skrypt.sh

Пользователю (u) добавляется (+) право на выполнение (x) файла skrypt.sh.

$ chmod go-r raport.odt

У группы и остальных (go) отбирается (-) право на чтение (r).

$ chmod a=w finanse.ods

Всем (a) присваивается (=) право на запись (w), а остальные права стираются (=).

$ chmod u+rwx,g+rwx,o+x trurl.py

Пользователю прибавляются права на все, группе тоже, а остальным прибавляется право на выполнение.

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

В этом случае мы заинтересованы в изменении разрешений, поэтому мы получим доступ к пути, в котором у нас есть файл или папка, которые нужно изменить, и нажмите ссылку «Разрешения». Мы введем новое окно, в котором мы можем индивидуально назначать разрешения на чтение, запись и выполнение. Как только это будет сделано, мы должны сохранить изменения.

Числовое представление прав

Для упрощения записи команды chmod можно использовать числовое представление прав. У каждого типа доступа есть числовое представление, для этого используется двоичное представление. Единица означает - есть право, 0 - нет права. Таким образом запись правила rwx r-x r-x в бинарном виде будет выглядить следующим образом: 111 101 101. Но двоичное представление не очень удобно, поэтому используют десятичное представлени. 111 в двоичной системе - это 7 в десятичной, а 101 - это 5, таким образом 111 101 101 - это 755. Итак получаем:

Пользователь и владелец группы файла

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

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

  • -w- 2
  • -wx 3
  • r-x 5
  • rw- 6
  • rwx 7

Таким образом вы можете записать как

$ chmod u=rwx,g=rwx,o=x trurl.py

$ chmod 771 trurl.py

Специальные уровни доступа

Рассмотрим несколько специальных уровней доступа, расширяющие стандартные.

X

Данная опция добавляет выбранным классам права на выполнение тогда и только тогда, когда другие классы тоже имеют права на выполнение:

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

  • Владелец файла.
  • Группа файлов.
  • Разрешения для файлов.
Каждый пользователь будет принадлежать, по меньшей мере, одной группе, которая назначается при создании указанного пользователя. Таким образом, любой, кто не принадлежит к указанной группе, не будет иметь доступа.

  • Чтение: позволяет определенному пользователю видеть содержимое файла.
  • Если это каталог, его содержимое.
  • Написание: позволяет вам изменять файл.
  • Исполнение: если есть что-то выполнить, это можно сделать с этим разрешением.
Но что означают эти буквы?

$ ls -l -rwx-- 1 adam users 14 2007-09-10 21:48 skrypt.sh drwx-- 1 adam users 14 2007-09-10 21:48 tapety -rw--- 1 root users 3665 2007-09-17 17:23 wynik.txt $ chmod go+X * $ ls -l -rwxr-xr-x 1 adam users 14 2007-09-10 21:48 skrypt.sh drwxr-xr-x 1 adam users 14 2007-09-10 21:48 tapety -rw-r–r– 1 adam users 3665 2007-09-17 17:23 wynik.txt

Липкий бит

Если такой типа установить на выполняемый файл, то результаты его работы будут храниться в оперативной памяти даже после завершения программы. Эта возможность редко используется в наши дни, но исторически это сделано было для уменьшения затрат при запуске программ, сегодня существуют более мощные средства кэширования и экономичного распределения памяти между процессами. Если поставить эту опцию на каталог, то всем будет разрешено создавать в ней содержимое, но удалять будет иметь права только владелец и root.

Прежде всего, перечислим каталог с помощью команды. Первый символ представляет тип файла. Следующие 3 пользовательских разрешения, следующие 3 групповые разрешения и последние 3 разрешения для других. Как мы видели, у нас есть символы для разрешений файлов, но несколько неудобно изменять разрешения с символами. Чтобы было проще, мы можем использовать числа.

Там будет 3 номера, которые идут от 0 до 7.

  • Первый номер: права владельца.
  • Второй номер: групповые разрешения.
  • Третье число: разрешения для остальных.
Для представления от 0 до 7 нам нужны 3 бита, которые являются 3 битами, используемыми для предоставления прав владельцам, группе и остальным. С 1 мы даем разрешение, а с 0 мы удаляем его.

Drwxrwxrwt 10 root root 464 2007-09-20 12:45 tmp

Эта возможность часто используется для каталога /tmp. Судя из названия, этот каталог используется как временный.

Назначить липкий бит можно командой chmod:

# chmod u+t test/ # ls -l drwxrwxrwt 2 adam users 48 2007-09-20 15:28 test

или используя числовую запись

# chmod 1000 test/

setuid

Если установить этот режим на исполняемый файл, то все смогут запускать программу от имени владельца. Например у программы ping владельцем является root (т.к. только root имеет право создавать сокеты, что и делает эта программа), но так как на ней стоит этот режим, то и все остальные могут пользоваться этой программой.

$ ls -l /usr/bin/ | grep sudo -rwsr-xr-x 1 root root 91508 2006-10-09 13:37 sudo # chmod u+s program # chmod 4000 program

setgid

Полностью аналогична setuid, только для групп.

# chmod g+s test/ # chmod 2000 test/ # ls -l drwxrwsrwt 2 adam adam 48 2007-09-20 15:28 test

unmask

Команда unmask используется для установки прав файлов для новосозданных файлов по умолчанию. Глобально, у всех новых файлов права по умолчанию 666. С помощью этой команды мы передаем те опции которые НЕ будут присутствовать в новых файлах. Т.е. если мы передадим параметр 0022, то по умолчанию права будут 644.

Поскольку Linux — система многопользовательская, вопрос об организации разграничения доступа к файлам и каталогам является одним из существенных вопросов, которые должна решать операционная система. Механизмы разграничения доступа, разработанные для системы UNIX в 70-х годах (возможно, впрочем, они предлагались кем-то и раньше), очень просты, но они оказались настолько эффективными, что просуществовали уже более 30 лет и по сей день успешно выполняют стоящие перед ними задачи.

В основе механизмов разграничения доступа лежат имена пользователей и имена групп пользователей. Вы уже знаете, что в Linux каждый пользователь имеет уникальное имя, под которым он входит в систему (логируется). Кроме того, в системе создается некоторое число групп пользователей, причем каждый пользователь может быть включен в одну или несколько групп. Создает и удаляет группы суперпользователь, он же может изменять состав участников той или иной группы. Члены разных групп могут иметь разные права по доступу к файлам, например, группа администраторов может иметь больше прав, чем группа программистов.

В индексном дескрипторе каждого файла записаны имя так называемого владельца файла и группы, которая имеет права на этот файл. Первоначально, при создании файла его владельцем объявляется тот пользователь, который этот файл создал. Точнее — тот пользователь, от чьего имени запущен процесс, создающий файл. Группа тоже назначается при создании файла — по идентификатору группы процесса, создающего файл. Владельца и группу файла можно поменять в ходе дальнейшей работы с помощью команд chown и chgrp (подробнее о них будет сказано чуть позже).

Теперь давайте еще раз выполним команду ls -l . Но зададим ей в качестве дополнительного параметра имя конкретного файла, например, файла, задающего саму команду ls . (Обратите, кстати, внимание на эту возможность команды ls -l — получить информацию о конкретном файле, а не о всех файлах каталога сразу).

$ ls -l /bin/ls

Вы видите, что в данном случае владельцем файла является пользователь root и группа root. Но нас сейчас в выводе этой команды больше интересует первое поле, определяющее тип файла и права доступа к файлу. Это поле в приведенном примере представлено цепочкой символов -rwxr-xr-x . Эти символы можно условно разделить на 4 группы.

Первая группа, состоящая из единственного символа, определяет тип файла. Этот символ в соответствии с возможными типами файлов, рассмотренными в предыдущем разделе, может принимать такие значения:

    - = — обычный файл;

    d = — каталог;

    b = — файл блочного устройства;

    c = — файл символьного устройства;

    s = — доменное гнездо (socket);

    p = — именованный канал (pipe);

    l = — символическая ссылка (link).

Далее следуют три группы по три символа, которые и определяют права доступа к файлу соответственно для владельца файла, для группы пользователей, которая сопоставлена данному файлу, и для всех остальных пользователей системы. В нашем примере права доступа для владельца определены как rwx, что означает, что владелец (root ) имеет право читать файл (r), производить запись в этот файл (w), и запускать файл на выполнение (x). Замена любого из этих символов прочерком будет означать, что пользователь лишается соответствующего права. В том же примере мы видим, что все остальные пользователи (включая и тех, которые вошли в группу root ) лишены права записи в этот файл, т. е. не могут файл редактировать и вообще как-то изменять.

Вообще говоря, права доступа и информация о типе файла в UNIX-системах хранятся в индексных дескрипторах в отдельной структуре, состоящей из двух байтов, т. е. из 16 бит (это естественно, ведь компьютер оперирует битами, а не символами r, w, x). Четыре бита из этих 16-ти отведены для кодированной записи о типе файла. Следующие три бита задают особые свойства исполняемых файлов, о которых мы скажем чуть позже. И, наконец, оставшиеся 9 бит определяют права доступа к файлу. Эти 9 бит разделяются на 3 группы по три бита. Первые три бита задают права пользователя, следующие три бита — права группы, последние 3 бита определяют права всех остальных пользователей (т. е. всех пользователей, за исключением владельца файла и группы файла).

При этом, если соответствующий бит имеет значение 1, то право предоставляется, а если он равен 0, то право не предоставляется. В символьной форме записи прав единица заменяется соответствующим символом (r, w или x), а 0 представляется прочерком.

Право на чтение (r) файла означает, что пользователь может просматривать содержимое файла с помощью различных команд просмотра, например, командой more или с помощью любого текстового редактора. Но, подредактировав содержимое файла в текстовом редакторе, вы не сможете сохранить изменения в файле на диске, если не имеете права на запись (w) в этот файл. Право на выполнение (x) означает, что вы можете загрузить файл в память и попытаться запустить его на выполнение как исполняемую программу. Конечно, если в действительности файл не является программой (или скриптом shell), то запустить этот файл на выполнение не удастся, но, с другой стороны, даже если файл действительно является программой, но право на выполнение для него не установлено, то он тоже не запустится.

Вот мы и узнали, какие файлы в Linux являются исполняемыми! Как видите, расширение имени файла тут не при чем, все определяется установкой атрибута "исполняемый", причем право на исполнение может быть предоставлено не всем!

Если выполнить ту же команду ls -l , но в качестве последнего аргумента ей указать не имя файла, а имя каталога, мы увидим, что для каталогов тоже определены права доступа, причем они задаются теми же самыми символами rwx. Например, выполнив команду ls -l / , мы увидим, что каталогу bin соответствует строка:

Естественно, что по отношению к каталогам трактовка понятий "право на чтение", "право на запись" и "право на выполнение" несколько изменяется. Право на чтение по отношению к каталогам легко понять, если вспомнить, что каталог — это просто файл, содержащий список файлов в данном каталоге. Следовательно, если вы имеете право на чтение каталога, то вы можете просматривать его содержимое (этот самый список файлов в каталоге). Право на запись тоже понятно — имея такое право, вы сможете создавать и удалять файлы в этом каталоге, т. е. просто добавлять в каталог или удалять из него запись, содержащую имя какого-то файла и соответствующие ссылки. Право на выполнение интуитивно менее понятно. Оно в данном случае означает право переходить в этот каталог. Если вы, как владелец, хотите дать доступ другим пользователям на просмотр какого-то файла в своем каталоге, вы должны дать им право доступа в каталог, т. е. дать им "право на выполнение каталога". Более того, надо дать пользователю право на выполнение для всех каталогов, стоящих в дереве выше данного каталога. Поэтому в принципе для всех каталогов по умолчанию устанавливается право на выполнение как для владельца и группы, так и для всех остальных пользователей. И, уж если вы хотите закрыть доступ в каталог, то лишите всех пользователей (включая группу) права входить в этот каталог. Только не лишайте и себя такого права, а то придется обращаться к суперпользователю! (Примеч.11)

После прочтения предыдущего абзаца может показаться, что право на чтение каталога не дает ничего нового по сравнению с правом на выполнение. Однако разница в этих правах все же есть. Если задать только право на выполнение, вы сможете войти в каталог, но не увидите там ни одного файла (этот эффект особенно наглядно проявляется в том случае, если вы пользуетесь каким-то файловым менеджером, например, программой Midnight Commander). Если вы имеете право доступа в каком-то из подкаталогов этого каталога, то вы можете перейти в него (командой cd ), но, как говорится "вслепую", по памяти, потому что списка файлов и подкаталогов текущего каталога вы не увидите.

Алгоритм проверки прав пользователя при обращении к файлу можно описать следующим образом. Система вначале проверяет, совпадает ли имя пользователя с именем владельца файла. Если эти имена совпадают (т. е. владелец обращается к своему файлу), то проверяется, имеет ли владелец соответствующее право доступа: на чтение, на запись или на выполнение (не удивляйтесь, суперпользователь может лишить некоторых прав и владельца файла). Если право такое есть, то соответствующая операция разрешается. Если же нужного права владелец не имеет, то проверка прав, предоставляемых через группу или через группу атрибутов доступа для остальных пользователей, уже даже не проверяются, а пользователю выдается сообщение о невозможности выполнения затребованного действия (обычно что-то вроде "Permission denied").

Если имя пользователя, обращающегося к файлу, не совпадает с именем владельца, то система проверяет, принадлежит ли владелец к группе, которая сопоставлена данному файлу (далее будем просто называть ее группой файла). Если принадлежит, то для определения возможности доступа к файлу используются атрибуты, относящиеся к группе, а на атрибуты для владельца и всех остальных пользователей внимания не обращается. Если же пользователь не является владельцем файла и не входит в группу файла, то его права определяются атрибутами для остальных пользователей. Таким образом, третья группа атрибутов, определяющих права доступа к файлу, относится ко всем пользователям, кроме владельца файла и пользователей, входящих в группу файла.

Для изменения прав доступа к файлу используется команда chmod . Ее можно использовать в двух вариантах. В первом варианте вы должны явно указать, кому какое право даете или кого этого права лишаете:

$ chmod wXp имя-файла

где вместо символа w подставляется

    либо символ u (т. е. пользователь, который является владельцем);

    либо g (группа);

    либо o (все пользователи, не входящие в группу, которой принадлежит данный файл);

    либо a (все пользователи системы, т. е. и владелец, и группа, и все остальные).

Вместо X ставится:

    либо + (предоставляем право);

    либо - (лишаем соответствующего права);

    либо = (установить указанные права вместо имеющихся),

Вместо p — символ, обозначающий соответствующее право:

    r (чтение);

    w (запись);

    x (выполнение).

Вот несколько примеров использования команды chmod :

$ chmod a+x file_name

предоставляет всем пользователям системы право на выполнение данного файла.

$ chmod go-rw file_name

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

$ chmod ugo+rwx file_name

дает всем права на чтение, запись и выполнение.

Если опустить указание на то, кому предоставляется данное право, то подразумевается, что речь идет вообще обо всех пользователях, т. е. вместо $ chmod a+x file_name

можно записать просто

$ chmod +x file_name

Второй вариант задания команды chmod (он используется чаще) основан на цифровом представлении прав. Для этого мы кодируем символ r цифрой 4, символ w — цифрой 2, а символ x — цифрой 1. Для того, чтобы предоставить пользователям какой-то набор прав, надо сложить соответствующие цифры. Получив, таким образом, нужные цифровые значения для владельца файла, для группы файла и для всех остальных пользователей, задаем эти три цифры в качестве аргумента команды chmod (ставим эти цифры после имени команды перед вторым аргументом, который задает имя файла). Например, если надо дать все права владельцу (4+2+1=7), право на чтение и запись — группе (4+2=6), и не давать никаких прав остальным, то следует дать такую команду:

$ chmod 760 file_name

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

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

Чтобы завершить рассказ о правах доступа к файлам, надо рассказать еще о трех возможных атрибутах файла, устанавливаемых с помощью той же команды chmod . Это те самые атрибуты для исполняемых файлов, которые в индексном дескрипторе файла в двухбайтовой структуре, определяющей права на файл, занимают позиции 5-7, сразу после кода типа файла.

Первый из этих атрибутов — так называемый "бит смены идентификатора пользователя". Смысл этого бита состоит в следующем.

Обычно, когда пользователь запускает некоторую программу на выполнение, эта программа получает те же права доступа к файлам и каталогам, которые имеет пользователь, запустивший программу. Если же установлен "бит смены идентификатора пользователя", то программа получит права доступа к файлам и каталогам, которые имеет владелец файла программы (таким образом, рассматриваемый атрибут лучше называть "битом смены идентификатора владельца"). Это позволяет решать некоторые задачи, которые иначе было бы трудно выполнить. Самый характерный пример — команда смены пароля passwd . Все пароли пользователей хранятся в файле /etc/passwd, владельцем которого является суперпользователь root . Поэтому программы, запущенные обычными пользователями, в том числе команда passwd , не могут производить запись в этот файл. А, значит, пользователь как бы не может менять свой собственный пароль. Но для файла /usr/bin/passwd установлен "бит смены идентификатора владельца", каковым является пользователь root . Следовательно, программа смены пароля passwd запускается с правами root и получает право записи в файл /etc/passwd (уже средствами самой программы обеспечивается то, что пользователь может изменить только одну строку в этом файле).

Установить "бит смены идентификатора владельца" может суперпользователь с помощью команды

# chmod +s file_name

Аналогичным образом работает "бит смены идентификатора группы".

Еще один возможный атрибут исполняемого файла — это "бит сохранения задачи" или "sticky bit" (дословно — "бит прилипчивости"). Этот бит указывает системе, что после завершения программы надо сохранить ее в оперативной памяти. Удобно включить этот бит для задач, которые часто вызываются на выполнение, так как в этом случае экономится время на загрузку программы при каждом новом запуске. Этот атрибут был необходим на старых моделях компьютеров. На современных быстродействующих системах он используется редко.

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

# chmod 4775 file_name

При этом веса этих битов для получения нужного суммарного результата задаются следующим образом:

    4 — "бит смены идентификатора пользователя",

    2 — "бит смены идентификатора группы",

    1 — "бит сохранения задачи (sticky bit)".

Если какие-то из этих трех битов установлены в 1, то несколько изменяется вывод команды ls -l в части отображения установленных атрибутов прав доступа. Если установлен в 1 "бит смены идентификатора пользователя", то символ "x" в группе, определяющей права владельца файла, заменяется символом "s". Причем, если владелец имеет право на выполнение файла, то символ "x" заменяется на маленькое "s", а если владелец не имеет права на выполнение файла (например, файл вообще не исполняемый), то вместо "x" ставится "S". Аналогичные замены имеют место при задании "бита смены идентификатора группы", но заменяется символ "x" в группе атрибутов, задающих права группы. Если равен 1 "бит сохранения задачи (sticky bit)", то заменяется символ "x" в группе атрибутов, определяющей права для всех остальных пользователей, причем "x" заменяется символом "t", если все пользователи могут запускать файл на выполнение, и символом "T", если они такого права не имеют.

Таким образом, хотя в выводе команды ls -l не предусмотрено отдельных позиций для отображения значений битов смены идентификаторов и бита сохранения задачи, соответствующая информация выводится. Вот небольшой пример того, как это будет выглядеть:

# ls -l prim1

В. Костромин (kos at rus-linux dot net) - 4.5. Права доступа к файлам и каталогам

Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: