Журнал LinuxFormat - перейти на главную

LXF148:tut3

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

Содержание

Тренинги Linux

Часть 8: В последней статье серии – создаем ссылки, управляем правами доступа

и устанавливаем дисковые квоты. В конце вас ждет тест!



Мы подошли к последней статье этой серии, и было здорово услышать ваш отклик. Мы очень рады, что эта серия оказалась вам полезной! Независимо от того, продвинувшийся ли вы пользователь Linux, решивший найти работу на своем новом уровне, или дилетант, которому просто хочется узнать побольше о своей операционной системе, желаем вам удачи.

Писать эти статьи тоже было приятно: ведь Linux полностью открыт и свободен, и здорово, что мы всегда можем залезть внутрь и посмотреть, чем он живет. Вложив время и терпение, каждый может стать гуру. Есть всего несколько тем, которых мы еще не касались, и мы разберемся с ними сегодня. Мы узнаем, что такое ссылки файловой системы, как на безопасность файловой системы влияют права доступа и как ограничить использование дискового памяти посредством квот. Так как эта серия началась добрых восемь месяцев назад, вы уже могли позабыть некоторые темы, поэтому зайдите в каталог Magazine/LPI_quiz на нашем диске или на сайт www.linuxformat.com/files/lpiquiz.txt и проверьте себя. Веселитесь, и счастливой вам линуксации!


Раздел 1: Создаем ссылки

Все хорошие системные администраторы стараются избежать дублирования ресурсов. Это не только расточительно, но и ведет к путанице. Например, вам нужно, чтобы файл был виден в двух различных местах файловой системы: вы редактируете текстовый файл в своем домашнем каталоге и хотите, чтоб его видели пользователи вашего web-сервера в каталоге /var/www/textfiles/.

Примитивный способ это сделать – копирование: вы периодически копируете файл из домашнего каталога в /var/www/textfiles/. Это решает задачу, но приводит к двум проблемам:

  • Если вы забыли скопировать файл, версии файла станут несинхронизированными.
  • А вдруг другой администратор захочет изменить файл и откроет файл в /var/www/textfiles/?

Проблем можно избежать, применив символические ссылки. Это крошечные файлы, которые содержат немногим более указателей с одного файла на другой в файловой системе – они очень похожи на «ярлыки» из мира Windows. Символическая ссылка существует сама по себе, независимо от файла, на который указывает, и если ссылку удалить, с файлом ничего не произойдет. Но сперва создадим пример ссылки. Сделайте пустой файл командой

touch myfile

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

ln -s myfile mylink

Здесь важен порядок аргументов: флаг -s означает, что это символическая ссылка (подробнее о ссылках другого типа чуть позже). Затем идет целевой файл, т. е. тот файл, на который нацелена ссылка, а потом следует имя самой ссылки. Здесь мы работаем только в текущем каталоге, но в команде можно указывать и полные пути к файлам. Можно даже создавать ссылки на каталоги. Если сейчас ввести ls -l --color, то вы увидите, что файл ссылки отображается другим цветом, как на экранном снимке. В подробном списке видны целевые файлы, показанные с ->.

Пока все хорошо. Но как это работает на практике? Ну, попробуйте изменить файл mylink – откройте его в Nano, Vim, gEdit или любом редакторе, который вам нравится, введите какой-нибудь текст и сохраните файл. Вернитесь в командную строку, снова наберите ls -l, затем cat myfile, и вы увидите, что несмотря на то, что мы редактировали файл mylink, все изменения на самом деле произошли в myfile. Программы не думают о ссылках – они просто смотрят, на какие файлы те указывают, и работают уже с ними.


Избежать катастрофы

Ну, в большинстве случаев. Существуют меры предосторожности против полной катастрофы. Введите rm mylink, и символическая ссылка (а не файл, на который она указывает) будет удалена; иначе вы никогда не избавились бы от символических ссылок!

События могут развернуться и по-другому. Повторите те же самые действия, в результате которых у вас появится myfile и mylink, и затем удалите myfile. Теперь файла, на который указывает mylink, не существуют – это испорченная, подвисшая ссылка. Введите ls -l --color – и увидите, что она показана предупреждающим оттенком красного, а file mylink скажет вам, что ссылка «битая».

Символические ссылки предоставляют огромную гибкость и широкие возможности настройки, в чем вы можете убедиться, заглянув в каталог /etc/alternatives (если в вашем дистрибутиве он есть). В нем находится множество символических ссылок на программы, что позволяет хранить несколько версий программ на одном и том же компьютере. Например, у вас могут быть различные версии Java, а с помощью символических ссылок вы свяжете общую команду java с конкретной используемой версией.

А если вы захотите установить экспериментальную версию GCC, то сможете связать /usr/bin/gcc символической ссылкой с экспериментальной версией в процессе сборки, а затем вернуть ее на исходную версию.


Жесткая сторона ссылок

Впрочем, существует и другой тип ссылок, гораздо более мощный: жесткая ссылка. Символическая ссылка содержит имя целевого файла, представляя собой отдельный файл в файловой системе с указателем внутри; жесткая ссылка – это дополнительная запись в оглавлении файловой системы. Если это трудно понять (это сбивает с толку многих людей, не знакомых с файловыми системами), выясним, как работает файловая система. Она набита данными, а в ее начале есть таблица, где указано, какие фрагменты данных относятся к каким файлам.

Теперь представьте себе, что myfile – простой текстовый файл, данные которого начинаются с позиции 63813 на жестком диске (или с любой другой позиции). При создании символической ссылки на myfile создается новый файл с ярлыком внутри, который говорит: «Привет, вообще-то я ссылаюсь на myfile, поэтому перейдите к нему. Спасибо». А при создании жесткой ссылки новых файлов не создается. Вместо этого, таблица файловой системы обновляется таким образом, что mylink также указывает на позицию 63813 на жестком диске. Это не два различных файла, а просто два имени файла, соответствующие одной и той же позиции на жестком диске.

Итак, символические ссылки указывают на другие файлы; жесткие ссылки указывают на другие области данных на диске. На практике это означает, что жесткие ссылки функционируют совсем иначе, чем символические. Например, создайте текстовый файл foo и сделайте жесткую ссылку на него командой:

ln foo bar

(Заметьте, что для жесткой ссылки флаг -s опущен.) Удалите исходный файл командой rm foo и введите команду ls -l. Вы увидите, что на первый взгляд со ссылкой все в порядке, а если вывести ее содержимое командой cat bar, то оно будет на месте. Как это возможно? Ну, удалив foo, вы лишь удалили запись для этого файла из таблицы файловой системы, но не данные с диска, так как в таблице есть другая запись, также указывающая на эти данные – bar.

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

Раздел 2: Сила в праве доступа

Права доступа – неотъемлемая часть любой современной операционной системы. Было бы сущим безумием давать каждому пользователю возможность влезать в любой файл в системе, менять и удалять его. Даже в однопользовательских системах на большинстве настольных компьютеров жизненно важно иметь полноценную систему прав доступа – она предотвращает массу неприятностей. Например, благодаря тому, что обычный пользователь не может изменять файлы в /etc и /boot, опечатка в командной строке не сможет повредить критические компоненты запуска системы и вывести ее из строя.

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

Права доступа в Linux, как и во многих Unix-подобных системах, делятся на три группы:

  • Право на чтение
  • Право на запись
  • Право на исполнение

Эти права можно активировать и дезактивировать независимо друг от друга. Например, для обычных пользователей у большинства файлов в /etc есть права доступа на чтение, но не на запись. У большинства файлов в /bin и /usr/bin для обычных пользователей есть права на чтение и исполнение, но нет права на запись. В порядке примечания: для доступа к содержимому каталогов необходимо иметь для этих каталогов права и на чтение, и на исполнение.

