Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
QNX 4 Руководство пользователя.doc
Скачиваний:
248
Добавлен:
02.05.2014
Размер:
1.02 Mб
Скачать

Глава 6. Ввод учитываемых пользователей

В этой главе...

Безопасность

Регистрационный файл

6.1. Безопасность

QNX предоставляет механизмы по управлению доступом к ресурсам

и критическим системным функциям. Эти механизмы базируются на спо-

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

6.1.1. Утилиты управления доступом

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

login вход в систему

su временное получение привилегий другого пользователя

passwd обеспечение учета/изменений паролей пользователей

newgrp переключение на другую группу

Утилита login

Утилита login начинает работу при запуске tinit на все уст-

ройства tty. Утилита login запрашивает имя пользователя и пароль,

которые проверяются в базе данных пароля. Если пользователь не мо-

жет ввести за три попытки правильную комбинацию имя пользовате-

ля/пароль, утилита заканчивает работу, обновляя cоответствующую

считанную информацию. Если пользователь введет правильную комбина-

цию, login запустит командный интерпретатор и загрузит среду поль-

зователя.

Утилита su

Утилита su позволяет пользователю временно иметь привилегии

другого пользователя. Если пользователь - не суперпользователь (ro-

ot), su запрашивает соответствующий пароль. Если введена правильная

комбинация, su выполнит exec() для создания командного интерпрета-

тора для пользователя с соответствующим идентификатором ID группы и

ID пользователя. При выходе из интерпретатора команд пользователь

возвратится туда, где он был перед выполнением su.

- 59 -

Утилита passwd

Утилита passwd может использоваться для изменения пароля или

ввода нового пользователя в систему. Когда пользователь вызывает

passwd, чтобы изменить пароль, passwd запрашивает у пользователя

старый пароль и новый пароль, затем запрашивает снова новый пароль

(чтобы проверить правильность его ввода). Если пользователь являет-

ся суперпользователем, старый пароль не запрашивается. Только су-

перпользователь (root) может ввести нового пользователя. Утилита

passwd использует файл /etc/default/passwd, чтобы определить число

символов в пароле, диапазон изменений ID и так далее. Например,

чтобы ввести нового пользователя с именем carol, Вы должны задать

команду:

passwd carol

По умолчанию passwd затем запросит следующую информацию:

- ID пользователя;

- ID группы;

- действительное имя пользователя;

- рабочий каталог;

- командный интерпретатор при входе;

- пароль.

По соглашению, учитываемые пользователи имеют ID пользователя

больше или равный 100. ID пользователя меньше 100 часто использует-

ся системными процессами. Если ID группы не существует - не забудь-

те скорректировать файл groups, который будет отображаться. Если ID

группы существует, то этот пользователь будет добавлен в нее. Пара-

метры рабочий каталог, командный интерпретатор при входе и пароль -

необязательные:

-------------------------------------------------------------------

Если Вы не определите: Тогда:

-------------------------------------------------------------------

рабочий каталог будет использоваться /home/username

(этот каталог будет создан, если он не

существует)

командный интерпретатор по умолчанию будет использоваться коман-

дный интерпретатор при входе системы

(/bin/sh)

пароль будет введен пользователь без пароля

-------------------------------------------------------------------

- 60 -

Если Вы определяете новый пароль, Вас попросят ввести его

дважды, чтобы проверить правильность ввода. Утилита passwd не обес-

печивает исключение пользователя. Эта функция может быть выполнена

коррекцией файлов /etc/passwd, /etc/group и /etc/shadow, используя

текстовый редактор.

Утилита newgrp

Утилита newgrp изменяет реальный ID группы текущего процесса.

Если утилита вызвана без аргументов, newgrp изменяет идентификацию

группы на группу, определенную в базе данных паролей для текущего

пользователя. Группы, на которые конкретный пользователь может из-

менить свой ID, определяются базой данных паролей.

6.1.2. ID пользователя и группы

При вводе в систему пользователю присваиваются:

- ID пользователя;

- ID группы.

Они называются реальным ID пользователя и реальным ID группы.

ID пользователя должен быть уникальным. Никакие два пользователя не

должны иметь один и тот же ID. Это условие обеспечивается утилитой

passwd, но суперпользователь может нарушить это условие, непосредс-

твенно редактируя файл password. ID группы позволяет различным

пользователям объединяться в группы. Этот механизм позволяет исклю-

чить доступ пользователей других групп к ресурсам, используемым

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

Эффективные ID пользователя и группы

Процессы имеют два класса ID пользователя и группы: реальный и

эффективный. Когда процесс создан, он автоматически наследует эти

четыре ID от его источника (обычно от командного интерпретатора при

входе):

- реальный ID пользователя (uid)

- реальный ID группы (gid)

- эффективный ID пользователя (euid)

- эффективный ID группы (egid)

Эффективные ID пользователя и группы используются для проверки

полномочий. Процесс может изменить свои эффективные ID пользователя

или группы как раздельно, так и оба одновременно, при этом они бу-

дут отличаться от их реальных аналогов. Естественно, это сделано

- 61 -

для того, чтобы получить доступ к недоступным ресурсам с реальными

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

-------------------------------------------------------------------

Чтобы модифицировать эффективный Вы используете:

ID группы и пользователя:

-------------------------------------------------------------------

из C-программ функции seteuid() и setegid()

из командного интерпретатора биты атрибутов доступа setuid и

setgid файла

-------------------------------------------------------------------

Для получения дополнительной информации о битах setuid и set-

gid, смотрите следующий раздел "Атрибуты доступа файла".

6.1.3. Атрибуты доступа файла

В QNX каждый файл имеет атрибуты доступа, называемые битами

режима. Эти биты режима, связанные с владельцем файла и группой,

управляют доступом к файлу. Когда процесс открывает файл, эффектив-

ный ID пользователя процесса и эффективный ID группы становятся ID

владельца и группы файла. Комплект битов режима также присваивается

файлу (это описывается в разделе "Как назначаются биты режима").

Есть три класса битов режима: владельца, группы и других пользова-

телей. Когда процесс пытается управлять файлом, Администратор фай-

ловой системы анализирует соответствующий класс битов режима.

Администратор файловой системы определяет следующий порядок

обработки битов режима:

1) Эффективный ID пользователя запрашиваемого процесса сравни-

вается с ID владельца файла. Если они совпадают, то обрабатываются

биты режима владельца.

2) При несовпадении с ID владельца, эффективный ID группы зап-

рашиваемого процесса сравнивается с ID группы файла. Если эти ID

групп совпадают, то обрабатываются биты режима группы.

3) При несовпадении с ID владельца и группы, обрабатываются

биты режима других пользователей.

ВНИМАНИЕ. Как суперпользователь root (uid), Вы можете управ-

лять любым файлом для чтения/записи независимо от

разрешений, а также выполнять любой файл, который

имеет по крайней мере один бит режима разрешения вы-

полнения файла.

- 62 -

Биты режимов файла загружаются в 16-битовую область st_mode

каталога для файла; доступ к файлу предоставляется, если соответс-

твующий бит режима установлен в 1_1.

+-----------------------------------------------------------+

Ё st_mode Ё

Ё Ё

Ё 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Ё

Ё +----------------------------------------------------+ Ё

Ё Ё su sg r w x r w x r w xЁ Ё

Ё +--------------+-------+--+--------+--------+--------Ё Ё

Ё тип файла Ё Ё Ё владелец группа другие Ё

Ё Ё Ё Ё Ё

Ё Ё Ё Ё Ё

Ё Ё Ё Ё Ё

Ё Ё Ё резерв Ё

Ё Ё setgid Ё

Ё setuid Ё

+-----------------------------------------------------------+

Рис.4

Следующая таблица иллюстрирует различие в атрибутах доступа

активизированных регулярных файлов и каталогов:

-------------------------------------------------------------------

Атрибуты Тип доступа в зависимости от типа файла:

Регулярный файл Каталог

-------------------------------------------------------------------

r Чтение файла Проверка имен файлов в каталоге (напри-

мер, через утилиту ls)

w Запись в файл Cоздание, удаление и переименование

файлов в пределах каталога, включая

подкаталоги

x* Выполнение Просмотр каталога. Это означает, что Вы

можете изменить Ваш текущий каталог на

этот каталог. Также, Вы можете включить

этот каталог в имя маршрута (например,

в open(), stat(),...).

* Атрибут на выполнение имеет значение только для каталогов и регу-

лярных файлов; он не применяется к другим типам файлов.

- 63 -

-------------------------------------------------------------------

Просмотр атрибутов доступа

Вы можете использовать команду ls -l, чтобы увидеть атрибуты

доступа к файлу, владельца и группу. Информация, выдаваемая по ко-

манде ls -1 ("el") для файла alpha.c, показывает, что владелец и

кто-нибудь из группы techies могут читать и записывать в файл alp-

ha.c, при этом другие пользователи могут только читать этот файл:

-rw-rw-r-- 1 brianc techies 8475 May 17 1991 alpha.c

В следующем примере информация,выдаваемая по команде ls -ld

для каталога /bin, показывает, что владелец и члены группы могут

читать, записывать и просматривать каталог, при этом другие пользо-

ватели не имеют разрешения на запись атрибутов доступа, следова-

тельно, не могут добавлять новые файлы в каталог:

drwxrwxr-x 2 root techies 2048 Sep 19 1990 bin

Тем не менее, другие пользователи могут просматривать или вы-

полнять файлы в /bin. Допустимо, хотя и неестественно, иметь разре-

шение читать каталог, но не иметь возможность просматривать его.

Это позволит работать команде ls в зависимости от опций, которые Вы

указываете, но не позволит Вам управлять любым файлом в каталоге

или переходить по команде cd в этот каталог. Это может сбить с тол-

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

вполне логично допустить, что, если Вы можете увидеть наличие фай-

ла, то и имеете разрешение управлять им, то есть, если Вы можете

посмотреть содержимое каталога, то и можете сделать его текущим по

команде cd.

Как устанавливать биты режима

Атрибуты доступа к файлу будут устанавливаться, как комбинация

текущей маски umask созданного процесса и режима доступа, устанав-

ливаемого в функциях open()/creat(). Маска umask указывает, какие

биты режима должны быть исключены, если процесс определяет по умол-

чанию атрибуты доступа при создании файла, каталога или очереди

(смотрите umask в "Utilities Reference"). Эта маска обычно задается

в 8-ричном виде (т.е., 0666, в двоичном виде - 110110110, что озна-

чает следующие атрибуты: rw-rw-rw-). Далее следует пример использо-

вания umask:

- 64 -

Запрашивается режим: 110110110 (0666) = rw-rw-rw-

Текущая маска umask: 000010010 (0022) = ----w--w-

--------------------

Результат: 110100100 (0644) = rw-r--r--

Вы можете изменить атрибуты доступа к файлу следующим образом:

-------------------------------------------------------------------

Для того, чтобы изменить: используйте:

-------------------------------------------------------------------

владельца и группу утилиты chown и chgrp

функцию chown() (C-программы)

атрибуты доступа и утилиту chmod

биты режима setuid и setgid функцию chmod() (C-программы)

-------------------------------------------------------------------

ВНИМАНИЕ. Для того, чтобы модифицировать владельца или атрибу-

ты доступа к файлу, Ваш эффективный ID пользователя

должен совпадать с ID владельца файла. Если Вы изме-

няете владельца файла, Ваш ID должен отличаться от

ID владельца. При этом Вы больше не сможете изменять

атрибуты доступа владельца файла. Суперпользователь

может модифицировать биты режима любого файла, неза-

висимо от его владельца.

Setuid и setgid

Иногда для того, чтобы выполнить определенные функции, пользо-

ватель должен выполнять команду на уровне привилегий выше, чем они

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

утилиту passwd, чтобы модифицировать свой собственный пароль в базе

данных пароля, хотя обычные попытки записи в эту базу данных будут

отвергаться. Два бита режимов файлов позволяют пользователю выпол-

нять команду на более высоком уровне привелегий: установка ID поль-

зователя (setuid) и установка ID группы (setgid). Если эти биты ус-

тановлены в 1, исполняемый файл выполнится с полномочиями его вла-

дельца и группы, а не с полномочиями процесса, который вызывает та-

кой файл. Эти биты режима применяются только к исполняемым регуляр-

ным файлам. Когда файл загружается для выполнения и бит режима se-

tuid установлен, эффективный ID пользователя нового процесса стано-

вится таким же, как у владельца файла. Аналогично, если бит режима

setgid установлен, эффективный ID группы становится таким же, как

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

- 65 -

setuid и setgid обнуляются всякий раз, когда изменены владелец или

группа файла. Установка бита setuid защищает от записи пользовате-

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

файла на root, пользователь получает неограниченные системные пол-

номочия. Утилиты passwd, login, su и newgrp имеют владельцем файла

суперпользователя root; следовательно, эти программы выполняются с

полномочиями суперпользователя.

ВНИМАНИЕ. Принято, что root - единственный пользователь с ну-

левым идентификатором пользователя, который имеет

статус суперпользователя. Что касается управления

доступом, Вы должны гарантировать, что только надеж-

ным, совершенно надежным программам можно установить

идентификатор суперпользователя. Программа не полу-

чает никаких специальных полномочий, когда ей уста-

навливают идентификатор группы суперпользователя.

Т.к. программы setuid наследуют полномочия супер-

пользователя, Вам следует убедиться, что они не за-

писывают атрибуты доступа, т.к. только суперпользо-

ватель может модифицировать программы.

6.1.4. База данных паролей

Три файла образуют базу данных паролей:

/etc/passwd

/etc/shadow

/etc/group

Доступ к этим файлам должен быть следующим образом:

-------------------------------------------------------------------

Файл Владелец Группа Атрибуты доступа

-------------------------------------------------------------------

/etc/passwd root root rw- r-- r--

/etc/group root root rw- r-- r--

/etc/shadow root root rw- --- ---

-------------------------------------------------------------------

Файл /etc/passwd содержит набор строк следующего формата:

username: haspw: userid: group: comment: homedir:

shell

- 66 -

где:

username имя пользователя при входе в систему;

haspw если отсутствует, то пользователь не имеет ника-

кого пароля; в противном случае в файле

/etc/shadow существует пароль;

userid числовой идентификатор пользователя;

group числовой идентификатор группы;

comment область комментария произвольного формата; не до-

лжна содержать ":";

homedir рабочий каталог этого пользователя (значение по

умолчанию - /);

shell инициализируемый командный интерпретатор (и аргу-

менты), запускаемые при входе (значение по умол-

чанию - /bin/sh).

Файл /etc/group содержит строки следующего формата:

groupname: reserved: group: member[,member]*

где:

groupname имя группы

reserved резерв для последующего использования

group числовой ID группы

member список имен пользователей, принадлежащих к

этой группе

Файл /etc/shadow содержит строки следующего формата:

userid: password: reserved: reserved: reserved

где:

userid имя пользователя

password закодированный пароль этого пользователя

reserved три числовые области резервируются для "старого па-

роля"; для действующего они всегда равны 0.

Вы можете обратить внимание, что из вышеуказанного списка раз-

решений файл /etc/passwd - читаемый. Это позволяет стандартным ути-

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

телях. Т.к. этот файл - читаемый, закодированный пароль не содер-

жится в нем. Закодированный пароль содержится в файле /etc/shadow,

- 67 -

который имеет право читать только суперпользователь. Это защищает

от несанкционированных попыток недоброжелательных пользователей де-

кодировать пароли. Как Администратору системы, Вам следует обеспе-

чить эти права доступа. QNX загружен с базой данных пароля по умол-

чанию, которая включает файлы /etc/passwd и /etc/group. Файл

/etc/shadow не загружен, т.к. учитываемые в нем пользователи не

имеют паролей.

6.1.5. Файлы паролей по умолчанию

Файл /etc/passwd, который был загружен с Вашей QNX системой по

умолчанию, содержит следующее:

root::0:0::/:/bin/sh

По умолчанию /etc/group файл содержит следующее:

root::0:root

6.2. Файл регистрации

Регистрационная информация записывается в файл /etc/acclog.

Если этот файл не существует, вся регистрационная информация будет

потеряна. Это - нормальный режим после того, как QNX была установ-

лена. Для большинства систем реального времени рекомендуется по

умолчанию не хранить регистрационную информацию. Если у Вас есть

модемная линия или если Вы используете QNX в сети со многими поль-

зователями, Вы можете изменить это, создав пустой файл /etc/acclog.

6.2.1. Включение регистрации

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

файл /etc/acclog. Для этого используйте утилиту touch:

touch /etc/acclog

chmod g=, o= /etc/acclog

Регистрационная информация будет записываться в него.

Имейте в виду, что только суперпользователь (ID пользователя -

root) может создать и модифицировать этот файл.

6.2.2. Формат записи

Каждая запись в этом текстовом файле имеет следующую форму:

- 68 -

tttttttttt cc data...

где tttttttttt - время в секундах с 1970 (в десятичном) виде. За

ним всегда следует один пробел. За временем следует двухсимвольный

код cc. За этим кодом через пробел следуют данные, специфические

для каждого кода. Запись завершается символом <конец строки>. Сле-

дующие утилиты записывают регистрационную информацию.

-------------------------------------------------------------------

Утилиты Назначения Запись

-------------------------------------------------------------------

login вход пользователя tttttttttt LO device uid gid uname

login неудачные попытки входа tttttttttt LF uname

modem подключение модема tttttttttt MO device

su переключение пользователя tttttttttt SU device uid gid uname

tinit запуск команды tttttttttt TS device command

tinit управление с устройства tttttttttt TA device

-------------------------------------------------------------------

Типичный файл регистрации мог бы быть похож на этот:

670464500 TS //1/dev/ser1 modem -b 19200 -L

670464545 MO //1/dev/ser1 2400

670464550 LO //1/dev/ser1 100 101 steve

670465824 TS //1/dev/ser1 modem -b 19200 -L

Эта запись показывает, что tinit, запущенная с программой mo-

dem, ждет вызовов. Получен вызов и выдан ответ на скорости

2400 бод, и пользователь с идентификатором steve вошел в систему.

Имейте в виду, что регистрация не показывает конец сеанса. Можно

сделать вывод о конце сеанса, т.к. в последней строке tinit снова

запускается с программой modem. Общая продолжительность сеанса

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

дующим образом:

670465824 - 670464550 = 1274 секунды

В базовой системе записи с многих устройств будут распреде-

ляться в файле регистрации. Для того, чтобы сопоставить события на

каждом устройстве, Вы должны найти номер узла, с которым связано

каждое устройство. Возможно проследить все устройства сети, т.к.

регистрационная информация находится в одном файле. Вот различные

последовательности в общем случае:

- 69 -

TS -> LO -> TS начало и конец сеанса на выделенной линии.

TS -> MO -> LO -> TS начало и конец сеанса на подключаемой

линии.

TA -> TS -> LO -> TA начало и конец сеанса на выделенной ли-

нии, управляемой нажатием клавиши.

TS -> TS неудачная попытка входа на выделенную ли-

нию.

TS -> MO -> TS неудачный вход на подключаемой линии.

6.2.3. Очистка файла регистрации

Как только Вы создаете файл /etc/acclog, он начинает увеличи-

ваться, т.к. записи в нем постоянно добавляются. Если не управлять

этим, то файл может занять значительное дисковое пространство, поэ-

тому Вам следует напечатать или архивизировать информацию из этого

файла в регулярную базу. Можно автоматизировать эту работу, исполь-

зуя утилиту cron (смотрите "Utilities Reference"). В следующем при-

мере регистрационный файл переименовывается в файл, называемый го-

дом и месяцем и создается новый пустой регистрационный файл:

mv /etc/acclog /etc/acclogs/9106

touch /etc/acclog

chmod g=,o= /etc/acclog

ВНИМАНИЕ. Т.к. данные в этом файле - очень регулярные, Вы мо-

жете использовать утилиту сжатия freeze, которая

обеспечивает очень высокие показатели сжатия файла.

Это может значительно уменьшить требования к диско-

вому пространству, если Вы сохраняете регистрацион-

ную информацию в работающей системе или записываете

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

перед его сжатием. Никогда не сжимайте файл

/etc/acclog непосредственно. Вот пример рекомендуе-

мой процедуры сжатия:

mv /etc/acclog /etc/logs/9106

touch /etc/acclog

chmod g=,o= /etc/acclog

freeze /etc/logs/9106

Имейте в виду, что и другие утилиты (возможно третьей стороны)

могут добавить свои собственные регистрационные записи в файл

/etc/acclog. Утилиты могут также регистрировать проблемы или неожи-

- 70 -

данно возникающие ситуации в текстовом файле /etc/syslog.

.

- 71 -