LXF112:DrBrown2

Материал из Linuxformat.

Перейти к: навигация, поиск

Радости RWX

Доктор рассматривает права доступа к файлу и отвечает на вопросы, которые никто бы и не задал.

Вы знакомы с правами доступа, не так ли? Милая троица «чтение, запись, исполнение», для «владельца, группы и остальных пользователей». Конечно, знакомы! Скажем, у нас есть такой файл:

$ ls -l foo
-rw-r----- 1 chris student 1550 2008-08-21 15:05 foo

Мы видим, что пользователь chris может читать и записывать в файл, члены группы student могут только читать его, а у остальных пользователей вообще нет доступа. А как насчет следующего файла?

$ ls -l foo
-r--rw---- 1 chris student 1550 2008-08-21 15:05 foo

Если chris является членом группы student, может ли он писать данные в файл? Когда я задаю этот вопрос в классе, мои студенты обычно делятся на три группы: «да», «нет» и «не хочу оконфузиться, дав, возможно, неверный ответ». Верный ответ – нет. Так как chris является владельцем файла, то видит первые три бита прав доступа. Точка. Linux не говорит: «Ага, но chris – член группы student, поэтому он может писать в файл». На практике этот вопрос всплывает редко – вы вряд ли увидите права доступа, в которых ограничения ослабляются слева направо.

Следующий вопрос: может ли chris удалить файл (права доступа те же самые)? Раз уж я убедил всех, что chris не может писать в файл, большинство студентов в классе решили, что удалить его он тоже не может. На самом деле это не исключено – в зависимости от наличия прав на запись для каталога, откуда он пытается удалить файл. Именно так: вам не нужны права на запись для файла, чтобы его удалить, нужны только права на запись для каталога.

А права на выполнение? Для двоичных скомпилированных файлов, вроде тех, что в каталоге /usr/bin, они означают, что вы можете запустить команду. Права на выполнение и на чтение – разные, и для выполнения файла вам не обязательно мочь его читать. Скрипты, однако, статья особая. Пусть у меня есть скрипт demo. Имея права на чтение, запустить файл я могу несколькими способами. Во-первых, можно явно запустить новую оболочку и передать ей файл скрипта как входной параметр таким образом:

$ sh demo

Во-вторых, можно выполнить команды скрипта из текущей оболочки, используя команду source таким образом:

$ source demo
$ . demo # . - сокращенный аналог source

В обоих случаях мне нужны только права на чтение (а не исполнение) скрипта. Также можно выполнить скрипт как команду, набрав его имя таким образом:

$ ./demo

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

Другой вопрос, вызывающий путаницу – это права доступа по отношению к каталогу. Различия между правами на чтение и исполнения для каталога четко определены, но они очень тонкие. Если у меня есть право на чтение для каталога, но нет права на исполнение, я могу просмотреть содержимое каталога, но не смогу перейти в него командой cd. Если у меня есть право на исполнение, но нет права на чтение, переход в каталог командой cd разрешен, но нельзя просмотреть его содержимое, хотя, как это ни удивительно, можно обратиться к файлу по имени. Суть такова: чтобы иметь разумный доступ к каталогу, нужны как права на чтение, так и на исполнение. Только одно из этих прав без второго не имеет смысла, и, насколько я знаю, в Linux нет каталогов с такими правами.

Sticky-бит

Наконец, о значении «sticky-бита». Этот флажок появился в Unix в середине семидесятых. Когда он установлен, ядро знает: нужно оставить сегмент кода программы в области подкачки после завершения процесса. Это увеличивает скорость последовательных выполнений программы, поскольку единственное, что нужно сделать ядру в таком случае – это переместить программу из области подкачки в память. Благодаря этому часто используемые приложения – например, редакторы – будут загружаться заметно быстрее. Хотя для своего времени эта идея была неплохой, в текущих версиях Unix данный бит для обычных файлов не установлен, а в Linux никогда и не устанавливался. Но он играет важную роль для каталогов, изменяя правила, определяющие, кто может удалять в них файлы. Если бит установлен, это может делать только владелец файла, владелец каталога или суперпользователь.

Изображение: LXF112_47_1.jpg

Вывод команды ls -l foo (ну, большая его часть), и что он означает.


Linux на печати

Я бы рад снабдить вас библиографией, но на рынке литературы для системных администраторов Linux сейчас затишье. До спада в индустрии технической литературы (в 2001 году) люди покупали гораздо больше книг, и публиковать можно было все что угодно. Сегодня издатели выискивают книги с большей аудиторией, чтобы избежать финансовых потерь при публикации. Почти по определению, системные администраторы – значительно меньшая группа потребителей, чем конечные пользователи, и издатели не хотят рисковать. Из этого правила есть исключения – нишевые группы читателей-энтузиастов, более охотно покупающих книги, и издатели иногда пользуются шансом сделать что-то необычное, и хорошо делают. Но львиная доля специальных изданий просто не выживет при современном экономическом климате. Наверное, мой 800-страничный труд о портировании Linux на микроволновку пока придется отложить.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию