Использование UNIX: Часть 4. Права владельца и разрешения UNIX для защиты личной информации и безопасного совместного использования

Совместное и монопольное использование ресурсов

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

Мартин Стейчер, главный редактор, Linux Magazine

Мартин Стейчер (Martin Streicher) работает главным редактором журнала Linux Magazine. Он получил степень магистра Вычислительной Техники в университете Purdue, и разрабатывал UNIX-подобные системы с 1982 на языках программирования Pascal, C, Perl, Java, а недавно добавил в этот список Ruby. Ему можно написать по адресу martin.streicher@linux-mag.com.



29.12.2007

До выпуска компанией Apple первого персонального компьютера в 1977 г. компьютеры были очень дорогими, поэтому область их применения была крайне ограничена и они использовались только для решения очень серьезных задач. Рабочее время компьютеров распределялось между разными проектами и первые системные администраторы должны были обеспечить круглосуточную загрузку своего компьютера, поскольку каждая минута простоя системы означала выброшенные на ветер деньги.

В идеале простаивающие ресурсы процессора должны автоматически выделяться по требованию любому процессу, который в них нуждается. На самом деле эта идея (впервые озвученная Робертом Бернером (Robert Berner) в далеком 1957 году) лежит в основе режима разделения времени. Этот режим был реализован в Multics, RSTS/E и UNIX® (и во множестве его современных вариантов), как многозадачность,, при которой ресурсы компьютера (центральный процессор, ввод и вывод, память) распределяются среди процессов, ждущих своей очереди на выполнение, создавая иллюзию того, что каждый процесс единолично использует ресурсы компьютера. Добавьте несколько терминалов ввода/вывода на многозадачную ЭВМ и каждый терминал станет персональным компьютером.

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

Эта статья рассматривает привилегии пользователя и, в частности, рассматривает, как управлять разрешениями на доступ к файлу для монопольного или совместного использования ваших каталогов и файлов с другими пользователями. Для свободного "общения" c UNIX важно понимать механизм реализации прав доступа.

id, ego и UID

Для начала давайте выясним, как зовут пользователя. Напечатайте в командной строке whoami:

$ whoami
strike

В данном примере мой компьютер ответил strike - это мое имя пользователя, под которым я вошел в систему. Если выполнить команду whoami, то вы получите свое имя пользователя.

Как будет показано дальше, название учетной записи пользователя в действительности окажется псевдонимом для его универсального идентификатора (UID в дальнейшем). Для того, чтобы увидеть UID, введите id -u:

$ id -u
501

Мой универсальный идентификатор UID равняется 501.

Обычно имена пользователей используются по возможности вместо UID только потому что они более удобочитаемые и их легче запомнить. Например, если ввести команду ps uxf, чтобы увидеть список выполняемых процессов, то ps отобразит в колонке USER имя пользователя, запустившего процесс.

$ ps uxf
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
strike   32346  0.0  0.1  6496 1832 ?        S    19:39   0:00 sshd: strike@pts/0
strike   32347  0.0  0.1  2592 1476 pts/0    Ss   19:39   0:00  \_ -bash
strike   32358  0.0  0.0  2476  820 pts/0    R+   19:39   0:00      \_ ps uxf

В результате в выводе команды будут указаны три запущенных процесса: сеанс ssh для работы с системой, запущенная им оболочка bash, которая в свою очередь запустила команду ps. Если выполнить ls -alFG в домашнем каталоге для просмотра владельцев файлов, то вместо UID будет показано имя пользователя.

В большинстве случаев можно прервать выполнение только ваших процессов. Конечно, администратор root может управлять всеми процессами. Например, joe, пользователь, использующий систему совместно со мной, не может завершить работу моей командной оболочки bash, идентификатор процесса которой равен 32347:

$ whoami
joe
$ kill -INT 32347
-bash: kill: (32347) - Operation not permitted

Число 32347 - это идентификатор процесса моей оболочки, которую обнаружит пользователь joe, выполнив команду ps auxf. Однако, раз я владелец этого процесса, то joe не сможет завершить его. В тоже время я могу завершить любой свой процесс, как показано в листинге 1.