Сбиваемся в группы

Права доступа объединяются в группы. Есть владелец файла, группа, к которой относится владелец, и прочие (посторонние) пользователи. Рассмотрим их шаг за шагом. В терминале введите следующие команды:

touch foo
ls -l foo

Они создают новый файл foo и выводят его права доступа по умолчанию. Фрагмент, который нас интересует – -rw-r--r-- в начале строки. Разобьем его на части:

  1. В первой позиции – тип файла. У каталогов это d, у ссылок – l, а у обычных файлов – прочерк -.
  2. rw- Первая группа из трех символов отображает права доступа для владельца файла. Здесь rw означает чтение и запись, а прочерк означает, что файл не является исполняемым (rwx означало бы чтение, запись и исполнение.)
  3. r-- Следующая тройка символов – для группы; здесь они показывают, что файл доступен группе для чтения, но не для записи и исполнения. Пользователей в Linux можно объединять в группы, чтобы давать определенным пользователям определенные права доступа. Например, компьютером могут пользоваться 50 человек, но только 10 имеют право записи в определенный каталог. Можно объединить этих десять пользователей в группу и дать этой группе право записи в каталог. Более подробно о группах – чуть позже.
  4. r-- Последняя тройка – права доступа для других пользователей, т. е. всех остальных пользователей системы. Они имеют право только на чтение; для них биты w и x (записи и исполнения) не установлены.

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


Новая армия Chmod

Изменение прав доступа обеспечивает утилита chmod. Ее аргументы – буквы, соответствующие типу пользователя, со знаком плюс или минус, и соответствующее право доступа. Типы пользователей бывают такие:

  • u = пользователь-владелец файла
  • g = пользователи в группе
  • o = остальные пользователи
  • a = все пользователи

Например, чтобы скрипт myscript мог запускать только его владелец, введите

chmod u+x myscript

Для задания такого права, чтобы никто (кроме root) не мог прочесть файл, скомандуйте

chmod a-r myscript

Отметим, что команда chmod способна изменять права нескольким файлам одновременно; чтобы каталоги обрабатывались рекурсивно, добавьте флаг -R. Более подробную информацию о команде вы найдете на соответствующей man-странице (man chmod).

Итак, с правами доступа разобрались; ну, а как насчет владельцев и групп? Для них есть похожая команда chown (change ownership – изменить права собственности). В качестве аргументов она принимает имя пользователя и группу, разделенные двоеточием:

chown steve:vboxusers myfile

Выполнив вслед за этим команду ls -l для файла myfile, вы увидите, что его владельцем является steve, и принадлежит он к группе vboxusers. Чтобы увидеть список групп в системе, загляните в /etc/group, а для добавления пользователя в группу взгляните на man-страницу usermod (особенно на опции -a и -G). Хотя с помощью chown можно изменить пользователя и группу одной командой, существуют отдельная утилита chgrp только для изменения группы.

Конечно, чтобы менять права доступа к файлу или каталогу, вы изначально должны иметь на это право. Иначе любой пользователь мог бы влезть в закрытые каталоги вроде /root и завладеть ими!

Маску долой

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

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

umask a+rw

Теперь создайте файл командой touch blah и по команде ls -l blah убедитесь, что его могут читать и записывать все пользователи. Таким образом можно настроить учетные записи отдельных пользователей в Bash (~/.bashrc) или системные параметры (/etc/profile).

Вы можете заметить, что umask и другие утилиты управления доступом употребляют скорее цифры, а не те символы, которые мы обсуждали ранее; это восьмеричные числа (в системе счисления с основанием 8), и они выходят за рамки нашей статьи, но если для кого-то это представляет специальный интерес, обратитесь в Wikipedia по ссылке http://tinyurl.com/68e8lp, там приводится вполне доходчивое объяснение.

Персональные инструменты
купить
подписаться
Яндекс.Метрика