lab.MIT.02
.pdfкоторого на эти сигналы должна быть описана в документации. Пользователь может посылать сигналы только тем процессам, владельцем которых он является. Если пользователь отправит сигнал какому-то другому процессу с помощью kill(1) или kill(2), доступ будет запрещен. Исключением из правил является пользователь root, который может отправлять сигналы любому процессу.
В некоторых случаях FreeBSD тоже посылает сигналы приложениям. Если приложение плохо написано и пробует обратиться к области памяти, к которой оно не должно обращаться, FreeBSD посылает процессу сигнал нарушение сегментации (SIGSEGV). Если приложение использует системный вызов alarm(3), чтобы получить уведомление по истечении определенного периода времени, будет отправлен сигнал Alarm (SIGALRM) и т.д.
Два сигнала могут быть использованы для завершения процесса, SIGTERM и SIGKILL. SIGTERM это корректный способ завершить процесс; процесс может поймать сигнал, определить, что его хотят завершить, закрыть любые файлы, которые он мог открыть, и закончить то, что он делал в момент перед закрытием. В некоторых случаях процесс может даже игнорировать SIGTERM, если выполняет задачу, которая не может быть прервана.
SIGKILL не может быть проигнорирован процессом. Если посылается процессу SIGKILL, FreeBSD сразу же остановит этот процесс.
Другие сигналы, которые могут понадобиться, SIGHUP, SIGUSR1, и SIGUSR2. Это сигналы общего назначения, различные приложения могут по-разному реагировать на них.
Предположим, что был изменен файл конфигурации веб сервера – теперь нужно указать ему перечитать конфигурацию. Можно остановить и запустить httpd, но это приведет к кратковременной остановке сервера, которая может быть нежелательна. Большинство демонов написаны так, чтобы при получении сигнала SIGHUP перечитывать файлы конфигурации. Поэтому вместо уничтожения и запуска httpd можно послать сигнал SIGHUP. Поскольку нет стандартного способа реагирования на этот сигнал, различные демоны будут вести себя по разному.
Сигналы посылаются с помощью команды kill(1).
3.1.Отправка сигнала процессу.
Этот пример показывает, как послать сигнал inetd(8). Файл конфигурации inetd: /etc/inetd.conf, inetd перечитает этот файл, если ему отправить сигналSIGHUP.
3.1.1. Нужно определить PID процесса, которому необходимо отправить сигнал. Сделать это можно с помощьюps(1) иgrep(1). Командаgrep(1)используется для поиска по заданной строке в выходном потоке. Эта команда запускается под обычным пользователем, а inetd(8) под – root, поэтомуps(1) должна быть запущена с параметромax.
% ps –ax | |
grep inetd |
|
198 ?? |
Iws |
0:00.00 inetd –wW |
Итак, PID inetd(8) 198. В некоторых случаях в выводе команды может также появитьсяgrep inetd. Это из-за способа, которымps(1)получает список запущенных процессов.
3.1.2.Необходимо использоватьkill(1) для отправки сигнала. Посколькуinetd(8) запускается из подroot, нужно сначала использоватьsu(1) для получения правroot.
3.1.3.% su
Password:
# /bin/kill -s HUP 198
Как и большинство команд UNIX, kill(1) ничего не выведет, если отработает нормально. Если посылается сигнал процессу, которым не владеет пользователь, на экране появится “kill: PID: Operation not permitted”.
4. Виртуальные консоли и терминалы.
4.1. Консоль.
Если при установке FreeBSD не был настроен автоматический запуск графической среды, то система запросит ввод логина сразу после завершения стартовых скриптов:
Additional ABI support:. Local package initialization:. Additional TCP options:.
Fri Sep 20 13:01:06 EEST 2009
FreeBSD/i386 (pc3.example.org) (ttyv0)
login:
Вторая с конца строка:
FreeBSD/i386 (pc3.example.org) (ttyv0)
В этой строке содержится немного информации о только что загруженной системе. Это консоль FreeBSD, работающей на Intel или совместимом процессоре x86 архитектуры. Имя этого компьютера (у каждого компьютераUNIX есть имя) pc3.example.org, и в данный момент видно системную консоль – терминалttyv0.
Наконец, последняя строка всегда: login:
11
Здесь предлагается ввести «имя пользователя», чтобы войти в систему.
4.2. Вход во FreeBSD.
FreeBSD это многопользовательская, многопроцессорная система. Это формальное описание системы, которая может быть использована множеством разных людей, одновременно запускающих большое количество программ на одном компьютере.
Любой многопользовательской системе нужен способ отличать каждого «пользователя» от остальных. Во FreeBSD (и всех UNIX-подобных операционных системах), эта задача решается путем «входа» пользователя в систему перед запуском каких-либо программ. У каждого пользователя есть уникальное имя («имя пользователя») и персональный, секретный ключ («пароль»). Перед тем, как разрешить пользователю выполнять какие-либо программы, FreeBSD запрашивает их оба.
Сразу после загрузки FreeBSD и завершения работы стартовых скриптов, система предложит ввести имя пользователя:
login:
В этом примере имя пользователяjohn. Необходимо ввестиjohn в этом приглашении и нажатьEnter. Далее должно появиться приглашение ввести «пароль»:
login: john Password:
Необходимо ввести соответствующий имениjohn пароль и нажатьEnter. Парольне виден! Это сделано по соображениям безопасности.
Если пароль был введен правильно, то сразу же будет выполнен вход во FreeBSD и можно выполнять команды. Будет выведено сообщение дня (MOTD, или message of the day) за которым последует командная строка (с
символом#, $, или%).
4.3. Множественные консоли.
Запуск команд UNIX из консоли – это конечно хорошо, но FreeBSD может выполнять множество программ одновременно, поэтому наличие одной консоли может быть недостатком. В таком случае очень полезны «виртуальные консоли».
FreeBSD может быть настроена для работы с несколькими виртуальными консолями. Можно переключаться с одной виртуальной консоли на другую, нажимая соответствующие сочетания клавиш на клавиатуре. У каждой консоли есть свой канал вывода и FreeBSD заботится о том, чтобы правильно перенаправить ввод с клавиатуры и вывод на монитор, как только выполняется переключение с одной консоли на другую.
Для переключения между консолями зарезервированы специальные комбинации клавиш. Можно использовать сочетанияAlt-F1, Alt-F2, до Alt-F8 чтобы переключаться между различными виртуальными консолями в FreeBSD.
При переключении от одной консоли к другой, FreeBSD заботится о сохранении и восстановлении вывода на экран. Результатом является «иллюзия» наличия множества «виртуальных» экранов и клавиатур, которые могут быть использованы для ввода и запуска команд FreeBSD. Программы, которые запускаются на одной виртуальной консоли, не прекращают выполнение, когда консоль становится невидимой. Они продолжают выполняться, когда выполняется переключение на другую виртуальную консоль.
4.4. Файл /etc/ttys.
В конфигурации по умолчанию FreeBSD запускает восемь виртуальных консолей. Тем не менее, это не ограничение оборудования, и можно легко настроить систему для загрузки большего или меньшего числа виртуальных консолей. Число и параметры виртуальных консолей задаются в файле/etc/ttys.
Можно использовать это файл для настройки виртуальных консолей FreeBSD. Любая не закомментированная строка в этом файле (строка, не начинающаяся с символа#), содержит настройки для одного терминала или виртуальной консоли. Версия этого файла по умолчанию, поставляемая с FreeBSD, содержит настройки для девяти виртуальных
консолей и включает восемь терминалов. Это строки, начинающиеся сttyv: |
|
comments |
|||
# name |
getty |
type |
status |
||
# |
"/usr/libexec/getty Pc" |
cons25 |
on |
secure |
|
ttyv0 |
|
||||
# Virtual terminals |
cons25 |
on |
secure |
|
|
ttyv1 |
"/usr/libexec/getty Pc" |
|
|||
ttyv2 |
"/usr/libexec/getty Pc" |
cons25 |
on |
secure |
|
ttyv3 |
"/usr/libexec/getty Pc" |
cons25 |
on |
secure |
|
ttyv4 |
"/usr/libexec/getty Pc" |
cons25 |
on |
secure |
|
ttyv5 |
"/usr/libexec/getty Pc" |
cons25 |
on |
secure |
|
ttyv6 |
"/usr/libexec/getty Pc" |
cons25 |
on |
secure |
|
ttyv7 |
"/usr/libexec/getty Pc" |
cons25 |
on |
secure |
|
ttyv8 |
"/usr/X11R6/bin/xdm -nodaemon" |
xterm |
off secure |
|
|
4.5. Консоль в однопользовательском режиме
Стоит отметить, что при работе FreeBSD в однопользовательском режиме есть только одна консоль. Виртуальных консолей нет. Установки консоли в однопользовательском режиме можно найти в файле/etc/ttys в строке, начинающейся сconsole:
12
# name getty |
type |
status |
comments |
# |
|
|
|
#If console is marked "insecure", then init will ask for the root password
#when going to single-user mode.
console none |
unknown off secure |
Замечание: Как сказано в комментариях |
выше строкиconsole, можно отредактировать эту строку и |
изменитьsecure на insecure. Если это сделать, то FreeBSD даже при загрузке в однопользовательском режиме будет запрашивать парольroot.
5. Права доступа.
FreeBSD является прямым потомком BSD UNIX и основывается на некоторых ключевых концепциях UNIX. В первую очередь это, конечно, тот факт, что FreeBSD – многопользовательская операционная система. Это означает, что несколько пользователей могут работать одновременно, решая различные задачи и совершенно не мешая друг другу. На системе лежит ответственность за правильное разделение и управление такими ресурсами как память, процессорное время, периферийные устройства и прочее.
Многопользовательская среда предполагает наличие механизма регулирования прав доступа к любому ресурсу в системе. Существует три типа прав доступа: на чтение, запись и исполнение. Права сгруппированы три по три, соответственно чтение/запись/выполнение для владельца/группы/всех остальных. Численное представление:
Значение |
Права доступа |
Список файлов каталога |
0 |
Ничего не разрешено |
--- |
1 |
Нельзя читать и писать, разрешено исполнять |
--x |
2 |
Нельзя читать и исполнять, разрешено писать |
-w- |
3 |
Нельзя читать, разрешено писать и исполнять |
-wx |
4 |
Разрешено читать, нельзя писать и исполнять |
r-- |
5 |
Разрешено читать и исполнять, нельзя писать |
r-x |
6 |
Разрешено читать и писать, нельзя исполнять |
rw- |
7 |
Разрешено все |
rwx |
Можно использовать опцию-l командыls(1) для получения подробного листинга каталога, включающего колонку с информацией о правах на файл для владельца, группы и всех остальных. Например, командаls -l в
произвольном каталоге может вывести следующее: |
|
|
|
||||
% ls -l |
|
|
|
|
|
|
|
total 530 |
1 |
root |
wheel |
512 |
Sep |
5 |
12:31 myfile |
-rw-r--r-- |
|||||||
-rw-r--r-- |
1 |
root |
wheel |
512 |
Sep |
5 |
12:31 otherfile |
-rw-r--r-- |
1 |
root |
wheel |
7680 |
Sep |
5 |
12:31 email.txt |
... |
|
|
|
|
|
|
|
Вот как выглядит первая колонка выводаls -l:
-rw-r--r--
Первый (считая слева) символ говорит обычный ли это файл, каталог, символьное устройство, сокет или любое другое псевдо-файловое устройство. В нашем случае- указывает на обычный файл. Следующие три символа (в данном случае этоrw-) задают права доступа владельца файла. Затем идут права группы, которой принадлежит файл (r--). Последняя тройка (r--) определяет права для всех остальных. Минус означает отсутствие каких-либо прав (т.е. нельзя ни читать, ни писать, ни выполнять). В данном случае права установлены таким образом, что владелец может читать и писать в файл, а группа и другие могут только читать. Таким образом, численное представление прав644, где каждая цифра представляет три части прав на файл.
Права на устройства контролируются аналогичным образом. Во FreeBSD все устройства представлены в виде файлов, которые можно открывать, читать и писать в них. Эти специальные файлы содержатся в каталоге/dev.
Каталоги также являются файлами. К ним применимы те же права на чтение, запись и выполнение. Правда, в данном случае «выполнение» имеет несколько другой смысл. Когда каталог помечен как «исполняемый», это означает, что можно «зайти» в него (с помощью командыcd, change directory). Это также означает, что в данном каталоге можно получить доступ к файлам, имена которых известны (конечно, если собственные права на файл разрешают такой доступ).
Если же требуется получить список файлов в некотором каталоге, права доступа на него должные включать доступ на чтение. Для того, чтобы удалить из каталога какой-либо файл, имя которого известно, на этот каталог должны быть даны права на записьина исполнение.
Существуют и другие права доступа, но они как правило используются в особых случаях, например, setuid-бит на выполняемые файлы и sticky-бит на каталоги.
13
5.1. Символические обозначения прав Символические обозначения, иногда называемые символическими выражениями, используют буквы вместо
восьмеричных значений для назначения прав на файлы и каталоги. Символические выражения используют синтаксис (кто) (действие) (права), где существуют следующие значения:
Опция |
Символ |
Значение |
(кто) |
u |
Пользователь (User) |
(кто) |
g |
Группа (Group) |
(кто) |
o |
Другие (Other) |
(кто) |
a |
Все (All, «world») |
(действие) |
+ |
Добавление прав |
(действие) |
- |
Удаление прав |
(действие) |
= |
Явная установка прав |
(права) |
r |
Чтение (Read) |
(права) |
w |
Запись (Write) |
(права) |
x |
Выполнение (Execute) |
(права) |
t |
Sticky бит |
(права) |
s |
SUID или SGID |
Эти значения используются командойchmod(1) так же как и раньше, но с буквами. Например, можно использовать следующую команду для запрета доступа других пользователей кFILE:
% chmod o= FILE
Для изменения более чем одного набора прав можно применить список, разделенный запятыми. Например, следующая команда удалит права группы и «всех остальных» на запись вFILE, а затем добавит права на выполнение для всех:
% chmod go-w,a+x FILE
5.2. Флаги файлов во FreeBSD.
Кроме уже описанных прав доступа к файлам, FreeBSD поддерживает использование «флагов файлов». Эти флаги обеспечивают дополнительный уровень защиты и контроля над файлами, но не могут применяться к каталогам.
Эти флаги добавляют дополнительные возможности контроля над файлами, обеспечивая (при определенных условиях) невозможность их удаления или изменения даже пользователюroot.
Файловые флаги изменяются при помощи утилитыchflags(1) посредством простого интерфейса. К примеру, чтобы установить системный признак неудаляемости на файлfile1, необходимо выполнить команду:
# chflags sunlink file1
Чтобы отключить флаг неудаляемости, необходимо выполнить предыдущую команду с ключом «no» перед параметромsunlink. Вот так:
# chflags nosunlink file1
Чтобы просмотреть флаги этого файла, можно использовать командуls(1) с параметрами-lo:
# ls -lo file1
Результат выполнения команды должен выглядеть примерно так:
-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1
Некоторые флаги могут быть установлены или сняты с файлов только пользователемroot. В остальных случаях эти флаги может установить владелец файла.
6. Управление учетными записями пользователей.
Весь доступ к системе осуществляется через учетные записи, и все процессы запускаются пользователями, так что управление пользователями и учетными записями в системах FreeBSD имеет всеобъемлющее значение.
Все данные о пользователях FreeBSD хранит в файле /etc/passwd (/etc/master.passwd) в текстовом виде. Каждому пользователю соответствует одна строка, поля которой разделяются двоеточиями:
Имя пользователя:*:UID:GID:полное имя:домашний каталог: стартовый shell
FreeBSD не хранит пароли ни открытым текстом, ни в зашифрованном виде. Вместо пароля хранится hash – последовательность символов, получаемая из пароля невосстановимым шифрованием. Этот хэш хранится во втором поле /etc/master.passwd. Каждому паролю однозначно соответствует ключ, и чтобы проверить, правильно ли пользователь его ввел, достаточно из введенного изготовить второй ключ и сравнить его с соответствующим полем в
/etc/master.passwd.
Всякий раз, когда какая-либо программа управления пользователями изменяет информацию об учетной записи, хранящейся в файле /etc/master.passwd, FreeBSD запускает pwd_mkdb(8) для обновления файлов базы данных паролей.
14
С каждой учетной записью в системе FreeBSD связана определенная идентификационная информация.
Имя пользователя
Имя пользователя в том виде, в каком оно вводится в приглашениеlogin:. Имена пользователей должны быть уникальны в пределах одного компьютера; не может быть двух пользователей с одинаковым именем пользователя. Существует множество правил для создания правильных имен пользователей, документированных вpasswd(5).
Пароль
С каждой учетной записью связан пароль. Пароль может быть пустым, в этом случае для доступа к системе не нужен пароль.
ID пользователя (User ID, UID)
The UID это номер, традиционно от 0 до 65535, используемый для однозначной идентификации пользователя в системе. Сама система FreeBSD для идентификации пользователей использует UID – любая команда FreeBSD, позволяющая указывать имя пользователя, первым делом преобразует его к UID.
ID группы (Group ID, GID)
GID это номер, традиционно от 0 до 65535, используемый для однозначной идентификации главной группы, к которой принадлежит пользователь. Группы это механизм для контроля доступа к ресурсам на основе GID пользователя вместо его UID. Это может значительно уменьшить размер некоторых файлов настройки. Кроме того, пользователь может быть включен более чем в одну группу.
Класс логина
Классы логинов это расширение к механизму групп, позволяющее системе более гибко управлять различными пользователями.
Время изменения пароля
По умолчанию FreeBSD не принуждает пользователей периодически менять пароли. Можно включить эту функцию для определенных пользователей, заставив некоторых или всех пользователей менять пароли по прошествии определенного времени.
Время истечения действия учетной записи
По умолчанию во FreeBSD время действия учетных записей не ограничено. Если создать учетные записи, продолжительность жизни которых ограничена, например учетные записи для студентов в школе, можно определить время истечения действия учетной записи. После наступления этого времени учетная запись не может использоваться для входа в систему, хотя каталоги и файлы этой учетной записи останутся нетронутыми.
Полное имя пользователя
Имя пользователя является уникальным идентификатором учетной записи во FreeBSD, но недостаточно для сопоставления с реальным именем пользователя. Эта информация может быть добавлена в учетную запись.
Домашний каталог
Домашний каталог это полный путь к каталогу в системе, в котором пользователь начнет работать после входа в систему. По общепринятому соглашению все домашние каталоги пользователей помещаются в /home/username или /usr/home/username. Пользователи хранят личные файлы в домашнем каталоге и в любых подкаталогах, создаваемых внутри домашнего каталога.
Оболочка пользователя
Оболочка необходима пользователям как средство взаимодействия с системой по умолчанию.
Существует три основных типа учетных записей: суперпользователь, системные пользователи, иучетные записи пользователей.
6.1. Учетная запись суперпользователя.
Учетная запись суперпользователя, обычно называемая root, существует в системе изначально для целей системного администрирования, и не должна использоваться для повседневных задач, таких как получение и отправка почты, общее исследование системы или программирование.
Причина в том, что суперпользователь, в отличие от обычных пользователей, может работать без ограничений и неправильное использование учетной записи суперпользователя может привести к полному уничтожению системы. Учетные записи пользователей не способны уничтожит систему вследствие ошибки, поэтому обычно лучше использовать учетные записи обычных пользователей везде, где это возможно, пока не потребуются дополнительные привилегии для какой-то определенной задачи.
6.2. Системные учетные записи.
Системные пользователи предназначены для запуска сервисов, таких как DNS, почта, веб серверы и так далее. Это необходимо по соображениям безопасности; если все сервисы работают от суперпользователя, они могут действовать без ограничений.
Примеры системных пользователей этоdaemon, operator, bind (для Domain Name Service, DNS), news иwww. nobody – это классический непривилегированный системный пользователь. Тем не менее, необходимо помнить, что чем больше сервисов используют nobody, тем больше файлов и процессов ассоциировано с этим пользователем, и
следовательно тем больше прав появляется у этого пользователя.
15
6.3. Учетные записи пользователей.
Учетные записи пользователей в основном означают доступ в систему для обычных людей, и эти учетные записи отделяют пользователя и его рабочую среду, предотвращая повреждение пользователем системы или данных других пользователей, и позволяя пользователям настраивать свою рабочую среду без влияния на других пользователей.
7. Изменение учетных записей.
В среде UNIX существуют различные команды для работы с учетными записями пользователей. Наиболее часто используемые команды приведены в таблице:
Команда |
Краткое описание |
adduser(8) |
Рекомендуемое приложение командной строки для добавления новых пользователей. |
rmuser(8) |
Рекомендуемое приложение командной строки для удаления пользователей. |
chpass(1) |
Гибкий инструмент для изменения информации в базе данных пользователей. |
passwd(1) |
Простой инструмент командной строки для изменения паролей пользователей. |
pw(8) |
Мощный и гибкий инструмент для изменения любой информации, связанной с |
учетными записями пользователей. |
7.1. adduser.
adduser(8) – это простая программа для добавления новых пользователей. Она создает записи в системных файлах passwd и group. Она также создает домашний каталог для нового пользователя, копируя файлы настройки по умолчанию («dotfiles», файлы имя который начинается с символа.) из/usr/share/skel и опционально может отправлять новому пользователю приветственное сообщение.
# adduser Username: jru
Full name: J. Random User
Uid (Leave empty for default): Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh Home directory [/home/jru]:
Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username |
: jru |
Password |
: **** |
Full Name |
: J. Random User |
Uid |
: 1001 |
Class |
: |
Groups |
: jru wheel |
Home |
: /home/jru |
Shell |
: /usr/local/bin/zsh |
Locked |
: no |
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database. Add another user? (yes/no): no
Goodbye!
7.2. rmuser.
Для полного удаления пользователя из системы можно использоватьrmuser(8). Эта программа выполняет следующие действия:
-удаление записи пользователя изcrontab(1) (если она присутствует);
-удаляет задачиat(1), принадлежащие пользователю;
-уничтожает все процессы, принадлежащие пользователю;
-удаляет пользователя из локального файла паролей;
-удаляет домашний каталог пользователя (если он принадлежит пользователю);
-удаляет принадлежащую пользователю входящую почту из/var/mail;
-удаляет все файлы, принадлежащие пользователю, из каталогов с временными файлами, например/tmp;
16
- удаляет имя пользователя из всех групп, которым оно принадлежит, в/etc/group. Если после этого удаления группа остается пустой и имя группы совпадает с именем пользователя, она удаляется; Это необходимо для удаления пользовательских уникальных групп, создаваемых adduser(8).
rmuser(8) не может использоваться для удаления учетной записи суперпользователя, поскольку это почти всегда означает разрушение системы.
По умолчанию используется интерактивный режим, программа пытается убедиться, что вы уверены в своих действиях.
# rmuser jru
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh Is this the entry you wish to remove? y
Remove user's home directory (/home/jru)? y Updating password file, updating databases, done.
Updating group file: trusted (removing group jru -- personal group is empty) done. Removing user's incoming mail file /var/mail/jru: done.
Removing files belonging to jru from /tmp: done. Removing files belonging to jru from /var/tmp: done.
Removing files belonging to jru from /var/tmp/vi.recover: done.
7.3. chpass.
chpass(1) изменяет информацию в базе данных пользователей: пароли, оболочки, персональную информацию. Только системные администраторы с правами суперпользователя могут изменять информацию и пароли других
пользователей с помощьюchpass(1).
При запуске без параметров (кроме опционального имени пользователя), chpass(1) вызывает редактор, содержащий информацию о пользователе. Когда пользователь выходит из редактора, база данных пользователей обновляется этой информацией.
#Changing user database information for jru. Login: jru
Password: * Uid [#]: 1001
Gid [# or name]: 1001 Change [month day year]: Expire [month day year]: Class:
Home directory: /home/jru Shell: /usr/local/bin/zsh Full Name: J. Random User Office Location:
Office Phone:
Home Phone:
Other information:
Обычные пользователи могут изменять лишь небольшую часть этой информации, и только для своей учетной записи.
#Changing user database information for jru. Shell: /usr/local/bin/zsh
Full Name: J. Random User Office Location:
Office Phone:
Home Phone:
Other information:
7.4. passwd.
passwd(1) – это обычный способ изменения собственного пароля пользователя, или пароля другого пользователя суперпользователем.
% passwd
Changing local password for jru. Old password:
New password: Retype new password:
passwd: updating the database...
passwd: done
Изменение пароля другого пользователя суперпользователем
# passwd jru
Changing local password for jru. New password:
17
Retype new password:
passwd: updating the database...
passwd: done
7.5. pw.
pw(8) – это утилита командной строки для создания, удаления, модифицирования и отображения пользователей и групп. Она функционирует как внешний интерфейс к системным файлам пользователей и групп. Уpw(8) очень мощный набор параметров командной строки, что делает это программу подходящей для использования в shell скриптах.
8. Ограничение пользователей.
FreeBSD предоставляет администратору несколько способов ограничения объема занимаемых пользователями системных ресурсов. Существует два вида ограничений: дисковые квоты и другие ограничения ресурсов.
Дисковые квоты ограничивают объем пространства, занимаемого пользователями, это способ быстрой проверки объема без вычисления его каждый раз.
Другие ограничения ресурсов включают способы ограничения использования CPU, памяти и других ресурсов, которые могут потребляться пользователем. Ограничения накладываются с помощью классов учетных записей.
Классы учетных записей определяются в /etc/login.conf. Каждому пользователю присвоен класс (default по умолчанию), и каждому классу присвоен набор характеристик. Характеристика определяется в виде пары имя=значение, где имя – это определенный идентификатор, а значение – это произвольная строка, обрабатываемая в зависимости от имени. Настройка классов и характеристик описана в login.conf(5).
Система, как правило, не читает настройки в /etc/login.conf непосредственно, она обращается к файлу базы данных /etc/login.conf.db для ускорения доступа к данным. Для создания /etc/login.conf.db из /etc/login.conf, необходимо выполнить следующую команду:
# cap_mkdb /etc/login.conf
Ограничения на ресурсы отличаются от обычных характеристик: во-первых, для каждого ограничения существует «мягкое» (текущее) и «жесткое» ограничение. Мягкое ограничение может настраиваться пользователем или приложением, но не может превышать жесткое ограничение. Последнее может быть уменьшено пользователем, но никогда не увеличено. Во-вторых, большинство ограничений ресурсов применяются к процессам определенного пользователя, а не к пользователю вообще.
Список наиболее часто используемых ограничений на ресурсы. coredumpsize
Ограничение на размер файла core, генерируемого программой, по очевидным причинам подчиняющееся другим ограничениям на используемое дисковое пространство (например, filesize, или дисковые квоты).
cputime
Это максимальное количество времени CPU, потребляемого пользователем. Превысившие это время процессы будут уничтожены ядром.
filesize
Это максимальный размер файла, который может обрабатываться пользователем. В отличие отдисковых квот, это ограничение применяется к отдельным файлам, а не ко всему набору принадлежащих пользователю файлов.
maxproc
Это максимальное число процессов, которые могут быть запущены пользователем. В это число включаются и консольные и фоновые процессы.
memorylocked
Это максимальный объем памяти, блокировка которого может быть запрошена процессом. memoryuse
Это максимальный объем памяти, которая может быть занята процессами. Он включает основную память и использование подкачки.
openfiles
Это максимальное количество файлов, которые могут быть открыты процессами. sbsize
Это ограничение потребляемого пользователем объема сетевой памяти, т.е. mbufs. Оно было введено как ответ на старые DoS атаки, при которых создавалось множество сокетов, но обычно может быть использовано и для ограничения сетевых соединений.
stacksize
Это максимальный размер, до которого может вырасти стек процесса.
9. Группы.
Группа это просто список пользователей. Группа идентифицируется по имени и GID (Group ID, идентификатор группы). Во FreeBSD (и большинстве других UNIX-подобных системах) ядро для определения прав процесса использует два фактора: его ID пользователя и список групп, которым он принадлежит.
18
Имена групп связываются с ID групп в файле/etc/group. Это текстовый файл с четырьмя разделенными двоеточием полями. Первое поле это имя группы, второе это зашифрованный пароль, третье это ID группы, а четвертое это разделенный запятыми список членов группы. Этот файл может быть безопасно отредактирован вручную.
Вместо редактирования /etc/group вручную, можно использовать команду pw(8) для добавления и редактирования групп. Например, для добавления группы, называемойteamtwo, и проверки ее существования можно использовать:
#pw groupadd teamtwo
#pw groupshow teamtwo teamtwo:*:1100:
Число1100 это ID группыteamtwo. На данный момент в, teamtwo нет членов, и поэтому она практически бесполезна. Добавление пользователя jru в группуteamtwo.
#pw groupmod teamtwo -M jru
#pw groupshow teamtwo teamtwo:*:1100:jru
Аргумент к параметру -M это разделенный запятыми список пользователей, являющихся членами группы. Пользователь автоматически добавляется системой к списку групп; пользователь не будет показан как член группы при использованииpw(8) groupshow, но эта информация будет показана при использованииid(1) или похожего инструмента. Другими словами, с этим параметром программа pw(8) работает только с файлом /etc/group; она никогда не будет пытаться получить дополнительную информацию из файла/etc/passwd.
#pw groupmod teamtwo -m db
#pw groupshow teamtwo teamtwo:*:1100:jru,db
Аргументом к опции -m является разделенный запятыми список пользователей, добавляемых в группу. В отличие от предыдущего примера, пользователи добавляются в группу, а не замещают имеющийся список пользователей группы.
% id jru
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)
Как видно, jru является членом группjru иteamtwo.
10. Интерпретатор команд.
При работе с FreeBSD, в большинстве случаях для выполнения повседневных задач используется командный интерфейс (так называемая «оболочка», «shell»). Основная задача интерпретатора – принимать вводимые команды и выполнять их. Многие командные интерпретаторы имеют встроенные средства для выполнения повседневной работы, например, операции над файлами и каталогами, редактирование командной строки, командные макросы и переменные окружения. Вместе с FreeBSD поставляется несколько командных интерпретаторов, например, sh, или Bourne Shell, иtcsh, расширенная версия C-shell. Многие другие интерпретаторы доступны из коллекции портов FreeBSD, напримерzsh иbash.
Одна из наиболее часто используемых функций командного интерпретатора – дополнение частичного имени файла до полного. Можно набрать только первые несколько символов имени файла, нажать клавишу табуляции (TAB), и командный интерпретатор автоматически завершит имя. Например, есть два файла, названные foobar и foo.bar. Допустим, необходимо удалить файл foo.bar. Для этого, нужно набрать на клавиатуреrm fo[Tab].[Tab].
На экране будет выведено: rm foo[BEEP].bar.
Здесь [BEEP] – это так называемый консольный сигнал, оповещающий о том, что интерпретатор не в состоянии закончить имя файла, так как по введенным символам невозможно однозначно идентифицировать файл. Например, имена файловfoobar иfoo.bar оба начинаются сfo, но после нажатия TAB можно однозначно дополнить только доfoo. Если же теперь ввести точку (.) и вновь нажать TAB, интерпретатор достроит имя файла целиком.
Дополнительные возможности при работе с интерпретатором дает использование переменных окружения. Переменные окружения это пары переменная = значение, хранящиеся в памяти интерпретатора. Значение переменных окружения может быть прочитано любой программой, запущенной из командного интерпретатора, и часто содержит настройки для многих приложений и утилит. Ниже приведены некоторые наиболее часто встречающиеся переменные окружения и их значения:
Переменная |
Описание |
USER |
Имя текущего пользователя. |
PATH |
Каталоги, разделенные двоеточием, для поиска исполняемых файлов. |
DISPLAY |
Сетевое имя виртуального дисплея X11, доступного для подключения. |
SHELL |
Текущий командный интерпретатор. |
TERM |
Название (тип) терминала. Используется, чтобы узнать возможности терминала. |
TERMCAP |
Список escape-последовательностей для управления различными функциями терминала. |
OSTYPE |
Название (тип) операционной системы. Например, FreeBSD. |
MACHTYPE |
Архитектура машины (процессора). |
EDITOR |
Выбранный пользователем текстовый редактор. |
19
Переменная |
Описание |
PAGER |
Выбранная пользователем утилита просмотра файлов. |
MANPATH |
Каталоги, разделенные двоеточием, для поиска файлов системного справочника. |
Установка значений переменных окружения различна для разных оболочек. Например, в интерпретаторах C-стиля, таких какtcsh иcsh, этоsetenv. В интерпретаторах Bourne, таких какsh иbash, этоexport. Например, чтобы установить или изменить значение переменнойEDITOR к значению/usr/local/bin/emacs в csh или tcsh, необходимо выполнить команду:
%setenv EDITOR /usr/local/bin/emacs
В оболочках Bourne:
%export EDITOR="/usr/local/bin/emacs"
Чтобы получить значение переменной, например, в командной строке, нужно поместить символ $ перед именем переменной. Например, команда echo $TERM выведет значение переменной $TERM.
Командный интерпретатор воспринимает некоторые символы, называемые метасимволами, в качестве управляющих. Один из наиболее часто используемых – символ *, который заменяет любое количество символов в имени файла. Метасимволы используются для поиска файлов по маске, например, команда echo * делает практически тоже самое, что и команда ls, поскольку интерпретатор вызывает команду echo, передавая ей имена всех файлов, попадающих под маску *.
В некоторых ситуациях требуется, чтобы интерпретатор воспринимал метасимволы как обычные, не несущие специальной смысловой нагрузки. Этого можно достичь, поставив перед символом обратную косую черту (\). Например, команда echo $TERM выведет тип терминала, в то же время команда echo \$TERM выведет именно слово $TERM, а не значение переменной $TERM.
11. Текстовые редакторы.
Большинство настроек во FreeBSD производится путем редактирования текстовых файлов. Соответственно, необходимо освоить какой-нибудь текстовый редактор. Вместе с FreeBSD поставляются лишь некоторые из них, гораздо больше редакторов доступно из Коллекции портов.
Самым простым в изучении и использовании, по-видимому, можно назвать ee, что расшифровывается как «easy editor», т.е. «простой редактор». Чтобы начать редактировать какой-либо файл, необходимо набрать в командной строке ee filename, где filename имя редактируемого файла. Например, для редактирования файла /etc/rc.conf, нужно набрать ee /etc/rc.conf. В верхней части экрана находится список основных команд редактора. Символ каретки (^) означает клавишу Ctrl, таким образом, ^e означает комбинацию клавиш Ctrl+e. Чтобы выйти из редактора, необходимо нажать клавишу Esc, затем Enter. Если остались какие-либо не сохраненные данные, то потребуется подтвердить выход, сохранив результат работы или оставив файл без изменения.
В FreeBSD присутствует также более мощный текстовый редактор vi, а редакторы emacs и vim можно найти в коллекции портов (editors/emacs и editors/vim). Эти редакторы более сложны в изучении, но их возможности порой превосходят всякие ожидания.
12. Системный справочник (man).
Пожалуй, самым полным руководством по FreeBSD является системный справочник (man). Практически каждое приложение или утилита имеют соответствующую страницу (часто не одну), описывающую тот или иной аспект работы программы, всевозможные опции и настройки. Для просмотра этих страниц существует команда man:
% man command
Здесь command – это команда, о которой необходимо получить информацию. Например, чтобы узнать побольше о команде ls, необходимо набрать:
% man ls
Содержимое системного справочника для удобства разделено на несколько разделов:
1.Пользовательские команды.
2.Системные вызовы и коды ошибок.
3.Функции стандартных библиотек.
4.Драйверы устройств.
5.Форматы файлов.
6.Развлечения и игры.
7.Дополнительная информация.
8.Команды системного администрирования.
9.Для разработчиков ядра.
В некоторых случаях (не так уж редко), страницы, относящиеся к одной и той же команде, находятся в различных разделах справочника. Например, есть команда chmod и системный вызов chmod(). В этом случае, необходимо явно указать раздел man, в котором нужно искать соответствующую страницу:
% man 1 chmod
20