Листинг 1. Завершение собственных процессов
$ ps uxf
...
strike   32347  0.0  0.1  2592 1488 pts/0    Ss   19:39   0:00  \_ -bash
strike   32733 39.5  0.0  1480  356 pts/0    R    19:50   0:01      \_ yes
$ kill -INT 32733
$ ps uxf
...
strike   32347  0.0  0.1  2592 1488 pts/0    Ss   19:39   0:00  \_ -bash

Выполнив команду kill -INT 32733, мы завершим процесс 32733 (команда yes).

Эти два довольно простых принципа: права на монопольное использование данных и использование пользователями ресурсов системы независимо друг от друга, делают UNIX более безопасным чем, скажем, Microsoft® Windows®.


Привилегии членства в группе

Пользователю принадлежат файлы и каталоги, которые он создает, так же, как и процессы, которые он запускает. Например, выполнив команду ls -alFG в домашнем каталоге $HOME, он узнает, что ему принадлежит, как показано в листинге 2.

Листинг 2. Список принадлежащих пользователю файлов и папок в его домашнем каталоге
$ ls -alFG $HOME
...
-rw-------   1 strike     6175 Aug 25 07:03 .bash_history
-rw-------   1 strike      567 Apr 20  2005 .bash_profile
-rw-------   1 strike     1834 Apr 20  2005 .bashrc
drwx------   2 strike     4096 Mar  8 10:54 .ssh/
-rw-------   1 strike     9516 Aug 22 16:42 .viminfo
-rw-r--r--   1 strike  1529617 Jul 19 07:00 Archive.zip
drwxrwx---   3 strike     4096 Aug 24 04:04 IBM/
drwxr-xrwx   3 strike     4096 Jun 14 06:06 backups/
...

Проблема с группами пользователей в UNIX

Назначение владельцем файла группы пользователей - это простейший способ обеспечить совместное использование файла внутри группы всеми ее участниками. Например, если пользователи jane и joe создали группу science и хотят совместно использовать файл nuclear.csv вместе с другими пользователями, смените владельца файла на группу science.

Но что будет, если пользователи sam и bertha также нуждаются в доступе к этому файлу, но при этом не состоят в группе science? Конечно, можно добавить обоих пользователей в группу science, но это откроет им доступ ко всем файлам, которым владеет группа science.

Это показывает несовершенство реализации групп пользователей в UNIX: файл может принадлежать только одной группе, и реализация сложных схем обеспечения совместного доступа к файлу обычно ведет к краху групп. (Разумеется, можно создать новую группу, скажем, jjsb, только для joe, jane, sam, и bertha. Но что случится, если donald тоже потребует доступ?)

Если необходимы сложные схемы управления доступа к данным, то можно применять Списки Контроля Доступа (ACL), которые доступны в различных версиях ОС UNIX. ACL расширяет стандартную модель монопольного использования данных в UNIX до возможности предоставления особенных прав на доступ либо отдельной группе, либо отдельному пользователю. ACL похож на вышибалу в баре: он пропускает приятелей и прочих приглашенных гостей на вечеринку.

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

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

Кроме своего непосредственного владельца, файл имеет группу-собственника. UNIX-группа это просто набор пользователей, и вы можете быть членом такой группы. Используйте команду id для просмотра групп, в которых вы состоите:

$ id
uid=501(strike) gid=501(strike) groups=501(strike),
  81(appserveradm), 79(appserverusr), 80(admin)

На моей системе основной группой является группа с GID равным 501, strike (название группы совпадает с моим именем пользователя). Я также состою в трех других группах:

  • appserveradm
  • appserveruser
  • admin

Обычно группой-владельцем файла, созданного вами, является ваша первичная группа, но можно позднее изменить группу-владельца на любую другую группу, в которой вы состоите. Запустите команду ls -laF в вашем домашнем каталоге для получения исчерпывающей информации о ваших файлах, как в листинге 3.

Листинг 3. Получение более подробной информации о файлах
-rw-------   1 strike strike     6118 Aug 27 21:59 .bash_history
-rw-r--r--   1 strike strike      567 Apr 20  2005 .bash_profile
-rw-r--r--   1 strike strike     1834 Apr 20  2005 .bashrc
drwx------   2 strike strike     4096 Mar  8 10:54 .ssh/
-rw-------   1 strike strike     9516 Aug 22 16:42 .viminfo
-rw-r--r--   1 strike strike  1529617 Jul 19 07:00 Archive.zip
drwxr-xr-x   3 strike strike     4096 Aug 24 04:04 IBM/
drwxrwxr-x   3 strike admin      4096 Jun 14 06:06 backups/

Примечание.Листинг 3 выводит типичный результат работы команды ls -l. Листинг 2 отличается от листинга 3 тем, что имя группы-владельца было умышлено скрыто для упрощения изучения последующего материала. Имя группы-владельца можно скрыть при помощи флага -G.

Каталог с именем backups принадлежит группе admin, что дает определенные привилегии всем участникам этой группы. Между тем, группа-владелец остальных моих файлов - это группа strike. Обычно пользователь является единственным участником группы с тем же названием, что и имя пользователя, которая обеспечивает эффективное разграничение доступа для этого пользователя.


Интересные подробности

Если еще раз просмотреть результат работы команды ls выше, то можно отметиь последовательность из 10-ти символов, с которых начинается каждая строка. Каждый символ является битом, предоставляющим определенное право использования этого файла для одной из трех групп: вы, ваша основная группа и остальные пользователи. Рисунок 1 показывает назначение каждого бита.

Рисунок 1. Биты прав доступа для файла в UNIX ОС
Разрешения в UNIX

На рисунке 1:

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

Проанализируем информацию, выведенную командой ls -laF из примера выше:

  • Файлы .bash_history, .bash_profile, .bashrc, и .viminfo доступны для чтения и записи только для меня. Я могу просматривать, редактировать и удалять эти файлы.
  • Каталог .ssh доступен только для меня. Первый бит указывает, что этот файл является специальным, а символ d указывает на то, что это каталог. Я могу просмотреть содержимое каталога потому, что установлен бит, отвечающий за возможность чтения. Я могу добавлять и удалять файлы из этого каталога, потому что установлен бит, отвечающий за возможность записи. Думаю, стоит объяснить, почему пользователь может запустить на исполнение каталог. На самом деле, если этот бит не установлен, то невозможно "пройти" каталог (войти в него и просмотреть содержимое). (Кстати, как упоминалось в Части 3 этого цикла, ваш каталог .ssh должен быть закрытым, чтобы можно было корректно организовать упорядоченный доступ пользователей к нему.)
  • Я могу считывать данные из файла Archive.zip и записывать их в него, тогда как другие могут только считывать данные из этого файла. (Конечно, группа strike тоже может считать этот файл, но я являюсь единственным членом этой группы, так что проблемы здесь не возникнет)
  • Я могу просматривать файлы из каталога IBM и другого каталога и записывать в них новые файлы; другие пользователи тоже могут каталогизировать содержимое этих каталогов.
  • Участники группы admin, и я вместе с ними, могут просматривать содержимое каталога backups и добавлять в него файлы, тогда как остальные могут только просматривать этот каталог.

Сделайте каталог устойчивым к изменениям

Чтобы быть уверенным, что каталог не будет случайно удален, надо задать бит защищенности (sticky) при помощи команды chmod +T.

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

Если выполнить команду ls -ld /tmp, то будет видно, что общий для системы временный каталог, используемый как рабочее пространство для приложений, наверняка будет защищен от удаления.

$ ls -lF
drwxrwxrwx    2 strike  strike   68 Aug 28 06:21 dropbox/
drwx------    2 strike  strike   68 Aug 28 06:21 mine/
$ chmod +t dropbox
$ ls -lF
drwxrwxrwt    2 strike  strike   68 Aug 28 06:21 dropbox/
drwx------    2 strike  strike   68 Aug 28 06:21 mine/

Для управления правами доступа (кроме бита, обозначающего тип файла - файл, каталог или ссылка) используется команда chmod (change mode - изменить режим>), а для изменения групп-владельцев файлов - команда chgrp (change group - сменить группу). (Администратор может также сменить владельца файла при помощи команды chown(change owner - сменить владельца).

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

  • chmod u+x script.sh: если создается сценарий для оболочки и его нужно запустить, то следует установить бит, отвечающий за возможность его исполнения. Здесь, u+x означает для владельца файла (u) установить (+) бит исполнения (x). Общая форма использования chmod - это chmod с u для указания пользователя, или g (для группы), или o (для других пользователей); далее идут символы + или - и один или более символов r, w, и x.
  • chmod go+rx IBM: эта команда предоставляет права на чтение и исполнение файла для основной группы и других пользователей.
  • chmod a+rx script.sh: в дополнение к u, g, и o, можно использовать модификатор a для всех подряд (для конкретного пользователя, его основной группы и остальных). Таким образом, эта команда позволяет читать данные из файла и исполнять его всем без исключения пользователям.
  • chgrp admin backups: эта команда меняет группу-владельца файла на администраторскую.

Если права доступа добавляются при помощи символа +, то этот символ (плюс) добавляет новые права, а старые оставляет без изменений. Точно также, если ограничить права доступа при помощи - (минус), то это ограничивает заданные права, а остальные останутся прежними. Если нужно установить все права сразу, то следует использовать числовой режим установки прав доступа. (Также можно использовать оператор chmod =. См. справочник man .)

Примечание.Числовой режим установки прав доступа - это восьмеричное число от 0 до 7 или, с другой стороны, трехбитное число, каждый бит которого предназначен для обозначения чтения, записи и выполнения. Поскольку есть три режима доступа к каждому файлу, полностью заданное разрешение на работу с файлом можно задать тремя числами, например, 400, 644 или 777. Вот несколько примеров:

  • Чтобы сделать каталог закрытым, вам необходимо установить права для самого себя и ограничить эти права для других пользователей и групп:
    $ mkdir example
    $ ls -l
    drwxr-xr-x    2 strike  strike       68 Aug 28 11:27 example
    $ chmod 700 example
    $ ls -l
    drwx------    2 strike  strike       68 Aug 28 11:27 example

    Значение 700 расшифровывается в возможность чтения, записи и исполнения для вас (первая цифра 7), и аннулировать все права для других пользователей и групп (два последних нуля).
  • " Если нужно разрешить всем на вашем компьютере читать один из ваших файлов, предоставьте право на чтение для всех трех категорий пользователей:
    $ ls -l .aliases
    -rw-------   1 mstreich  mstreich  79 Jul 26 17:08 .aliases
    $ chmod 644 .alias
    $ ls -l
    -rw-r--r--  1 mstreich  mstreich  79 Jul 26 17:08 .aliases

    Значение 644 - это сокращенное обозначение для права на чтение, запись для меня (6), права на чтение для основной группы (4) и других пользователей (4). Конечно, если файл .aliases находится в вашем домашнем каталоге, для каталога $HOME должны быть установлены права доступа, позволяющие просматривать его содержимое.

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

Таблица 1. Числовые значения и соответствующие им права
КтоЗначениеРезультат
Владелец файла 0400Владелец файла или каталога может читать данные из него.
0200Владелец файла или каталога может записывать данные в него.
0100Группа-владелец файла может запускать свой файл; группа-владелец каталога может осуществлять поиск в нем.
Основная группа0040Члены группы могут читать данные.
0020Члены группы могут записывать данные.
0010Группа-владелец файла может запускать свой файл; группа-владелец каталога может осуществлять поиск в нем.
Другие пользователи0004Другие пользователи могут читать данные.
0002Другие пользователи могут записывать данные.
0001Другие пользователи могут запускать файл; другие пользователи могут осуществлять поиск в каталоге.

Например, для задания права на чтение и запись для других пользователей, добавьте 0004 к 0002, чтобы получить 0006. Сделайте те же самые действия для себя и своей основной группы и сложите три полученных числа, чтобы получить полностью скомплектованный набор разрешений.


Значение прав доступа

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

Следующая статья этого цикла рассматривает утилиты и методики для управления сотнями или тысячами файлов на нескольких компьютерах.

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


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

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=279658
ArticleTitle=Использование UNIX: Часть 4. Права владельца и разрешения UNIX для защиты личной информации и безопасного совместного использования
publish-date=12292007