500 Мбайт свободного пространства на
Производитель: Corel Corporation
Требования к системе: процессор Pentium или Pentium-совместимый;
24 Мбайт оперативной памяти (рекомендуется 64 Мбайт);
500 Мбайт свободного пространства на жестком диске;
видеоплата VGA PCI с 2-Мбайт ОЗУ; дисковод CD-ROM, манипулятор "мышь".
Corel LINUX. Началось?
Дмитрий Рамодин
Журнал , #02/2000
Итак, Corel выпускает три редакции Corel LINUX: свободно загружаемую из Internet в виде дискового ISO-образа; Standard, стоимостью 59,95 долл. и Deluxe за 89,95 долл. Комплектация каждой разновидности этой ОС показана в таблице.
Corel LINUX основывается на дистрибутиве Debian Linux () с ядром 2.2.12 и использует в качестве графической оболочки самую популярную среду KDE (). По официальным заявлениям Corel, ее новая ОС нацелена на конечных пользователей, работающих дома и в офисах. Но мое чутье подсказывает, что Corel замахнется и на серверы, пробравшись на этот рынок все через тех же самых "настольных" пользователей.
Поддержка самого разнообразного оборудования - конек Linux. Список "железа", совместимого с Corel LINUX, довольно велик. Даже такие новые видеоплаты, как Matrox G400, поддерживаются в полном объеме за счет включения в дистрибутив графической системы XFree86 3.3.5 -последней версии бесплатной системы X Windows.
Кстати, Corel - наверное, единственная из компаний-производителей дистрибутивов Linux, имеющих четкий план действий, не просто впихивает различные утилиты под одну "крышу", но и выстраивает определенную структуру продаваемого ПО (см. схему).
При этом пользователь получает расширения к ОС, включая виртуальную машину Java и среду WINE, электронную документацию, техническую поддержку, исходные тексты, "заплатки" и т. д. Это уже мини-индустрия.
Corel Update
Операционная система должна быть не только хорошей, но и постоянно обновляемой. Кому нужна ОС, в которую нельзя внести "заплатки" от ошибок или добавить новую возможность? Любая коммерческая версия UNIX, да и Linux регулярно обновляется компаниями-разработчиками. В идеале "латание" операционки должно проходить незаметно для пользователя. Поэтому в составе Corel LINUX есть утилита Corel Update, ранее известная как Corel Package Manager. После запуска Corel Update смотрит, какие программы установлены на компьютере, затем ищет по заранее заданным адресам в Internet более свежие версии программ и, если таковые обнаружены, копирует их на компьютер пользователя и инсталлирует (рис. 5).
Рис. 5
Заметим, что Corel Update можно использовать и просто как средство просмотра "хозяйства" вашей системы.
Cтруктура каталогов понятие чисто
Любой пользователь знаком сегодня с понятиями файла и каталога (с точки зрения Unix каталог тот же файл) [1-3]. Группой энтузиастов из сообщества разработчиков программ с открытым кодом была предложена спецификация структуры каталогов для Unix-подобных систем, так называемый стандарт иерархии файловых систем (Filesystem Hierarchy Standard, FHS).
Работа над FHS началась в августе 1993 года с попытки упорядочить структуру файлов и каталогов Linux. Вначале его называли проектом стандартов файловой системы Filesystem Standards Project (FSSTND), а первая версия была выпущена 14 февраля 1994 года. В начале 1995 года была поставлена задача по созданию более общей версии FSSTND, предназначенной не только для Linux, но и для других Unix-подобных систем, в первую очередь BSD 4.4. Учитывая расширение сферы действия стандарта, его переименовали в FHS (www.pathname.com/fhs). Стандарт вобрал положительные качества, присущие BSD и другим системам в части поддержки различных архитектур и учета требований работы в гетерогенных сетях.
Во-первых, учитывалось, что, хотя в Unix-подобных системах структура каталогов представлена в виде единого дерева, отдельные его «ветви» могут располагаться на разных носителях или в разных файловых системах. Размещение файлов на разных носителях позволяет оптимизировать процессы загрузки, последующего функционирования и возможного обновления системы. При этом файловые системы могут физически располагаться на разных компьютерах и быть различными по своей внутренней организации (ext2fs, vfat и т.д.). Во-вторых, любая Unix-система — система сетевая. Поэтому при размещении отдельных файлов в различных частях файловой структуры учитывалось, что некоторые файлы должны быть доступны с других компьютеров в сети, а к другим файлам доступ по сети необходимо ограничить. Группа неразделяемых файлов вычленяется как по соображениям безопасности, так и просто потому, что эти файлы определяют локальную конфигурацию системы и поэтому нужны только на данном компьютере. Выделение группы разделяемых файлов позволяет также экономить общее дисковое пространство. В третьих, существуют файлы, изменять которые может только администратор, и те, которые любой пользователь может менять самостоятельно. К числу статических относятся исполняемые файлы, библиотеки, документация и др. Для рядовых пользователей эти файлы должны быть доступны только на чтение. Знание этих предпосылок помогает понять логику размещения отдельных файлов и каталогов в структуре каталогов, предлагаемой стандартом FHS.
Database
Создание базы данных недоступно с Desktop Manager. Его можно выполнить только через пункты меню File - New - Database (последний - сиротливо внизу, ниже новых писем, html-документов и прочего). После этого (рис. 6) возникает предложение определить название базы, путь к ней, формат (по умолчанию - dBase, доступны также DB2, ODBC, JDBC или текстовый). По заполнении всего необходимого жмем на активизировавшийся OK - и получаем десктоп с иконками форм, запросов, отчетов и таблиц. Каковые, вероятно, могут быть созданы.
Рис. 6. Database
Дальше этого я не стал продвигаться. Потому как полагаю настольные СУБД реликтом прошлой эпохи - всеобщей информатизации, автоматизации и кибернетизации на одном отдельно взятом рабочем месте. А посему заканчиваю свой расказ и перехожу к
Действия
В awk возможны следующие действия:
присваивания выражений;
операторы управления
операторы вывода;
встроенные функции.
Действия с пакетами, которые можно задавать в правилах:
Основное действие с пакетом, если он соответствует условию правила, задается с помощью параметра '-j' (jump to).
Существует шесть специальных действий:
ACCEPT: принять пакет
DENY: уничтожить
REJECT: отвергнуть, т.е. уничтожить и послать квитанцию отправителю в виде ICMP-пакета, если, конечно, отвергаемый пакет сам не был ICMP.
MASQ: замаскарадить пакет - допустимо только в пересылочной цепочке и только если ядро было скомпилировано с поддержкой маскарадинга
REDIRECT: переадресовать пакет на определенный порт локальной машины, независимо от того, куда он был отправлен (прозрачное проксирование). Допустимо только во входной цепочке. Номер порта указывается после ключевого слова REDIRECT.
RETURN: вызывает прекращение дальнейших проверок в цепочке и применение к пакету политики цепочки.
Любое другое действие означает переход к цепочке, определенной пользователем. Пакет начинает проверяться по правилам в указанной цепочке. Если ни одно из них не сработало, то продолжается проверка по правилам в текущей цепочке.
Если действие правила не указано, то даже при соответствии пакета его условиям продолжается проверка следующих правил в цепочке. Такие правила называются учетными (accounting) и используются для учета трафика. Например, чтобы считать трафик от 192.168.1.1, можно использовать правило: ipchains -A input -s 192.168.1.1
и проверять трафик командой ipchains -L -v
Флагом '-l' (log) можно указать, что пакет следует записать в системный журнал. Обычно это применяется для регистрации возможных атак или при отладке сетевых настроек. Не злоупотребляйте регистрацией в системном журнале, а то он начнет быстро распухать..
Изменение Типа Обслуживания (TOS, Type Of Service) задается параметром '-t'. В заголовке IP-пакета есть 4 специальных редко используемых битовых флага, которые могут влиять (а могут и не..) на обслуживание пакета некоторыми маршрутизаторами:
Minimum Delay - минимальная задержка
Maximum Troughput - максимальная пропускная способность
Maximum Reliability - максимальная надежность
Minimum Cost - минимальная цена
Может быть установлен только один из этих флагов. Наиболее часто они применяются так: для telnet'а и управляющего соединения ftp устанавливается флаг Minimum Delay, а для данных ftp - Maximum Throughput. Это делается следующими командами: ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10 ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10 ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08
Флаг '-t' имеет 2 шестнадцатиричных параметра, которые применяются так:
новыйTOS = (старыйTOS AND первый параметр) XOR второй параметр
Для простоты приводится таблица со значениями параметров: Название Типа Обслуживания: Значения параметров: Типичное применение Minimum Delay 0x01 0x10 ftp, telnet Maximum Throughput 0x01 0x08 ftp-data Maximum Reliability 0x01 0x04 snmp Minimum Cost 0x01 0x02 nntp
Делаем собственное PAM-приложение
Давайте-ка теперь посмотрим как видят систему PAM-приложения. Нудную и скучную документацию вы сами потом прочитаете (или я все-таки сделаю это когда-нибудь сам), а сейчас обратимся к практике.
Пример2: избавляемся от SUID-программ.
Прочитали название? Страшно? Все в порядке, речь в этом разделе не пойдет о чем-то необычном. Просто несколько теоретических размышлений и пример их реализации.
Одним из основных архитектурных недостатков UNIX с точки зрения защищенности является наличие SUID-программ, то есть способность процесса изменять одного владельца на другого после запуска. По-умолчанию, процесс приобретает права того пользователя, который его запустил. Исключение - программы в правах которых выставлен бит SUID. После запуска такой процесс приобратает права не того пользователя,который запустил его, а права владельца данного файла.
Зачем это нужно. Дело в том, что иногда для доступа к тем или иным системным данным прав пользователя недостаточно. Так, например, программе passwd необходимо иметь права root для доступа к файлам /etc/passwd и /etc/shadow. Но будучи запущенной пользователем (ведь может же он поменять пароль самому себе), она не в состоянии это сделать. Тут то и происходит фокус со сменой владельца. Запускаясь, процесс passwd получает права своего владельца (root) и теперь может спокойно работать с ранее запретными данными. Получается, что пользователь как-бы не получает прав администратора, а программа спокойно с ними работает. Все гениально, просто и безопасно... Стоп, вот тут мы и не правы. Большинство атак, направленных на "переполнение буфера" как раз и пользуются этой возможностью процессов расширять свои возможности. Ну и что, что права получает только процесс, если его надлежащим образом накачать, то он запустит нам оболочку. Последняя унаследует права процесса - права администратора. Была у тебя оболочка с правами пользователя - стала от имени администратора.
Что же делать. Давайте обратимся к опыту других операционных систем, не наступивших на грабли UNIX.
В Windows NT нет SUID-программ. А что же делать, если кому-то нужно, скажем, поменять себе пароль? Очень просто. Есть программа пользователя, желающая поменять пароль и работающая с правами оного. А есть сервер, работающий с правами администратора и готовый помочь всякому правильному клиенту. Вот пользовательский процесс делает запрос, сервер проверяет тот ли это пользователь и радостно выполняет поручение. При таком решении неизбежно возникают две проблемы: Клиент-серверное взаимодействие должно быть грамотно написано (что бы не напороться на грабли несанкционированного превишения полномочий) и падает производительность системы на всех подобных операциях (в Windows это решается применением кеширования запросов). Но с другой стороны серверов будет поменьше чем SUID-программ (следовательно, вероятность допустить ошибку меньше) и при хорошем проектировании системы повышение прав потребуется не столь часто.
А что если и в UNIX попытаться сделать , например, клиент-серверную авторизацию. Я понимаю, что для аккуратного решения этой проблемы надо очень крепко подумать и возможно даже изменить архитектуру, но разве это не интересно попробовать изменить как-то свою ОС?
Сразу оговорюсь, что в примерах не описан процесс аутентификации клиента. Понятно, что он должен быть достаточно хитроумным, желательно с применением криптографии. Кроме того, сервер обрабатывает только один запрос. В идеале он должен или постоянно висеть в системе как daemon, или вызываться через какой-нибудь wrapper. Все программы ниже будут выглядить максимально упрощенными. Лучше понимание, чем уважение без оного.
Итак, сказано-сделано. Пишем клиент (собственно passwd который будет вызывать пользователь).
//Всякие полезные включения. Право не знаю все ли они нужны?.. #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <fcntl.h> #include <netdb.h>
#define PORTNUM 1500
//Это порт по умолчанию, на котором расположится сервер в ожидании запросов. //А также адрес по умолчанию-локальный.
#define DEFAULT_ADDR "0.0.0.0"
main(int argc, char *argv[])
//единственная и главная функция.
{ int s; int pid; int i,j; struct sockaddr_in serv_addr; struct hostent *hp; char username[80],hostname[80]=DEFAULT_ADDR; char *tmp=malloc(80);
if (argc<2){ printf("Usage: passwdc username host\n"); exit(1); }
//Работать будем или с локальной машиной или с удаленной (а почему бы и нет, если силы позволяют, только аутентификация //должна быть очень продуманной)
strncpy(username,argv[1],80); printf("Changing password for user:%s \n",username);
if (argc>2) { strncpy(hostname,argv[2],80); }
printf("on host:%s\n",hostname);
if((hp=gethostbyname(hostname))==0) { perror("gethostbyname()"); exit(3); }
bzero(&serv_addr, sizeof(serv_addr)); bcopy(hp->h_addr,&serv_addr.sin_addr,hp->h_length);
serv_addr.sin_family=hp->h_addrtype; serv_addr.sin_port=htons(PORTNUM);
if((s=socket(AF_INET, SOCK_STREAM, 0))==-1){ perror("socket()"); exit(1); }
if (connect(s, (struct sockaddr_in *) &serv_addr, sizeof(serv_addr))==-1){ perror("connect()"); }
//где-то тут после успешного соединения клиент должен убедить сервер, что он //действительно тот за кого себя выдает и что работает именно от имени того пользователя чей пароль так хочется изменить.
//посылаем имя пользователя
send(s, username, sizeof(username),0);
//считываем с локальной консоли и отсылаем пароль пользователя //Тонкий момент: или соединение должно быть шифорванным или пароль посылается уже после применения к нему хеш-функции.
tmp=getpass("New UNIX password:"); strncpy(username,tmp); send(s, username, sizeof(username),0);
//После этого работает уже сервер. Нас интересуют только результаты //Возможно более сложный обмен сообщениями по определенному протоколу. Например если пароль оказался слишком прост, то надо //Ввести новый.
if (recv(s, username, sizeof(username), 0)<0){ perror("recv()"); }
printf("Result:%s\n",username); close(s);
printf("Client done...\n"); }
Ну вот и все. Все просто. Но так и должно быть. пример-то учебный. Для реального воплощения идеи надо не мало потрудиться. Важное замечание. Клиент нигде не использует никаких функций, связанных с аутентификацией в ОС - то чего мы и добивались.
А вот с сервером дела обстоят несколько хуже. Он использует библиотеку PAM, хотя может производить все изменения и вручную. Но только зачем нам изобретать велосипед?
//Масса полезных включений
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #include <netdb.h>
#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h>
#include <unistd.h> #include <sys/types.h>
#include <security/pam_appl.h> #include <security/pam_misc.h>
#define USERNAME "stas" #define PASSWORD "1234" #define PORTNUM 1500
// А это нужно для PAM. Так описывается функция диалога между программой и пользователем. // Путем этого диалога определяется что и как спрашивать. Диалог задает программа. Это весьма разумно, ибо с РАМ могут // работать как консольные программы, так и программы с графическим интерфейсом.
static struct pam_conv conv = { misc_conv, NULL };
//Тут мы сохраним все самое дорогое char username[80] = USERNAME; /* имя пользователя */ char newPassword[80] = PASSWORD; /* его пароль*/ int s, ns; /*идентификаторы сокетов*/ struct sockaddr_in serv_addr, clnt_addr; /*структуры описатели адресов*/
//Итак, сначала инициализируем серверную часть
server_init() { int pid; int nport; int nbytes; int fout; int addrlen;
struct hostent *hp;
char hname[80];
nport=PORTNUM; nport=htons((u_short)nport);
if((s=socket(AF_INET, SOCK_STREAM, 0))==-1){ perror("socket()"); exit(1); }
bzero(&serv_addr, sizeof(serv_addr)); serv_addr.sin_family=AF_INET; serv_addr.sin_addr.s_addr=INADDR_ANY; serv_addr.sin_port=nport;
if( bind(s, (struct sockaddr_in *)&serv_addr, sizeof(serv_addr))==-1){ perror("bind()"); exit(1); }
if(listen(s,5)==-1){ perror("listen()"); exit(1); }
printf("server ready:%s\n", inet_ntoa(serv_addr.sin_addr));
}
server_read() {
/*это в последствии и должно стать рабочим циклом при обмене с клиентом*/
int addrlen; bzero(&clnt_addr,sizeof(clnt_addr)); addrlen=sizeof(clnt_addr);
if((ns=accept(s, (struct sockaddr_in *)&clnt_addr, &addrlen))==-1){ perror("accept()"); exit(1); }
printf("Client: %s\n", inet_ntoa(clnt_addr.sin_addr));
/*Вот и пожаловал клиент*/ close(s); printf("Receiving data ...\n"); recv(ns, username, sizeof(username), 0); recv(ns, newPassword, sizeof(newPassword), 0); //Приняли от него имя пользователя и пароль }
//По окончании всей работы не забудьте выключить свет и сообщить клиенту результат //обработки server_done() { printf("Sending data...\n"); send(ns, username, sizeof(username), 0); close(ns); printf("Server done...\n"); }
// А это главная и хитрейшая функция // Именно она олицетворяет собой диалог человека с машиной. Только у нас она вырожденная // Просто копирует в формируемый специальный ответ имеющиесяф данные. // А вообще-то она может помимо всего этого // выводить всяуие радостные окна и приветствия
static int stdin_conv(int num_msg, const struct pam_message **msgm, struct pam_response **response, void *appdata_ptr) { struct pam_response *reply; int count;
if (num_msg <= 0) return PAM_CONV_ERR;
reply = (struct pam_response *) calloc(num_msg, sizeof(struct pam_response)); if (reply == NULL) { return PAM_CONV_ERR; }
for (count=0; count < num_msg; ++count) { reply[count].resp_retcode = 0; reply[count].resp = strdup(appdata_ptr); }
*response = reply; reply = NULL;
return PAM_SUCCESS; }
int main(int argc, char * const argv[]) // Последняя, но не по значимости функция
{ int retval; pam_handle_t *pamh=NULL;
int i; /*прочтем, то что нам хотел бы сказать клиент*/
server_init(); server_read();
/*И не долго думая установим новые значения*/ / Важно: PAM теперь работает совсем по другому. //Так как раньше он не позволил бы простому пользователю ввести себе //слабый пароль, а теперь нет проблем - администратору это можно.
conv.conv = stdin_conv; conv.appdata_ptr = strdup(newPassword); // Мы только что заполнили структуры данных, необзодимые для диалога. // А именно Добавили пароль и указатель на функцию диалога.
// Запускаем PAM. Говорим, что нужно читать файл /etc/pam.d/passwd, // указываем имя пользователя и функция для ведения // диалога.
retval = pam_start("passwd", username, &conv, &pamh);
while (retval == PAM_SUCCESS) { retval = pam_chauthtok(pamh, 0); // Вот именно здесь все и происходит. PAM вызывает функцию-диалог, // анализирует ответ в месте с модулями заданными в // /etc/pam.d/passwd и изменяет пароль, если получается.
if (retval != PAM_SUCCESS) break; /* all done */ retval = pam_end(pamh, PAM_SUCCESS); if (retval != PAM_SUCCESS) break; /* quit gracefully */ sprintf(username, "all right!...\n"); //Поработали и хватит. server_done(); exit(0); }
if (retval != PAM_SUCCESS) sprintf(username, "passwd: %s\n", pam_strerror(pamh, retval));
if (pamh != NULL) { (void) pam_end(pamh,PAM_SUCCESS); pamh = NULL; }
// Пусть нам сегодня не повезло, но клиента тоже надо огорчить. server_done(); exit(1); }
Вот и весь сервер. Функций аутентификации заметно прибавилось, хотя они и скрылись за тремя могучими буквами PAM. Итак, повторим увиденное.
Для приложения важно запустить PAM (pam_start) и получить некоторый дескриптор. Затем определиться с диалоговой функцией. Сам PAM она не волнует, а волнует только выдаваемый ею ответ в специальной форме. Сделав это, запускаем требуюмую функцию: аутентификации (pam_authentificate), изменения пользовательских данных (pam_chauthtok) или какую еще. Наконец, торжественно завершаем концерт функцией pam_end. По-моему все просто и понятно, а теперь вперед к компьютеру...
Делаем собственный PAM-модуль
После теории посмотрим в глубь PAM. Попытаемся разобраться как же оно работает.
Пример1: Новый вход в систему.
Вы уже наверно во сне видите изрядно доставшие строки
login:***
Password:*******
Эта схема придуманная много лет назад продолжает служить и сейчас. Но не паролем единым жив человек. Давайте сделаем что-то новенькое, необычное. Будет и самому интересно и вредителей введет в заблуждение, ибо такого не будет не на одной другой машине.
До PAM'а нам пришлось бы переписывать весь login, а теперь мы просто сделаем новый модуль, соберем его как библиотеку и припишем в сценарий аутентификации /etc/pam.d/login. Модуль будет называться просто pam_test.
Но сначала о том, что же мы будем делать. Имеется следующая интересная схема аутентификации: система выдает пользователю несколько случайных чисел. Пользователь берет определенные из них, поставляет в ТОЛЬКО ЕМУ известный многочлен, например,
(дата)*x*x+3*x-(текущий час)*y+z
и вводит вместо пароля ответ. Компьютер тоже считает по этому алгоритму и если ответ правильный, пускает в систему.
Схема идеальная: повышается математический уровень сотрудников, пароль вводится всегда другой, закономерность уловить по косвенным данным практически невозможно (коэффициенты у многочлена также меняются от времени, возможных многочленов тьма).
Есть конечно очевилные недостатки: тяжело считать, можно подсмотреть как пользователь считает на бумажке, сложны вопросы хранения многочленов ... Но мы не будем столь огорчаться, ведь мы прежде всего учимся, не так ли.
Как вы прочитали ранее модули различаются по классам. Наш будет класса AUTH. То есть отвечать за аутентификацию.
Это его текст.
/*Это простейший модуль PAM*/
// Включаем необходимые заголовочные файлы.
#include <security/pam_modules.h> #include <stdarg.h> #include <time.h>
//Это определит тип нашего модуля
#define PAM_SM_AUTH #define MAX_V 30
// Самая интересная функция. // Именно она реализует наш неповторимый алгоритм аутентификации. // Подобные внешние функции должны существовать во всех модулях данного класса.
PAM_EXTERN int pam_sm_authenticate(pam_handle_t * pamh, int flags ,int argc, const char **argv) { unsigned int ctrl; int retval; const char *name, *p; char *right; /*special variables*/ long x1,x2,x3,x4,y;
time_t mytime; struct tm *mytm;
/*готовимся к аутентификации*/ mytime=time(0); mytm=localtime(&mytime);
srandom(mytime); x1=random()%MAX_V; x2=random()%MAX_V; x3=random()%MAX_V; x4=random()%MAX_V;
//завели несколько случайных величин, а заодно узнали и время.
/* получим имя пользователя */
// Получаем имя пользователя // Вся мудрость PAM в том, что приглашение "login: " появится если имя еще не известно, // иначе мы сразу получим ответ, сгенерированный предыдущими модулями.
retval = pam_get_user(pamh, &name, "login: ");
/*получим пароль используя диалог*/
{ struct pam_conv *conv; struct pam_message *pmsg[3],msg[3]; struct pam_response *response;
retval = pam_get_item( pamh, PAM_CONV, (const void **) &conv ) ;
// Сами мы не знаем как будет осущестляться диалог, это забота программы (в нашем случае этим займется login). Мы // лишь только укажем параметры, вид приглашения и более того, можем задать сразу несколько приглашений, если надо // получить сразу несколько ответов
pmsg[0] = &msg[0]; msg[0].msg_style = PAM_PROMPT_ECHO_OFF; msg[0].msg=malloc(100); snprintf(msg[0].msg,60,"Second Password:%d:%d:%d:%d:",x1,x2,x3,x4);
retval = conv->conv(1, ( const struct pam_message ** ) pmsg , &response, conv->appdata_ptr); // Нам дали указатель на диалоговую функцию. Ее и запускаем. /*просчитаем правильный ответ*/ y=2*x1*mytm->tm_mday+x3*mytm->tm_hour; right=malloc(100); snprintf(right,20,"%d",y); // Сравним с ответом пользователя. Ответ формируется диалоговой функцией в специальном формате. if (!(strcmp(right,response->resp))){ return PAM_SUCCESS; }else{ return PAM_AUTH_ERR; } }/*диалог*/ return PAM_SUCCESS; // Нашим результатом будет да или нет. Как прервать программу разберется основной модуль PAM. }
/* * The only thing _pam_set_credentials_unix() does is initialization of * UNIX group IDs. * * Well, everybody but me on linux- pam is convinced that it should not * initialize group IDs, so I am not doing it but don't say that I haven't * warned you. -- AOY * Перевожу: Единственная вещь которую делает pam_set_cred это инициализация Идентификаторов групп... короче в данном случае это нам совершенно не нужно */
PAM_EXTERN int pam_sm_setcred(pam_handle_t * pamh, int flags ,int argc, const char **argv) { unsigned int ctrl; int retval;
retval = PAM_SUCCESS; //Чтобы никто не заметил, что мы ничего не делаем ответим, что все в порядке return retval; }
// Это определение необходимо для статической линковки модулей PAM в приложениях. #ifdef PAM_STATIC struct pam_module _pam_unix_auth_modstruct = { "pam_test", pam_sm_authenticate, pam_sm_setcred, NULL, NULL, NULL, NULL, }; #endif
Вот и все. Просто. Дело в том, что мы тут описываем процедуру аутентификации и только ее - положительный эффект от грамотного разделения обязанностей. Повторим все основные этапы. В модуле, понятное дело ,должны существовать экспортируемые функции. В нашем случае это pam_sm_authenticate и pam_sm_setcred. Для каждого класса модулей свой набор функций. Дальше, внутри функций находится основной алгоритм принятия решения ответом является только "да" или "нет". Если же для принятия столь ответственного решения необходимо узнать дополнительную информацию от пользователя, то можно узнать указатель на диалоговую функцию программы.
Работа с другими классами модулей абсолютно идентична. Так что попробуйте сделать еще что-нибудь свое.
DG/UX B2 Security Option
Перевод материала с , предоставленный компанией .
Сеть Internet и тот потенциальный рынок, который она предоставляет использующим ее организациям, чрезвычайно велики и расширяются каждый день. Сегодня в Internet насчитывается около 10 миллионов пользователей WWW (к 2000 году количество пользователей составит 170 миллионов) и 30000 WWW-сайтов (их число удваивается каждые два месяца). По мере расширения Internet, принципиально важными становятся характеристики сетевого доступа, а также безопасности пользователей.
ДИСТРИБУТИВЫ
Очень часто операционные системы отождествляют с комплектами дистрибутивов ОС, например входящее в состав дистрибутива Windows NT программное обеспечение считают составной частью ОС. На самом деле это не совсем правильно. В случае коммерческих операционных систем такая трактовка хоть и неверна, но не приводит к большим проблемам. Однако относительно дистрибутивов некоммерческих ОС этого сказать нельзя: составители дистрибутивов обычно не имеют никакого отношения к разработке ОС и не являются авторами программ, включенных в дистрибутив.
Как написано в учебниках по ОС, "операционной системой называют совокупность программных средств, обеспечивающих управление аппаратными ресурсами вычислительной системы и взаимодействие программных процессов с аппаратурой, другими процессами и пользователями". По большому счету, операционная система - это ядро плюс небольшое число обслуживающих его работу программ.
Когда речь идет о какой-то конкретной версии операционной системы Linux, то фактически подразумевается версия ядра этой системы. Ядро Linux разрабатывается централизованно, под руководством ее отца-основателя Линуса Торвальдса. В принципе, поскольку ядро для Linux поставляется в исходных кодах, модернизировать его не возбраняется никому, но официальные версии выпускаются Торвальдсом.
Совсем другая ситуация с дистрибуцией Linux. Каждый дистрибьютор на основе ядра волен составлять свой комплект программ, большая часть которых - это бесплатные или условно-бесплатные приложения. Нередко для удобства работы и администрирования системы дистрибьюторы добавляют свои собственные разработки. Ряд дистрибьюторов включает в пакеты коммерческие приложения. Кроме того, дистрибьюторы отвечают за разработку процедуры инсталляции системы и начальной загрузки, комплектацию документации и т. д. В результате дистрибутивы имеют настолько значительные отличия, что порой трудно говорить об единой системе. Самыми известными дистрибутивами Linux являются RedHat Linux, Caldera OpenLinux, Debian GNU/Linux, Slackware Linux, S.u.S.E., Linux Mandrake.
На главном сервере разработчиков Linux () можно найти сведения о двух десятках дистрибьюторов, но там перечислены только крупные компании. На самом деле число дистрибьюторов гораздо больше, во многих странах, в том числе и в России, имеются национальные дистрибьюторы. Правда, все они используют в качестве основы один из известных дистрибутивов.
Многие ведущие дистрибьюторы поставляют свои системы на коммерческой основе, причем цена дистрибутива колеблется от 40 до 200 и более долларов (цена зависит не только и не столько от размера дистрибутива, сколько от наличия коммерческих приложений). Вместе с тем практически все дистрибьюторы имеют серверы, с которых любой желающий может переписать дистрибутив или поставить ОС удаленно.
Чтобы разговор о Linux был более предметным, для тестирования мы выбрали самый популярный дистрибутив - RedHat Linux, поставляемый компанией RedHat Software. По статистике ему принадлежит более 50% рынка. В начале октября 1999 года компания выпустила версию RedHat Linux 6.1, которую мы и решили протестировать.
Также нам захотелось присмотреться и к хиту сезона - Linux Mandrake, тем более что за свою недолгую историю он уже успел завоевать признание многих поклонников и получить самые престижные награды сообщества Linux. На самом деле Mandrake является клоном RedHat, предоставляющим более удобные средства для работы и администрирования. Для тестирования мы выбрали версию Linux Mandrake 6.1, появившуюся в начале октября 1999 г.
Дистрибуцией FreeBSD, в отличие от Linux, занимается фактически только одна организация - Walnut Creek (). Если быть абсолютно точным, дистрибуцией занимается несколько компаний, поскольку FreeBSD является некоммерческой ОС, поставляемой в исходных кодах. Поэтому любая организация, группа людей или отдельные лица могут изготавливать и распространять дистрибутивы FreeBSD, но погоду на этом рынке делает Walnut Creek. Для тестирования был взят самый последний дистрибутив - FreeBSD 3.3, вышедший в сентябре 1999 года.
Выбор операционной системы и даже отдельного дистрибутива - это вопрос скорее даже не вкуса, а религии.
Сторонники различных ОС ведут между собой локальные и глобальные войны, где наряду с легким оружием (наподобие "мне нравится это и не нравится то") применяется и тяжелая артиллерия (результаты тестов и ссылки на корифеев информатизации). Даже среди поклонников Linux периодически возникают ожесточенные споры, какой дистрибутив лучше. Одни отдают предпочтение RedHat, другие - Slackware. Нередко нелюбовь объясняется лишь элементарным незнанием конкурентов или предвзятым к ним отношением. Одной из главных причин выбора дистрибутивов RedHat, Mandrake и FreeBSD было то, что я с ними хорошо знаком, более того, они активно используются в издательстве "Открытые системы" для предоставления сетевых сервисов.
Мне крайне не хочется ввязываться в "религиозные" войны, однако, высказывая то или иное суждение об ОС, любой человек попадет под шквал уничижительной критики. Но это неизбежное следствие любой попытки описания или сравнительного анализа систем.
Первая проблема, с которой мы столкнулись, - это где взять дистрибутивы. У нас имелись дистрибутивы RedHat Linux 6.0, Mandrake 6.0 и FreeBSD 3.0, но хотелось проверить в работе самые последние версии.
На первый взгляд самым простым и дешевым способом получения дистрибутивов является их покупка на радиорынке. Я специально посетил два московских радиорынка: "Митинский" и "Царицынский". Сплошной обман - так можно охарактеризовать работу распространителей дистрибутивов. Лицензия GNU (точнее, ее своеобразная интерпретация) может сыграть с пользователями злую шутку. На лотках можно увидеть RedHat 6.01, RedHat 6.02, RedHat 6.1, RedHat 6.2, RedHat 6.5 и т. д. Только номера версий - не более, чем надувательство. Все они на самом деле были дистрибутивами RedHat Linux 6.0, иногда дополненными не очень существенными программками. Венцом "самопального" творения оказалась коробка с надписью "Дистрибутив RedHat 6.1" - на поверку же это оказался всего лишь RedHat 5.2. Наживы ради распространители готовы "нарисовать" на коробке любое число.
Я уже не говорю о том, что, в отличие от настоящего дистрибутива, включающего от двух до четырех и более CD-ROM, "пиратский" дистрибутив состоит лишь из одного CD-ROM. Между прочим, рынок довольно оперативно реагирует на изменение интереса к различным дистрибутивам Linux. Если год назад без труда можно было найти Yggdrasil Linux, TurboLinux, Caldera OpenLinux и другие, то сейчас в основном торгуют RedHat Linux и Mandrake.
Истратив изрядное количество денег на покупку последних "дистрибутивов", мне пришлось оставить эту затею. В этой связи покупка дистрибутивов у солидных распространителей представлялась более привлекательной альтернативой. Например, дистрибутивы некоммерческих UNIX можно заказать на сервере . Однако, как выяснилось, новые версии местных дистрибьюторов выходят с неприемлемой задержкой, и на момент написания статьи дистрибутивы RedHat 6.1, Mandrake 6.1 и FreeBSD 3.3 у них отсутствовали.
В конце концов, дистрибутивы пришлось переписывать по Internet, затратив на это уйму времени. Кстати, дистрибьюторы значительно облегчили процесс получения дистрибутивов: сейчас они в обязательном порядке размещают образы (image) CD-ROM на серверах. Их остается только скачать и нарезать записываемый компакт-диск.
ДОКУМЕНТАЦИЯ
Документация играет исключительно важную роль при освоении и эксплуатации операционной системы и комплекта приложений. Неспроста качеству документации уделяется большое внимание при сравнительном анализе сетевых операционных систем. Особенно это справедливо для мощной, но вместе с тем сложной системы, каковой является UNIX.
В некоммерческих UNIX документации очень много, и представлена она в самых различных форматах: страницы man, HOWTO, FAQ, PDF, Info, HTML, текстовые документы и т. д. Вместе с тем какая-либо система в организации и размещении документов отсутствует напрочь. Документы по отдельным продуктам находятся в самых разных местах, порой совершенно неожиданных, в том числе и непосредственно в исходных кодах или файлах конфигурации программ. При освоении того или иного приложения много времени уходит на один только поиск документации.
За редким исключением документацию составляют сами разработчики, притом, судя по всему, ее никто не редактирует. Поэтому часто случается так, что авторы документов начинают разглагольствовать про отдельные особенности программы, по несколько раз повторяя одно и то же, в то время как описание важных компонентов оказывается скомканным или поверхностным. Руководящие документы неравноценны между собой. Некоторые продукты имеют прекрасную документацию, тогда как другие, мягко выражаясь, не очень, и в результате программу приходится осваивать "методом тыка".
Часть документов просто-напросто устарела и не имеет никакого отношения к текущим версиям дистрибутива. Характерным примером может служить документ Cyrillic-HOWTO, датированный апрелем 1998 г. и объясняющий порядок русификации Linux; этот документ способен только ввести пользователя в заблуждение.
В некоммерческих UNIX возможность поиска по всему комплекту документации отсутствует, что также не добавляет ему привлекательности.
Невысокое качество документации является изначальной и неизбежной чертой некоммерческих UNIX, поскольку продукты (и документацию) для них пишут совершенно разные люди, и централизовать этот процесс нет никакой возможности. Вместе с тем стоит отметить, что подготовленные непосредственно дистрибьюторами руководства по инсталляции и начальной настройке системы написаны очень толково.
По качеству документации некоммерческие UNIX серьезно уступают своим коммерческим конкурентам, хотя, как мне кажется, документация в Linux и FreeBSD гораздо полезнее, чем в Windows NT.
Но, как говорил Дик Брандон, документация подобна сексу: просто великолепно, когда она хороша; но если даже она несовершенна, то это все же лучше, чем ничего.
Corel LINUX включает в себя документацию в формате HTML. Содержание не очень глубокое, но информации с лихвой хватит для обычного пользователя и выполнения основных административных задач. По умолчанию в качестве программы просмотра подсказки используется браузер Netscape Navigator 4.7, также поставляемый вместе с Corel LINUX. В коммерческие версии ОС планируется включать и печатную документацию.
Дополнительные требования для Linux
Отдельный раздел стандарта FHS содержит требования и рекомендации, которые относятся только к Linux.
В Linux-системах для ядра рекомендуется использовать названия vmlinux или vmlinuz, которые используются в последних версиях исходных кодов ядра Linux. Файл setserial должен размещаться в каталоге /bin. Все устройства и специальные файлы в /dev должны соответствовать документу Linux Allocated Devices, который поставляется в составе исходных кодов ядра. Файл lilo.conf должен размещаться в каталоге /etc. Поскольку файловая система proc является фактически стандартным для Linux методом обработки информации о системе и процессах, настоятельно рекомендуется использовать proc для хранения и получения информации о процессах, а также информации о ядре и памяти. В Linux-системах следующие дополнительные файлы размещаются в /sbin - команды для управления файловой системой ext2fs (badblocks, dumpe2fs, e2fsck, mke2fs, mklost+found, tune2fs); программа установки загрузчика системы lilo; неизменяемые исполняемые файлы ldconfig, sln, ssync; программы ctrlaltdel, kbdrate. Если в системе установлены компиляторы языков Cи или C++, и система не основана на glibc, должны быть созданы следующие символические ссылки:
/usr/include/asm -> /usr/src/linux/include/asm-<arch>
/usr/include/linux -> /usr/src/linux/include/linux
Для систем, основанных на версиях библиотеки libc, предшествующих glibc, исходные коды ядра Linux должны быть размещены в /usr/src/linux. Если установлен компилятор Cи или C++, а полная версия исходных кодов ядра не установлена, то подключаемые файлы из исходных кодов ядра должны размещаться в следующих каталогах:
/usr/src/linux/include/asm-<arch>
/usr/src/linux/include/linux
где <arch> - название архитектуры системы (например, i386).
/usr/src/linux может быть символической ссылкой на дерево каталогов с исходными кодами ядра. Каталог /var/spool/cron содержит переменные данные для программ-демонов cron и at.
***
Поскольку структура каталогов к реальным механизмам работы с файлами отношения не имеет, изначально никаких особых требований к структуре логического дерева каталогов со стороны операционной системы не предъявляется, поэтому каждая ОС могла бы строить это дерево по-своему.
Легко понять, что это привело бы к несовместимости.
Принять решение о том, какие программы разместить в каталогах «sbin», довольно просто: если обычный пользователь когда-либо запускает программу, она должна размещаться в одном из каталогов «bin». Даже такие файлы, которые пользователи запускают очень редко и только в особых случаях, должны, тем не менее, быть расположены в /usr/bin.
Второй по важности раздел файловой системы каталог /usr содержит разделяемые данные, предназначенные только для чтения. Это означает, что он может быть доступен с различных FHS-совместимых хостов без права записи в него. Любая информация, которая специфична для конкретного хоста или может изменяться со временем, должна записываться в другое место. Программные пакеты не должны создавать подкаталоги непосредственно в каталоге /usr. Исключение сделано для X Window в силу сложившихся традиций.
В тексте стандарта FHS мало рекомендаций о том, как разместить каталоги в различных файловых системах. И относятся они в основном к корневой файловой системе. В соответствии со стандартом содержимое этой файловой системы должно быть достаточным для того, чтобы обеспечить загрузку операционной системы, а также восстановление при возникновении различных проблем и сбоев.
document.write('');
|
<
This Web server launched on February 24, 1997 Copyright © 1997-2000 CIT, © 2001-2009 |
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. |
Ищите оборудование ? Заходите на www.lincolnelectric.info. |
Доступ к объектам системы
Аудит доступа к объектам включает в себя всего три события, однако он очень важен, поскольку позволяет отслеживать обращения к любым объектам, включая каталоги, файлы, принтеры и ключи реестра. Для использования перечисленных возможностей необходимо включить опцию регистрации доступа к объектам в меню настройки аудита системы, а также указать все объекты, доступ к которым требуется регистрировать. Список регистрируемых действий для объекта очень напоминает список прав доступа к этому объекту (ACL). В таком списке указаны пользователи и их действия, подлежащие регистрации.
Аудит доступа к объектам ведется в журнале событий, а не в журнале транзакций. Поэтому Windows NT не фиксирует, что именно сделал пользователь с объектом, а указывает только тип доступа к данному объекту. Так, например, можно проследить, что пользователь Иванов открыл файл Зарплата.xls для чтения, записи, выполнения и удаления, однако совершенно невозможно выяснить, внес ли он какие-то изменения, а если да, то какие именно. К тому же при аудите доступа к объектам в журнал может быть записано неоправданно много событий. Так, при активизации двойным щелчком текстового файла из программы Windows Explorer происходит запуск программы WordPad. При этом фиксируется более 20 событий, связанных с доступом к данному файлу и к каталогу, где он находится.
Аудит объектов обычно используется применительно к обычным приложениям, которые работают с отдельными файлами, например к приложениям из комплекта Microsoft Office. Специальные клиент-серверные приложения, такие, как SAP, работают с таблицами, расположенными в нескольких больших файлах базы данных SQL Server. Аудит таких файлов обычно сводится к записи одного события при запуске информационной службы и одного - при ее остановке. При этом не остается сведений о том, какой пользователь выполнял те или иные транзакции или в каких таблицах он менял данные. Эту информацию могут сохранять только сами приложения. Зато аудит таких монолитных файлов помогает выяснить, не пытался ли кто-то заменить файлы базы данных в тот момент, когда SQL Server был остановлен.
Это вполне возможно, а перезапущенная прикладная служба не способна заметить подмену.
РИСУНОК 2. Событие номер 560.
Основные два события аудита доступа к объектам: object opened и handle closed. Первое фиксирует открытие объекта (номер 560) , а второе - его закрытие (событие 562). Это взаимодополняющие друг друга события, подобные событиям входа и выхода из системы. Успешное событие номер 560 (см. Рисунок 2) записывает информацию об открытом объекте, а также имя пользователя и название приложения, которое воспользовалось объектом, тип доступа и дескриптор Handle ID.
Handle ID является уникальным кодом для контроля операционной системы за каждым объектом. Он напоминает описанный выше номер сессии пользователя. Найдя пару событий открытия и закрытия (560 и 562) с одним и тем же значением Handle ID, можно выяснить время работы пользователя с данным объектом. Вместе с этим дескриптором событие номер 560 записывает и номер сессии пользователя (см. Рисунок 2), что позволяет выяснить, в какой именно сессии тот обращался к объекту.
События хранят информацию о двух пользователях - об основном и о клиенте. При открытии файла на локальном компьютере с помощью обычного приложения, такого, как Microsoft Word, существенна только информация об основном пользователе. Однако при доступе к объекту из клиент-серверных приложений, которые разграничивают доступ к данным на основе базы пользователей системы, фиксируются оба типа пользователей: основной - соответствует учетной записи клиент-серверного приложения, а клиентский - соответствует пользователю, от имени которого работает сервер. Типичным примером является доступ к файловым ресурсам сервера. Так, при доступе к файлу на другом компьютере через сеть служба Workstation обращающегося к файлу компьютера соединяется со службой Server компьютера с предоставляемым ресурсом, при этом происходит тип 3 входа в систему. Перед обработкой любого запроса сервер аутентифицирует пользователя и записывает события доступа к объекту с указанием основного пользователя и клиента.
В этом случае основным пользователем будет SYSTEM, поскольку именно под данной учетной записью запускается служба Server. Информация о клиенте соответствует имени пользователя, которое применялось для доступа к ресурсу; обычно это одна из учетных записей пользователей домена.
Поле типа доступа Accesses в событии номер 560 хранит вид использованного метода доступа к объекту. Значения этого поля соответствуют возможным типам полномочий доступа к объектам ACL. Так, при редактировании текстового файла в редакторе WordPad Windows NT фиксирует событие 560 с типом доступа для чтения ReadData, записи WriteData и добавления AppendData.
Событие 560 также сохраняет информацию о номере процесса Process ID. Этот номер позволяет определить, какая именно программа обратилась к объекту. Например, можно точно выяснить, использовалось ли при редактировании текстового файла приложение Word, WordPad или Notepad. Однако это при условии, что редактировался локальный файл. Если же пользователь обращался к объекту через сеть, фиксируется номер процесса, соответствующий серверному приложению.
Третьим важным событием в категории аудита объектов является событие номер 564, удаление объекта - object deleted. Оно записывает только дескриптор и номер процесса. Чтобы разобраться, какой именно объект и каким пользователем был удален, необходимо отыскать по значению Handle ID соответствующее событие 560 открытия объекта. В событии номер 560 есть вся необходимая информация о пользователе, так что событие 564 удаления объекта следует связывать именно с ним.
Аудит и анализ доступа к объектам представляется очень мощным средством. Однако анализ - процесс весьма трудоемкий, а аудит может снизить быстродействие системы при активном использовании и большом количестве регистрируемых объектов. Не следует злоупотреблять этим типом аудита. Кроме защиты особо важных ресурсов он часто используется службой безопасности предприятия для сбора сведений о неблагонадежных пользователях. Известны случаи, когда аудит ставился на специально подбрасываемые пользователям файлы типа Зарплата.xls только лишь с целью выявить потенциальных злоумышленников.Подобный подход требует строгой проработки. Ну и, конечно, не надо забывать включать аудит доступа к объектам системы в приложении User Manager на той системе, где эти объекты находятся, а не только на рабочей станции пользователя.
Драйверы, выполняющиеся в пользовательском режиме в монолитном ядре
Ранним проектом, в котором применялись драйверы, выполняющиеся в пользовательском режиме, был Mach 3.0 [11]. Система состояла из микроядра Mach, поверх которого запускалась ОС Berkeley UNIX в виде пользовательского процесса, и драйверы устройств также выполнялись в пользовательских процессах. К сожалению, в случае фатального сбоя драйвера Berkeley UNIX приходилось перезапускать, так что от изоляции драйверов было мало пользы. Планировалась мультисерверная система, которая должна была выполняться над Mach, но она так и не была полностью реализована.
В аналогичном проекте в университете New South Wales реализовывались драйверы Linux для жесткого диска и гигабайтной аппаратуры Ethernet, выполняемые в пользовательском режиме [8]. Для блоков размером менее 32 Кб производительность ядерного драйвера была значительно выше, но на блоках большего размера выравнивалась. При тестировании Ethernet выявилось так много аномалий, вероятно, связанных с управлением буферами, но невозможно было сделать какие-либо выводы.
Другие файлы и команды
Файлы протоколов, упоминаемые в /etc/syslog.conf обычно располагаются в каталоге /var/log и его подкаталогах. Но, если заглянуть в этот каталог, то мы обнаружим там несколько файлов, которые в /etc/syslog.conf не упоминались.
Файл dmesg. Необходимо сказать, что в Linux имеется команда с таким же названием и если сравнить вывод этой команды (когда она запущена без параметров) с содержимым файла /var/log/dmesg, то обнаружится, что они очень похожи, хотя и не идентичны (направьте вывод команды в файл dmesg2 и сравните файлы dmesg и dmesg2). Точнее, файл /var/log/dmesg один в один совпадает с началом того вывода, который мы получим по команде dmesg. В ядре имеется кольцевой буфер, в который записываются сообщения демона протоколирования ядра - сообщения, которые записываются в этот буфер в процессе загрузки, и составляют содержание файла /var/log/dmesg. По-видимому, этот файл формируется по окончанию загрузки системы.
Все сообщения категории kern выдаются также и на консоль, где они быстро пробегают и вы вряд ли успеваете их прочитать и осмыслить, но зато они сохранены в файле /var/log/dmesg. После окончания процесса загрузки запись сообщений от ядра в кольцевой буфер продолжается и когда выполняется команда dmesg, то выдается текущее состояние буфера, поэтому вывод этой команды содержит больше сообщений, чем файл /var/log/dmesg.
Все сообщения из /var/log/dmesg можно обнаружити и в файле /var/log/messages, только там они чередуются с сообщениями от других программ. Имеется только одно существенное различие: в файле dmesg время и источник сообщения (имя хоста и категория сообщения) не указываются. Хост тут всегда , а начало отсчета времени определяется последней перезагрузкой компьютера.
Файлы lastlog и wtmp. Файл lastlog хранит информацию о последнем входе пользователя в систему, например:
Last login: Wed Oct 9 19:25:53 on tty1
Эта строка формируется утилитой login, которая после авторизации пользователя обращается к файлу /var/log/lastlog, извлекает оттуда информацию о предыдущем успешном входе, выдает ее на экран, а затем обновляет запись в файле lastlog.
В отличие от файла /var/log/lastlog, который содержит записи о времени последнего входа в систему каждого пользователя, в файле /var/log/wtmp запоминаются все входы и выходы пользователей в систему с момента создания этого файла. Если же вы хотите узнать, кто из пользователей работает в системе в данный момент, надо обратиться к файлу /var/run/utmp. Между прочим, руководство man утверждает, что простые пользователи должны быть лишены права записи в файл utmp, так как многие системные программы (по каким-то необъяснимым причинам) зависят от его целостности. Вы рискуете нарушить работу системы, если предоставите любому пользователю возможность производить записи в файл utmp. Как и в файле lastlog, записи в /var/log/wtmp и /var/run/utmp делаются в двоичном формате, так что просматривать их можно только с помощью специальных команд.
Команда last выводит все записи из файла /var/log/wtmp, т. е. историю работы пользователей в системе. При этом указывается имя пользователя, терминал, время входа и выхода из системы, а также продолжительность сеанса работы. В случае, если работа пользователя прервалась из-за отключения самой системы, вместо времени выхода пользователя стоит слово . Время повторного запуска отображается отдельными строками, начинающимися словом . Команда lastb подобна last, но выводит информацию о неудачных попытках входа в систему (эта команда будет работать только в том случае, если существует файл /var/log/btmp). Впрочем, ни одна из рассматриваемых в этом разделе программ не создает файлов регистрации, поэтому если какой-то из них удален, то ведение записей заканчивается.
Команда lastlog форматирует и выводит содержание файла /var/log/lastlog: имя пользователя, имя терминала, время последнего входа в систему. По умолчанию (когда команда введена без параметров) элементы файла /var/log/lastlog будут выводиться в порядке номеров идентификаторов пользователей. Если указать параметр -u login-name, будет выведена только информация о времени последнего входа указанного пользователя.Указав параметр -t days, вы получите только записи за последние days дней. Если пользователь вообще пока не заходил в систему, то вместо имени терминала и времени последнего входа будет указана строка .
Для вывода информации о том, кто работает в текущий момент в системе, используются команды w, who и users. Наибольшую информацию выводит команда w, которая кроме параметров системы выдает подробную информацию для каждого пользователя.
Другие полезные команды и переменные
Использование переменных, корректировок реестра и условных операторов позволит на 99% реализовать все задачи алгоритма установки. Справиться же с оставшимся процентом поможет целый ряд полезных команд и переменных.
Delete File(s). Хотя мастер позволяет устанавливать файлы на пользовательскую систему, он не располагает средствами удаления существующих файлов. Для этого можно применить команду Delete File(s) (удалить файл(ы)) редактора сценариев.
ЭКРАН 5. Задание файла для удаления.
Предположим, требуется создать приложение для "уборки мусора" в системе. При этом желательно, чтобы пакет предотвращал автоматический запуск программы Microsoft Find Fast (из папки автозагрузки). Для этого, как показано на Экране 5, нужно добавить в сценарий команду Delete File, которая сообщит приложению, в каком каталоге находится удаляемый значок. Чтобы описать местонахождение файла, можно использовать либо собственную переменную, которую надо предварительно объявить, либо стандартную переменную SMS Installer STARTUPDIR.
При описании перечня удаляемых файлов разрешено применять символы шаблона, что однако запрещается при работе с системными каталогами \Windows и \Winnt\System32. Кроме того, диалоговое окно команды Delete File(s) содержит ряд флажков, позволяющих удалять каталоги и файлы во вложенных каталогах.
В некоторых версиях SMS Installer режимы работы с каталогами и удаления вложенных каталогов могут функционировать неправильно. О том, как решать подобные проблемы, рассказано в статье Microsoft "SMS: Remove Directory Containing Files Option in 'Delete Files' Script Item Not Functioning Properly", которую можно найти по адресу: http://support.microsoft.com/support /kb/articles/q235/7/48.asp. Более подробные сведения о программных "заплатках" для SMS Installer приведены в статье "SMS Installer Fixes". Указанные ошибки в работе команды Delete File(s) полностью исправлены в версии SMS Installer 2.0.91.00, в которую также включены средства отладки и целый ряд новых команд, в том числе для управления цветом.
Parse String. Иногда возникает необходимость использовать только часть переменной или разделить одну переменную на две. Подобные действия легко выполнить с помощью команды разбора строки Parse String, которая усекает или разделяет переменную, основываясь на заданном порядковом индексе символа или шаблоне выделения.
Допустим, для определения порядка дальнейших действий сценарию необходимо "знать" номер версии установленного приложения. Предположим также, что известен параметр реестра, который описывает этот номер (например, 2.0.1.b или 3.0.5a). Если необходим только основной номер версии (например, 2.х или 3.х), можно обрезать строку с полным номером и вернуть в сценарий только первый его символ. Для этого с помощью параметра Split value команды Parse String нужно выбрать режим разбора строки слева, а параметру Pattern/Position присвоить значение 1. В результате команда извлечет из строки первый символ с номером версии и поместит его в указанную переменную. После этого можно использовать условный оператор для организации ветвления сценария в зависимости от значения переменной.
Include Script. Если есть желание создавать сценарии по модульному принципу, чтобы лучше структурировать их, можно воспользоваться командой включения сценария Include Script. Как следует из названия, команда вставляет в исполняемый сценарий файл другого сценария. Например, SMS Installer пользуется данной командой для включения в пакет функций удаления устанавливаемого приложения. Для этого SMS Installer вставляет в сценарий файл uninstal.ipf, который копирует файл соответствующей утилиты удаления и записывает необходимые параметры в реестр. Это позволяет удалить установленное приложение с помощью значка Add/Remove Programs панели управления. Клиенты SMS могут использовать эту возможность для автоматического удаления приложения, публикацию которого SMS больше не поддерживает.
RESTART. Обычно, когда сценарий выполняет такие команды, как замена системного файла или модификация файла autoexec.bat, установочный пакет предлагает пользователю перезагрузить систему после завершения установки.
Для регулирования этого процесса используется переменная RESTART, которая определяет, будет ли пакет выполнять перезагрузку. Если данной переменной присвоить пустое значение, перезапуска не будет. Чтобы реализовать эту возможность, в конец сценария следует добавить команду Set Variable, присваивающую переменной RESTART значение ' ' (пробел). При этом важно помнить, что многие приложения могут неправильно работать до перезагрузки системы. Однако если SMS используется для одновременного развертывания целого ряда приложений, лучше отложить перезагрузку до завершения установки последнего из них.
Кроме того, можно использовать переменную RESTART для выполнения принудительной перезагрузки после установки пакета, который не требует перезапуска системы. Для этого нужно присвоить RESTART значение S. Кроме того, если выполняется дистрибуция инсталляционного пакета, то можно сконфигурировать программные настройки SMS таким образом, чтобы перезагрузка осуществлялась автоматически без использования переменной RESTART.
Другие способы установления соединения
В ранних версиях дистрибутивов Linux chat-сценарии приходилось писать самостоятельно. В принципе это не очень сложно - нужно только познакомиться с форматом соответствующего файла (команда man chat). Впрочем, можно было обойтись и вообще без утилиты chat, набирая команды вручную с помощью программы общения с модемом minicom или аналогичной.
Этот способ доступен и сейчас, поскольку в состав Red Hat включен minicom. Им можно воспользоваться в том случае, когда что-то не получается, а проверка работы системы вручную, как правило, позволяет найти ошибки в настройке. Следует добавить, что кроме linuxconf можно применять и другие программы для организации телефонного соединения, например оболочку Seyon, которая также поставляется в стандартном дистрибутиве Red Hat 6.0.
Можно задействовать и специализированную утилиту для автоматического установления телефонного соединения diald, которая подключается к провайдеру, когда пользователь генерирует запрос к внешней сети. Эта программа подходит для организации доступа к Internet из небольшой сети, в которой Linux работает как маршрутизатор.
Таким образом, в Linux предусмотрено множество вариантов установления телефонного соединения. Выбирайте наиболее подходящий для вас, и - за дело!
Другие загрузчики ОС
Кроме LILO для загрузки Linux можно использовать и другие загрузчики.
Если у вас до установки Linux уже стояла ОС Windows NT, то вторым доступным для вас загрузчиком является OS Loader от NT. По сравнению с LILO загрузчик OS Loader имеет, по крайней мере, два преимущества. Во-первых, сохраняется вся старая конфигурация (у меня уже была возможность загружать по выбору Windows NT или Windows 95), и, во-вторых, можно установить Linux на диск, который не может быть загрузочным в Linux, например, второй диск на втором контроллере (Secondary Slave). Если у вас была установлена только ОС Windows 95 или Windows 98 и не было Windows NT или Windows 2000, то OS Loader у вас не установлен, и если вы почему-либо не хотите ставить LILO, можно воспользоваться программой-загрузчиком loadlin.exe (обычно поставляется вместе с дистрибутивом Linux). В состав некоторых дистрибутивов Linux в последнее время включается программа-загрузчик GRUB. В составе дистрибутива OS/2 фирмы IBM имеется программа-загрузчик, которая называется Boot Manager. Во многих руководствах ее рекомендуют использовать для организации многовариантной загрузки. В разных источниках упоминается также программа System Commander, которая тоже является многовариантным загрузчиком. Еще один многовариантный загрузчик входит в состав пакета PartitionMagic фирмы Power Quest, о котором мы будем говорить в следующем подразделе.
Кроме перечисленных я встречал упоминания еще о ряде загрузчиков (часть из которых можно найти в каталоге /public/ftp/pub/Linux/system/boot/loaders на сайте ftp://metalab.unc.edu). Но, поскольку я этими программами не пользовался, то рассказать о них подробнее не могу, и все мои последующие рекомендации будут основаны на использовании загрузчиков LILO, NT Loader и loadlin.exe. Если вы хотите установить другую программу-загрузчик, то вы должны почитать руководство по ее установке и использованию.
Еще примеры
1) awk '$1=="Иванов" {print} ' f-awk
Результат:
Иванов И.И. 1980 50
2) awk '$4/2==30 {print} ' f-awk
Результат:
Хведоров И.Х. 1970 60
3) awk '$3 != $4 && $3 > 1970 {print} ' f-awk
Результат:
Иванов И.И. 1980 50
Петров А.В. 1979 40
Сидоров С.К. 1979 40
4) awk '$1~/нов$/ {print} ' f-awk
Результат:
Иванов И.И. 1980 50
5) awk '/^Ив|дор/ {print} ' f-awk
Результат:
Иванов И.И. 1980 50
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
6) awk '/1980/,/1979/ {print} ' f-awk
Результат:
Иванов И.И. 1980 50
Петров А.В. 1979 40
Файл протокола /var/log/messages
Каждая строка в файле протокола содержит запись одного сообщения, состоящую из следующих полей: дата, имя хоста и текст сообщения. Во-первых, стоит заметить, что если ваш компьютер не работает круглосуточно, а выключается на ночь, то в этом файле можно обнаружить записи о нескольких , начинающихся с загрузки компьютера и заканчивающихся выключением его. Начинается такой цикл с сообщения о запуске демонов протоколирования (это и понятно, до их запуска сообщения не фиксировались):
Sep 17 08:32:56 kos3 syslogd 1.4-0: restart. Сен 17 08:32:56 kos3 syslog: запуск syslogd succeeded Sep 17 08:32:56 kos3 kernel: klogd 1.4-0, log source = /proc/kmsg started. Сен 17 08:32:56 kos3 syslog: запуск klogd succeeded
Далее в файле протокола можно обнаружить версию ядра, параметры его запуска:
Sep 17 08:32:56 kos3 kernel: Kernel command line: auto BOOT_IMAGE=linux ro root=303 BOOT_FILE=/boot/vmlinuz-2.4.2-2
информацию о типе процессора и объеме оперативной памяти:
Sep 17 08:32:56 kos3 kernel: Memory: 125652k/130560k available (1365k kernel code, 4200k reserved, 92k data, 236k init, 0k highmem) Sep 17 08:32:56 kos3 kernel: CPU: Intel(R) Pentium(R) 4 CPU 1.60GHz stepping 02
Без труда в этом файле можно найти строки, содержащие информацию о дисковой памяти (включая информацию о геометрии диска, структуре дисковых разделов и используемых прерываниях), информацию о периферийных устройствах, о запуске отдельных служб и сервисов, информацию о подключении файловых систем и сообщения о логировании пользователей, а также сообщения о некоторых ошибках. Структура каждого такого сообщения подобна структуре записей, приведенных выше в качестве примеров. Записи в других файлах протоколов, упоминаемых в файле /etc/syslog.conf, имеют примерно такую же структуру, как записи в /var/log/massages.
Файловая система
В старых Unix'ах отводилось 14 букв на имя, в новых это ограничение снято.
В директории кроме имени файла находится его идентефикатор inode - целое
число, определяющее номер блока, в котором записаны атрибуты файла. Среди них:
номер пользователя - хозяина файла; номер группы; количество ссылок на файл
(см.далее) даты и время создания, последней модификации и последнего обращения
к файлу; атрибуты доступа. Атрибуты доступа содержат тип файла (см.далее),
атрибуты смены прав при запуске (см.далее) и права доступа к нему для хозяина,
одногрупника и остальных на чтение, запись и выполнение. Право на стирание
файла определяется правом записи в вышележащую директорию.
Каждый файл (но не директория) может быть известен под несколькими именами,
но обязательно лежащими на одном разделе. Все ссылки на файл равноправны;
файл стирается, когда удаляется последняя ссылка на файл. Если файл открыт
(для чтения и/или записи), то число ссылок на него увеличивается еще на
единицу; так многие программы, открывающие временный файл, сразу удаляют его,
чтобы при аварийном завершении, когда операционная система закрывает открытые
процессом файлы, этот временный файл был удален операционной системой.
Есть еще одна интересная особенность файловой системы: если после создания
файла запись в него шла не подряд, а с большими интервалами, то для этих
интервалов место на диске не выделяется. Таким образом суммарный обьем
файлов в разделе может быть больше обьема раздела, а при удалении такого
файла освобождается меньше места, чем его размер.
Файлы бывают следующих типов:
обычный файл прямого доступа;
директория (файл, содержащий имена и идентефикаторы других файлов);
символьный линк (строка с именем другого файла);
блочное устройство (диск или магнитная лента);
последовательное устройство (терминалы, последовательные и параллельные
порты; диски и магнитные ленты тоже имеют интерфейс последовательного
устройства)
поименованный канал.
Специальные файлы, предназначенные для работы с устройствами
как правило сосредоточены в директории "/dev".
Вот некоторые из них (в номинации FreeBSD):
tty* - терминалы, в т.ч.:
ttyv<цифра> - виртуальная консоль; ttyd<цифра> - DialIn терминал (обычно последовательный порт); cuaa<цифра> - DialOut линия ttyp<цифра> - сетевой псевдо-терминал; tty - терминал, с которым ассоциирована задача;
wd* - жесткие диски и их подразделы, в т.ч.:
wd<цифра> - жесткий диск; wd<цифра>s<цифра> - партиция этого диска (именуемая здесь "slice"); wd<цифра>s<цифра><буква> - раздел партиции;
fd<цифра>[<буква>] - floppy-диск; rwd*, rfd* - то же самое, что wd* и fd*, но с последовательным доступом;
Иногда требуется, чтобы программа, запущенная пользователем, имела
не права запустившего ее пользователя, а какие-то другие. В этом случае
устанавливается атрибут смены прав на права пользователя - хозяина программы.
(В качестве примера приведу программу, которая читает файл с вопросами и
ответами и на основании прочитанного тестирует запустившего эту программу
студента. Программа должна иметь право читать файл с ответами, а запустивший
ее студент - нет.) Так, например, работает программа passwd, с помощью которой
юзер может изменить свой пароль. Юзер может запустить программу passwd,
она может произвести изменения в системной базе данных - а пользователь
не может.
В отличие от DOS, в котором полное имя файла выглядит как "диск:\путь\имя",
и RISC-OS, в которой оно выглядит "-файловая_система-диск:$.путь.имя"
(что вообще говоря имеет свои преимущества), Unix использует прозрачную
нотацию в виде "/путь/имя". Корень отсчитывается от раздела, с которого
было загружено ядро Unix. Если мы собираемся использовать другой раздел
(а на загрузочном разделе как правило находится только самое необходимое
для загрузки), используется команда `mount /dev/файл_раздела директория`.
При этом файлы и поддиректории, ранее находившиеся в этой директории,
становятся недоступными, пока раздел не будет размонтирован (естественно,
все нормальные люди используют для монтирования разделов пустые директории).
Производить монтирование и размонтирование имеет право только супервизор.
При запуске каждый процесс может расчитывать, что для него уже открыты три
файла, которые ему известны как стандартный ввод stdin по дескриптору 0;
стандартный вывод stdout по дескриптору 1; и стандартный вывод stderr
по дескриптору 2. При регистрации в системе, когда пользователь вводит
имя и пароль, а ему запускается shell, все трое направлены на /dev/tty;
позже любой из них может быть перенаправлен в любой файл.
Файловые системы в UNIX
Файловой системой называют часть ядра ОС, которая управляет организацией файлов и операциями над ними: в этом аспекте в одном ряду с файловой системой выступают система управления процессами и система ввода/вывода. Файловая система - это универсальный интерфейс доступа ко всем ресурсам, как локальной машины, так и компьютеров, объединенных в сеть. Универсальность интерфейса выражается в том, что все, что имеется в машине (и в сети) физически, представляется в виде файлов. Метафора файла охватывает не только компоненты программ и пользовательские данные, но и символьные и блочные устройства. Более того, интерфейс файловой системы обеспечивает доступ к протекающим в системе процессам. И даже средства межпроцессорного взаимодействия предстают в виде файлов особого типа.
Файловая система - это еще и принцип организации файлов как таковых: в этом контексте говорят о файловой системе Unix или FAT, HPFS или NTFS. И, наконец, файловая система - это физический способ организации данных на некоем устройстве. Он, как правило, специфичен для конкретной ОС. Linux способна работать, с "родными" с несколькими файловыми системами, начиная от традиционной ext2fs до XFS и JFS, разработанных для ОС IRIX и AIX.
Существуют еще и виртуальные файловые системы. К ним относятся уже упоминавшаяся файловая система устройств devfs и временная файловая система в оперативной памяти tmpfs, и procfs, ответственная за представление в виде файловой системы процессов, протекающих в машине.
Наконец, файловая система в Unix - это и логическая структура каталогов и файлов, которая может объединять физические и виртуальные файловые системы самых различных типов (например, дисковые разделы с файловыми системами ext2fs и FAT16, виртуальные procfs, devfs и tmpfs), причем не только на локальной машине, но и на любой удаленной. Эта структура: иерархическая, или древовидная, начинающаяся с корневого каталога, родительского по отношению ко всем прочим, от которого ответвляются отдельные файлы и дочерние каталоги, которые, в свою очередь, могут выступать как родительские по отношению к подкаталогам более глубоких уровней вложенности.
В ОС Linux структура файловой системы обычно специфична для конкретного дистрибутива или их группы, связанной единством происхождения, поэтому нередко можно столкнуться с такими выражениями, как файловая система Red Hat или Debian. Собственно, именно исторически сложившиеся различия в иерархии каталогов являются одним из критериев обособления нескольких линий дистрибутивов Linux. Однако можно надеяться, что усилиями стандартизирующих организаций, таких, как Linux Standard Base () и Filesystem Hierarchy Standard (http://www.pathname.com/fhs), увенчаются успехом, и можно будет говорить о единой логической файловой системе Linux, подобно тому, как это имеет место в линейке BSD.
Опубликовно 04.01.2003
Файлы, файлы, файлы
Виктор Хименко
Журнал , #02/2000
Человеку, ранее работавшему с DOS или Windows, при общении с Linux прежде всего бросаются в глаза использование символа `/' вместо '\', отсутствие имен дисков (A:, B:, C: и т. д.) и то, что в именах файлов различаются большие и маленькие буквы. Однако другие особенности, не столь заметные с первого взгляда, более существенны. Давайте посмотрим, как устроена в Linux работа с файлами.
Прежде чем переходить к основному изложению, заметим, что выражение "файловая система" имеет два значения. Так называют, во-первых, определенный способ организации файлов, каталогов и т. д., а во-вторых, конкретное множество файлов, каталогов и т. д., организованное по этому способу.
Хотя Linux поддерживает более десятка самых разных файловых систем, все "иностранные" (foreign) системы так или иначе маскируются под стандартно используемую в этой ОС ext2fs. Давайте с нее и начнем.
Формирование сообщений для протокола
При создании программ на языке Си их разработчики имеют возможность в необходимых случаях вставить вызов специальных библиотечных функций openlog, setlogmask, syslog и closelog, посылающих сообщения о тех или иных событиях при выполнении программы специальному системному демону syslogd, ведущему системный протокол. Функция openlog устанавливает связь с этим демоном, функция syslog формирует конкретное сообщение для записи в протокол, а функция closelog закрывает связь. Сообщения, формируемые функцией syslog, состоят из нескольких полей, разделяемых пробелами. Каждое сообщение начинается с поля PRI, которое в закодированном виде содержит информацию о категории сообщения (facility) и уровне серьезности (severity level) или приоритете (priority) сообщения.
Категория (facility) - информация о том, к какому классу относится данное сообщение (от 0 до 23). Категории определяются в файле /usr/include/sys/syslog.h), например: 0 (kern) - сообщения ядра; 1 (user) - сообщения от программ пользователя; 3 (daemon) - сообщения системных демонов, которые в отличие от FTP или LPR не имеют выделенных специально для них категорий; 9 (cron) - сообщения от системного планировщика и т.п. Категория не имеет, вообще говоря, никакого отношения к имени программы, которая шлет сообщения демону syslogd. Более того, некоторые программы могут порождать сообщения разных категорий. Например, демон telnetd в случае неудачных попыток входа в систему порождает сообщения категории authpriv, а в других случаях относит свои сообщения к категории daemon.
Второй параметр, на основе которого формируется значение поля PRI - это уровень или приоритет сообщения (priority). Стандартно заданы 8 уровней важности (они тоже определены в файле /usr/include/sys/syslog.h), например: 0 (emerg) - чрезвычайная ситуация, система неработоспособна; 2 (crit) - критическая ошибка; 6 (info) - информационное сообщение. При формировании сообщения функцией syslog числовое значение категории умножается на 8 и складывается с числовым значением приоритета, получившееся число заключается в угловые скобки и записывается в поле PRI.
Вслед за полем PRI в сообщение включаются поля: TIMESTAMP - время формирования сообщения, HOSTNAME - имя или IP-адрес хоста, MSG - произвольный текст сообщения в коде ASCII. Время записывается в формате: без указания года, что необходимо учесть при организации долговременного хранения файлов протокола. Имя хоста включается в сообщение, чтобы обеспечить возможность ведения протоколов на одном из выделенных компьютеров в сети. Если компьютер имеет несколько интерфейсов с различными IP-адресами, то в качестве имени или адреса хоста может быть использовано любое из них. Текст сообщения (MSG) содержит этикетку (TAG) и тело сообщения (CONTENT). Обычно в качестве этикетки используется простое имя программы, иногда дополненное идентификатором процесса, заключенным в квадратные скобки.
FreeBSD ведет свою историю от
FreeBSD ведет свою историю от операционной системы 4.4BSD-Lite и поэтому полностью соответствует спецификации BSD UNIX. Начиная с версии 3.0 ОС FreeBSD может работать не только на платформе Intel (с процессором 386 и выше), но и на Alpha.
Для работы FreeBSD необходимо по крайней мере 5 Мбайт оперативной памяти, но это конечно же минимальные требования. FreeBSD поддерживает многопроцессорные конфигурации, но не кластерные, хотя некоторые разработки в области поддержки кластерных технологий и ведутся.
Устанавливать ОС можно с дискет, CD-ROM, винчестеров, со стримера, по ftp и NFS. В самом начале инсталляции ОС, когда выдается меню "Kernel Configuration", выбор режима "Start kernel configuration in full-screen visual mode" позволяет настроить конфигурацию ядра, которое станет основным (GENERAL) для системы.
Тем, кто никогда не работал с FreeBSD, процедура инсталляции может показаться сложной, громоздкой и непонятной, но это только первое впечатление, поскольку в ней есть своя логика. Если выбрать режим установки Novice и строго следовать подсказкам, то проблем обычно не возникает. За процедуру инсталляции в FreeBSD отвечает утилита /stand/sysinstall, поэтому большинство заданных в процессе инсталляции настроек можно без труда поменять после установки системы.
Рисунок 8. Средство администрирования /stand/sysinstall из состава FreeBSD.
На самом деле /stand/sysinstall (см. Рисунок 8) является утилитой администрирования системы, но, к сожалению, она работает лишь в текстовом режиме, выполняет только небольшую часть административных задач и не поддерживает управление через браузеры Web. Мне кажется, что по удобству администрирования FreeBSD серьезно проигрывает не только коммерческим UNIX, но и Linux. Самое печальное, что такая ситуация остается без каких-либо изменений вот уже несколько лет. Конечно, для серверных приложений это не смертельно, но в случае настольного применения удобство администрирования приобретает критически важное значение. Правда, разработчики FreeBSD обычно не позиционируют систему как предназначенную для рынка настольных компьютеров, но и при управлении серверами удобные средства администрирования еще никому не мешали.
Как и предполагалось, инсталляция выявила многочисленные проблемы. Особенно меня удивил уровень поддержки Plug'n'Play, а также совет предварительно узнать конфигурацию оборудования в Windows 9x. Так вот, такой фокус нередко не проходит: как показывает практика, настройки в FreeBSD (и Linux) приходится устанавливать совсем иные, нежели в Windows.
Ядро FreeBSD модульное, но степень "модульности" ниже, чем в Linux. При этом для многих устройств загружаемые модули создать невозможно. Плохо это или хорошо для устойчивости и производительности - сказать сложно, но что гибкость недостаточная, так это точно.
Средства конфигурирования ядра FreeBSD очень неудобны: конфигурационный файл приходится править руками.
В момент загрузки система позволяет получить на консоли права пользователя root, не зная пароля, но такой доступ можно запретить, отредактировав файл /etc/ttys.
В FreeBSD основной файловой системой является UFS, подобная той, что применяется в Sun Solaris. Весьма интересными возможностями обладает менеджер томов Vinum (Vinum Volume Manager, VVM), в частности он позволяет динамически увеличивать размеры томов. FreeBSD не поддерживает списки контроля доступа, но обладает оригинальной системой флагов, с помощью которой администратор может вводить запрет на стирание или изменение файлов на уровне отдельных пользователей. Как и другие UNIX, ОС FreeBSD поддерживает квотирование дискового пространства.
В комплекте дистрибутива FreeBSD поставляются все самые популярные графические оболочки, в том числе GNOME и KDE, а также эмуляторы Linux, SCO UNIX и BSDI BSD/OS, правда, они работают с ограничениями.
Настройка русификации в FreeBSD далеко не тривиальна. Определенную помощь может оказать руководство "FreeBSD Handbook", расположенное в каталоге /usr/share/doc/handbook. Более полную информацию можно почерпнуть на сервере http://www.freebsd.org.ru.
Список поддерживаемого в FreeBSD оборудования намного скромнее, чем в Linux, но обширнее, чем в коммерческих UNIX.
По количеству некоммерческого программного обеспечения ОС FreeBSD мало чем уступает Linux, однако для нее коммерческие программы найти гораздо труднее, так как разработчики предпочитают Linux.
Помимо обычной документации по ОС и приложениям в комплект FreeBSD входит прекрасная книга "The Complete FreeBSD", написанная известным специалистом Грегом Лехи. Ознакомившись с ней, любой человек, имеющий элементарные познания в UNIX, сможет без труда освоить систему.
FreeBSD представляет собой одну из самых устойчивых и добротно сделанных систем, мало чем уступающую конкурентам по своим функциональным возможностям.
Однако недостатки дают о себе знать - пользователи и разработчики все чаще оборачивают свой взор в сторону Linux. Как быстро меняются времена! Боюсь навлечь себя гнев почитателей FreeBSD, но так и тянет сказать, что одна из самых распространенных некоммерческих систем быстро сдает свои позиции. И все это из-за нерасторопности разработчиков.
Где и Как искать эти самые rpm-ы?
Если вам нужны стабильные, качественные и, самое главное, проверенные профессионалами RedHat пакеты берите их на , но с 15 января сие будет доступно на , наверняка в директории contrib.
Есть на просто огромный репозиторий (43Гб). Там же есть замечательная программка rpmfind, которая ищет пакеты для вас в этом репозитории, и даже загружает их для вас в директорий /tmp. Пример: bash$ rpmfind -q -latest icewm
- найти последний IceWM.
Кроме того rpm-ы можно найти на Home-сайтах проектов, обычно по мимо .tgz выставляются и rpmы.
Вопрос "Что делать, если информация об установленных пакетах потеряна?" я оставлю открытым. Порекомендую лишь сохранять время от времени файлы директория /var/lib/rpm. А если вдруг это случилось, то при инсталляции используйте опции --nodeps, --replacefiles.
Последнее. Если у вас настроена русская локаль, как писал уважаемый Мультик, то большую часть сообщений rpm выдает на русском И еще, меня очень удивило, что GNOME-0.99.X и программа LYX уже русифицированы! Так, что Linux крутеет не только для запада!
Если есть вопросы пишите мне, так как Вячеслав пользуется Slackware-3.6, а он, если не сделать bash$ rpm --initdb
RPM-ов не понимает. (;-)))) от Вячеслава)
Да! И еще не забывайте проверять букву p в слове rpm, а то можно будет внезапно огорчиться.
Вот еще одно. Я чаще всего использую следующие пакеты:
teTeX и . (Она может быть найдена на . LyX - WISYWIM (не WYSYWYG) редактор LaTeXовых файлов. WYSYWIM сокращение от What You See is What You Mean. mc - Midnight commander. cooledit - Cool Editor, часть mc.
Если вы хотите узнать мое мнение (пока еще чайника) о том что это и как это можно использовать, напишите и мы подискутируем на страницах IrkLUG!
12.01.1999
Где NT хранит пароли
#02/99
Марк Джозеф Эдвард
Дэвид Лебланк
Наверняка вы знаете о том, что пароли служат ключами к большинству "дверей" в сети. А известно ли вам, где Windows NT 4.0 хранит эти пароли? Их можно обнаружить во многих интересных местах. И для того, чтобы обеспечить надежную защиту системы, необходимо располагать полной информацией о них.
Для хранения и обработки таких атрибутов пользователя, как пароли в ОС NT, используется SAM (Security Accounts Manager - администратор учетных данных в системе защиты). SAM размещает всю информацию в базе данных SAM, поэтому можно сказать, что NT защищена от взлома настолько же, насколько защищены данные SAM. Взломать систему безопасности SAM непросто, только если не знать обо всех местах, где можно найти базу данных SAM. Эта статья поможет вам защитить некоторые важные области данных системы NT и отыскать участки системы, которые требуют дальнейшего конфигурирования для обеспечения более высокого уровня безопасности.
Где взять бесплатный Unix?
FreeBSD База - www.freebsd.org; есть также на ftp.kiae.su/FreeBSD/*-RELEASE/ и еще во множестве мест OpenBSD ftp.openbsd.org Linux ftp.cs.msu.su/pub/Os/Linux/Slachware_3.1/ SCO По моим сведениям, в Internet недоступен, но можно получить лицензию на бесплатное использование. Обратитесь на www.sco.com
Гнезда
Вообще гнезда (и взаимодействие программ при помощи гнезд) играют очень важную роль во всех Unix-системах, включая и Linux: они являются ключевым понятием TCP/IP и соответственно на них целиком строится Internet. Однако c точки зрения файловой системы гнезда практически неотличимы от именованных каналов: это просто метки, позволяющие связать несколько программ. После того как связь установлена, общение программ происходит без участия файла гнезда: данные передаются ядром ОС непосредственно от одной программы к другой
Графическая оболочка
Причины, по которым в качестве графической оболочки использована модифицированная среда KDE, сама компания Corel объясняет следующим образом. Во-первых, KDE популярна среди поклонников Linux. Во-вторых, в отличие от другой популярной графической среды GNOME, KDE активно применяется в коммерческих дистрибутивах Linux. В одном из документов, описывающих стратегию дальнейшего продвижения Corel LINUX, компания-разработчик вскользь упоминает о некоем альянсе Corel-KDE-Debian. Думается, что решающим аргументом в пользу KDE стала ее наибольшая схожесть с Windows и возможность модифицировать ее в соответствии с замыслами пользователя.
Если взглянуть на рис. 1, то увидите, насколько интуитивно понятна среда Corel LINUX для любого пользователя Windows.
Рис. 1
Все те же пиктограммы на рабочем столе, "мусорный ящик", панель задач и даже лоток с часами, датой и переключателем языка. Разве что название главной кнопки отличается: в Windows - это слово Start, в KDE - буква K, а в Corel LINUX - Application Starter. Однако откройте ее - и найдете знакомые пункты меню для поиска файлов, запуска произвольных программ, папки автоматического запуска приложений и т. п. Если настроить оболочку, то в главное меню будут вноситься приложения, наиболее часто используемые вами. Удобно, знаете ли. Линеечка задач интересна еще тем, что ее можно убрать в любое время, сделать пиктограммы на ней маленькими и с их помощью переключаться между виртуальными рабочими столами. Последние для пользователей Windows несколько в диковинку. А ведь это действительно приятно - организовать несколько разных рабочих столов и переходить от одного к другому. По умолчанию в Corel LINUX их четыре, но мне и двух вполне бы хватило. Один используется как основной рабочий, а на другом я разместил бы запущенный графический редактор. Кстати, окна выполняющихся приложений можно переносить с одного рабочего стола на другой.
Некоторым пользователям хотелось бы получить типичную UNIX-среду с соответствующими графическими элементами. Спешу обрадовать - отказаться от Windows-подобного внешнего вида можно в любой момент, нажав всего одну кнопку.
Очень хорошо продумана в Corel LINUX технология добавления ссылок на рабочем столе. Процесс во многом схож с созданием ссылок в Windows, но в Linux ссылки называются Nicknames (клички, псевдонимы - кому как нравится).
Халява - дело тонкое
При всех преимуществах бесплатного и дешевого программного обеспечения нужно помнить, что к бесплатным вещам частенько прилагаются и бесплатные проблемы. В полученной через Internet Corel LINUX присутствовали и таковые. К примеру, в файле профиля пользователя root (~/.profile) была ошибка описания переменной PATH. В результате вместо расширения переменной PATH, заданной в глобальном профиле (файл /etc/prifile), локальная PATH начисто перекрывала глобальные маршруты. Может быть, это было сделано Corel специально? Вряд ли.
Наблюдается "тормознутость" ОС. Особенно это чувствуется, если запустить приложения, интенсивно использующие системные ресурсы, как, например, графический редактор GIMP 1.0.2 (также прилагается бесплатно). После его закрытия еще несколько минут система приходит в себя, еле ворочаясь даже на компьютере с процессором Pentium III и 256 Мбайт оперативной памяти. Видимо, какие-то фоновые процессы занимаются "зачисткой" мусора.
Некоторые настройки отказываются сохраняться. Так, настроив шрифт для Console и сохранив изменения, я с удивлением обнаружил, что при следующем запуске Console просто игнорировала мои предыдущие старания и вернула старый шрифт.
В системе используется сервер шрифтов xfs, не поддерживающий шрифты TrueType. Хорошо было бы поменять его на xfstt.
Хэш-коды паролей в памяти
По умолчанию, NT кэширует необходимые для регистрации атрибуты для 10 последних пользователей, входивших в систему интерактивно. Это делается для того, чтобы пользователь смог зарегистрироваться, даже если вы отключите компьютер от сети, или контроллер домена окажется недоступным. NT обеспечивает определенную защиту кэшируемой информации. Однако если ваши задачи требуют более высокого уровня безопасности, вы можете полностью отключить кэширование, чтобы исключить попытки атак на данные в кэш-памяти. Нужно учитывать, что кэшируемые данные содержат хэш-коды других хэш-кодов паролей. Поэтому их очень сложно взломать и использовать для несанкционированного входа в систему. Мы не можем вспомнить ни одного случая использования хакерами таких данных из кэш-памяти. Чтобы отключить кэширование, установите в 0 значение параметра реестра CachedLogonsCount (типа REG_DWORD) в ключе HKEY_ LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ Winlogon.
Операционные системы - статьи
Их них первым по алфавиту был
asWedit
Отзыв о нем - как о редакторе класса HomeSite. Он существовал на Linuxberg'е в виде tar-архива. Однако, сходив на , обнаружил службу поиска rpm-пакетов, где благополучно нашел его в этом виде (для меня пока более простом в обращении). Поэтому установка его сложностей не вызвала. К тому же он прекрасно встроился в меню KDE. Хотя запускался и из командной строки терминала.
Выглядел asWedit действительно положе на HomeSite, но уж больно лохматых версий (рис. 3). И сразу же взялся исправлять мой код: на рисунке - внизу окна его гнусные предложения (в данном случае он был прав, но по существу - глубоко ошибался); правда, есть возможность их проигнорировать, но тогда asWedit не успокоится при следующей загрузке документа. Проблема русских букв решалась запуском из командной строки с параметром -fn (на рисунке - вверху на втором плане). Однако при этом терялась возможность настройки экранных шрифтов в окне редактирования кода: при переходе на средний или крупный шрифт буквы русскими быть переставали, а получившийся шрифт по умолчанию я различал, только царапая очками монитор.
Рисунок 3. HTML-редактор asWedit
Можно было, конечно, поэкспериментировать со шрифтами, но неясно - стоило ли. Никаких особых достоинств я в asWedit'е не обнаружил: ну редактор как редактор, имя им - легион на любом сайте бесплатного софта. Так что, сделав заметку на всякий случай, я перешел к следующей букве алфавита.
Bluefish
Это - типичный html-редактор класса free- и shareware. Не из лучших, но и не худших. Особенно, учитывая его статус альфа-версии. Имеет три линейки кнопок (рис. 4) - главную и две - с html-тэгами. Кроме того, есть и четвертая, пустая - редактируемая.
Рисунок 4. Bluefish
Не поддерживает расцветку тэгов, не имеет никаких настроек. Надеюсь - пока. Но зато нормально работает с русскими буквами. Вот, пожалуй, и все. На сегодняшний день. Впрочем, нет. Для альфа-версии - работает очень прилично (правда, не знаю, насколько понятие альфа-версии применимо к Линукс-софту).
Erwin
Это редактор, доступный в виде rpm-пакета, отличается предельной простотой (рис. 5): три пункта меню (не считая help), дублируемые одной из двух инструментальных линеек. Вторая же - предназначена для ввода трех групп тэгов - основных тэгов html, тэгов форматирования и таблиц и списков. Не подсвечивает тэги, никаких настроек нет даже в зачатке.
Рисунок 5. Erwin
Ввод русских букв возможен только при раскладке клавиатуры, именуемой хакерской. Впрочем, за невозможностью настроить экранный шрифты, буквы эти русскими все равно не являются. Чем и определяется невозможность (да и ненужность) использования этого редактора.
KDreamsite
Он позиционируется как легкий в использовании html-редактор. Виденная мной версия имела номер один, но в README определялась как ранняя альфа. Что, как будет видно дальше, более чем соответствует действительности.
И так, KDreamSite. Доступен только в исходных текстах, его можно скачать со , а также, например, с . Представляет собой упакованный tar-архив размером около полумегабайта. Требования для установки - наличие компилятора C++, Perl, программ make, autoconf и automake, библиотеки QT1.44 и, естественно, KDE (все это подробно перечислено в файле README).
Помимо этого, в файле INSTALL имеется вполне достаточная инструкция по компиляции и установке программы. Каковые, при наличие всех потребных библиотек и инструментов, находящихся в положенных местах (определяемых файлом Makefile) никаких трудностей не вызывают. Если же все потребное хозяйство находится не по адресу - требуется запускать инсталляционные скрипты со всяческими параметрами (или править Makefile - не знаю, что проще).
По завершении установки исполняемый бинарный файл (kdreamsite), согласно документации, должен находиться по адресу /usr/local/bin. У меня же он обнаружился непосредственно в /usr/bin. Откуда и был благополучно запущен. Посредством командной строки, но можно - и из меню KDE.
Внешне KDreamsite (рис. 6) весьма напоминает описанный ниже WebMaker. После запуска программы можно видеть окно, состоящее из двух панелей.
В левой - дерево каталогов (по умолчанию - начиная с корневого), в правой - html-файл. сразу после запуска он - безымянный и пустой, нет даже тэга !DOCTYPE - одного из обязательных, согласно спецификации html.
Рисунок 6. KDreamsite
Из этой позиции можно открыть любой имеющийся html- или текстовый файл или создать новый (никаких даже минимальных шаблонов для этого не имеется). Все открытые или созданные файлы отображаются закладками ниже инструментальной панели. Разумеется, можно и закрыть файл. Интересно (хотя на самом деле - не очень), что закрытие созданного при запуске пустого файла автоматически вызывает закрытие всей программы. Не зависимо от того, сколько непустых файлов в этот момент открыто. И если эти файлы были изменены - не следует ни предупреждения об этом, ни предложения их сохранить. И все изменения оказываются потерянными.
Попытка открыть html-файл с русским содержимым приводит к появлению абракадабры, поскольку по умолчанию установлен шрифт без кириллицы. Правда, шрифт и все его атрибуты (размер, начертание, цвет, для кириллицы - кодировку) можно изменить через пункт меню Options - Editor Defaults. Однако сохранить эти установки нельзя - при перезапуске программы все возвращается на круги своя.
Инструментальная панель содержит несколько кнопок для выполнения минимальных действий (создание, открытие и сохранение документа, Undo и Redo, вырезание, копирование и вставка). Панель не редактируется, возможности подключения дополнительных панелей - нет.
Что еще можно сделать посредством KDreamsite? Стандартный набор манипуляций, как то:
изменение атрибутов текста (выделение, курсив, подчеркивание) и параграфа (выравнивание влево и вправо, центрирование, выключка);
вставка ограниченного набора основных тэгов (гиперссылка, якорь, рисунок, электронный адрес, горизонтальная линия, дата/время); при этом автоматически вставляются только сами тэгов, а их атрибуты надо вводить вручную;
имеется также пункт вставки метатэгов, но в текущей версии он заблокирован;
предусмотрена (почему-то в пункте меню Edit) также возможность редактирования тэгов, но она пока не реализована;
судя по наличию пункта меню View (заблокирован), можно догадываться, что предполагается просмотр во внешнем браузере.
Вот, пожалуй, и все, что мы имеем на сегодняшний день. Правда, есть еще нереализованный пункт меню под названием Project, не очень типичный для бесплатных web-редакторов. Но о содержании его можно только гадать.
Вывод: в современном своем виде KDreamsite для всамделишней работы не пригоден. Однако прошу это не считать в упрек. Ведь мы имеем дело с очень ранней альфа-версией (вероятно, правильнее было бы нумеровать ее не 1.0, а как-нибудь вроде 0.хх). А заложенные (хотя и нереализованные) опции позволяют предполагать, что со временем KDreamsite станет функциональным аналогом бесплатный web-редакторов среднего класса. Если же функции управления проектом включат в себя что-нибудь помимо создания и сохранения такового - не исключено, что он окажется среди лучших.
И так, до сего момента положение с web-редакторами для Linux оставляло желать лучшего. В списке, вместе с последним пунктом, оставалась и последняя надежда -
WebMaker
Тем более основательная, что написан он нашим соотечественником Алексеем Децем. Сходив на , я обнаружил там, кроме линуксберговского tar'а и непременных исходников, кучу rpm'ом, откомпилированных для 5-го RedHat'а, его же при Pentium'е и для 6-го RedHat'а. На всякий случай скачал их все, из жадности. Один из этих вариантов и был благополучно инсталлирован. И даже встроился в KDE (что тоже понятно, поскольку WebMaker под него и заточен).
В результате мои усилия были наконец вознаграждены. Я получил инструмент, внешне и функционально сходный с моей любимой Arachnophilia для Windows. Можно видеть (рис. 7) те же выводимые или скрываемые линейки пиктограмм (правда, одновременно - не более трех), сгруппированные по типам операций, те же закладки для открытых файлов. Есть возможность вводить тэги щелчком на пиктограмме или из меню (разумеется - и вручную).
Рисунок 7. Webmaker
Среди инструментов - возможность автоматического создания таблиц с произвольным количеством строк и колонок, форм, списков и кнопок. Есть возможность импорта текстовых файлов (в том числе и в cp-1251) и файлов Word. И нет - хоть малейших проблем с русским языком (все-таки хорошо, что не все еще говорят на американском, как сказал бы Выбегалло, диалекте).
Набор настроек также сходен с Arachnophilia. Можно изменить шрифт, цвет основных групп тэгов (но не фона), подключить внешний браузер для просмотра (как будто бы только одни). Имеется большой (и редактируемый) набор горячих клавиш для основных манипуляций. Что позволяет использовать WebMaker просто для набора русских текстов - редкий виндовый html-редактор дает такую возможность. В большинстве их них, понимающих русский язык, при переводе строки раскладка клавиатуры автоматически меняется на латинскую. Что создает понятный напряг. Удобно организована вставка ссылок и картинок: пути к файлам можно выбрать или задать вручную, одновременно установив все нужные атрибуты (target для ссылок, alt и всякие space для картинок и т.д.). Поиск и замена позволяют проводить эту операцию более чем с одной строкой (тоже не каждый день встретишь). К сожалению, нет возможности замены в нескольких файлах одновременно (скажем, изменить body bkcolor).
И вообще, средства управления проектом - почти отсутствуют. Единственно, что можно - это создать все файлы сайта по одному шаблону. Поскольку последний представляет собой простой html-файл, создание собственных шаблонов сложности не представляет. Однако по этой же причине автоматическое изменение файлов при модификации исходного шаблона - невозможно. Нет также инструмента для проверки целостности ссылок. Однако не будем забывать, что в бесплатных редакторах для Windows средства управления проектом отсутствуют или находятся в зачаточном состоянии. В той же Arachnophilia возможность проверки ссылок появилась только в одной из последних версий. А редакторы, таковые имеющие - давно уже не бесплатны (как HomeSite или HTMLTools).
В общем и целом, WebMaker мне понравился. Не только по сравнению с виденными редакторами под Linux (которые я после этого со спокойной душой истребил), но относительно развитых бесплатных web-редакторов для Windosw. Кое в чем он послабее Arachnophilia, кое в чем - поудобнее. Конечно, создать с его помощью огромный коммерческий сайт - затруднительно. Однако перед нами версия 0.8.5. А сколько значащих цифр потребовалось той же Arachnophilia (тоже творение индивидуала, Пауля Лютуса), чтобы дойти до современного состояния? В результате я записал WebMaker в свой арсенал.
После чего можно, наконец,
И как мне пользоваться этой системой дальше?
После выхода из программы инсталляции система должна загрузиться
с жесткого диска. Снова будут те же самые сообщения "not found" и "conflict
with". Как-то раз у меня не пошла загрузка сразу после инсталляции (система
висла), но вместо того, чтобы устанавливать все заново, я на приглашение
загрузчика ввел
Boot: kernel.GENERIC
и вместо того, чтобы грузиться с основного ядра /kernel, загрузился
с его копии /kernel.GENERIC. Затем вошел без пароля:
login: root
и скопировал хорошее ядро на место плохого:
cp /kernel.GENERIC /kernel
Дальнейшие действия проходят под китайским лозунгом "три дня труда -
десять лет счастья". :-) Бороться придется по большей части врукопашную.
Для начала возьмем на deco*bin.tgz. Закинуть его можно
в любую директорию, я предпочитаю в /dos (на случай переустановки) или
/var (не засорять же / и /usr); желательно недалеко
от корня, иначе долго будет добираться. Инсталлируем
pkg_add deco*bin.tgz
Если deco*bin.tgz не в текущей директории, придется указывать полный путь.
Почему-то авторы решили, что запускаемый файл лучше поместить
в /usr/local/bin/, но я предпочел переместить его
mv /usr/local/bin/deco /usr/bin/deco
Хотя директория /usr/bin/ по умолчанию прописана в переменной
окружения PATH, мне пришлось выйти из системы (Ctrl+D) и войти снова,
чтобы можно было запускать deco без указания полного пути.
Теперь deco запускается, но - вот ужас! - он черно-белый,
вместо псевдографики - "|", "-" и "+", не работают клавиши с F5 до F10.
Надо править файлы /etc/ttys и /etc/termcap.
С /etc/ttys довольно просто:
ttyv? "/usr/libexec/getty Pc" pc3r on secure
Где вместо "?" надо подставить номера консолей (мне хватает с 0 по 3).
С /etc/termcap несколько сложнее. Во первых, он хранится
не в /etc/, а в /usr/[...] лень); /etc/termcap -
символьный линк к реальному файлу (обозначается /etc/termcap ->
/usr/[...]). А мы сотрем его и сделаем другой, на тот
И Linux не без греха
Несмотря на все преимущества Linux перед Windows NT, ее, к сожалению, нельзя сравнить с букетом роз или наполненным до краев бокалом красного вина*. Поэтому предлагаю спуститься на землю и обсудить ряд ее недостатков. Начнем с процедуры инсталляции.
В процессе изучения Linux я обнаружил, что наибольшие трудности при работе с этой системой возникают в ходе установки. Многие говорят мне, что в остальном Linux надежна и устойчива, и мой личный опыт, в некоторой степени, подтверждает это. Однако процедура инсталляции Linux и в самом деле просто кошмарна. Мне довелось устанавливать на различные компьютеры пять версий Linux: SuSE Linux 6.3 beta, Red Hat Linux 6.0, OpenLinux 2.3 компании Caldera Systems, Corel LINUX и Slackware Linux 7.0 компании LinuxMafia. Все пять версий имеют похожие варианты выбора конфигурации, но различные методики установки. Тем не менее установка каждой из них сопровождалась многочисленными проблемами.
И опыт, сын ошибок трудных...
Из своих "упражнений" я извлек несколько уроков. Во-первых, при выборе оборудования для платформы Linux не стоит гоняться за новинками: скорость разработки драйверов для этой операционной системы пока оставляет желать лучшего. Во-вторых, перед установкой Linux нужно узнать имена изготовителей, номера моделей и тип наборов микросхем всех плат компьютера, а также номера прерываний и адреса ввода/вывода сетевых и звуковых адаптеров. Тот, кто работает с Windows 2000 или Windows 9x, сможет собрать всю необходимую информацию с помощью Device Manager. Для этого нужно щелкнуть правой кнопкой мыши на значке любого периферийного устройства, например сетевой платы, а затем выбрать в контекстном меню команду Properties. На вкладке Resources будут показаны номер прерывания (IRQ) и адрес ввода/вывода (I/O address). В Windows NT аналогичную информацию можно найти на вкладке Resources программы Windows NT Diagnostics. Наконец, чтобы узнать, какая из конфигураций LILO работает на используемом компьютере, придется неоднократно переустанавливать Linux.
После сбора данных о платах компьютера и работоспособных конфигурациях LILO полученные сведения следует записать. Я, например, наклеил листок с этой информацией на системный блок. Догадываюсь, что кто-то может считать сбор подобных сведений пустой тратой времени. Безусловно, такая необходимость подчас раздражает, а процедура установки Linux на только что купленный компьютер может затянуться. Тем не менее эта маленькая исследовательская работа нам не в новинку - мы все проделывали ее несколько лет назад при установке Windows NT 3.1, Windows 3.x или OS/2.
Многие из тех, кто устанавливает Linux, используют Windows NT и хотят иметь возможность альтернативной загрузки любой из этих систем. Поэтому я бы предложил поставщикам Linux вот что: создать программу установки, которая проверяла бы содержимое реестра Windows NT, при его наличии, и читала список установленного оборудования, а также параметры конфигурации; затем она сравнивала бы список имеющихся драйверов Linux со списком адаптеров из реестра и сообщала, какие компоненты системного оборудования не поддерживает.
Марк МИНАСИ
Марк Минаси - редактор Windows NT Magazine, MCSE, и автор книги "Mastering Windows NT Server 4.0" (издательство Sybex).
С ним можно связаться по адресу: .
* WINE - свободно распространяемая инструментальная подсистема Linux, позволяющая запускать программы для Windows.
I. Потоковый редактор sed
Команда имеет формат:
sed [ -n ] [ -e script ] [ -f sfile ] [ files ]
Команда копирует файлы (по умолчанию со стандартного
входа) на стандартный выход, редактирует их в соответствии со
своими(!) командами, размещенными в "script" (в командном
файле или строке редактора [а не shell!]). По флагу "-f"
берет берет файл команд из файла "sfile"; Если есть
только опция "-e script", то флаг "-e" можно
опустить. Флаг "-n" подавляет вывод (происходящий по
умолчанию). "script" состоит из команд редактирования,
по одной в строке, имеющих формат:
[ addr [ , addr ] ] cmd [ args ]
"sed" циклически преобразует входные строки
в выходные.
Адреса "[ addr [ , addr ] ]" - это либо
номера строк, либо последняя строка (символ "$"), либо
регулярные выражения в стиле редактора "ed":
"\" используется в многострочных командах
для экранирования продолжения строки.
"." совпадает с любым символом.
Если адреса не указаны - просматриваются все входные
строки.
Если один адрес, то выбираются совпадающие строки.
Если заданы два адреса, выбираются строки в заданном
интервале.
"!cmd" выполняется команда "cmd",
для строк, которые не были выбраны по адресам.
Для следующих (основных) функций (команд) максимальное
число допустимых адресов указано в скобках.
(1)a\ text Добавляет text после указанной строки
Команда:
who
Результат:
root tty1 Mar 13 17:23
mas tty2 Mar 13 18:50
sae tty6 Mar 13 17:24
sae tty5 Mar 13 17:24
Пример:
who | sed '2a\
новая строка
'
Результат:
root tty1 Mar 13 17:23
mas tty2 Mar 13 18:50
новая строка
sae tty6 Mar 13 17:24
sae tty5 Mar 13 17:24
(2)b label Осуществляет переход к команде ("cmd")
"label:cmd". Если метка ("label") отсутствует,
то переход на конец командного файла.
Пример:
who | sed '2a\
новая строка
b lb
2d
: lb 3d
'
Результат:
root tty1 Mar 13 17:23
Иерархия файловых систем
В корневой файловой системе должна находиться информация для загрузчика и основные файлы, необходимые в процессе старта системы (например, ядро). Здесь же должны размещаться файлы конфигурации и все, что необходимо для монтирования других файловых систем, включая такие утилиты, как mount. Чтобы обеспечить возможность восстановления системы после сбоев, в корневой файловой системе должны присутствовать все утилиты, необходимые администратору для диагностирования проблем и реконструкции системы после любой аварийной ситуации. Здесь же должны быть расположены и те утилиты, которые необходимы для восстановления данных с резервных копий.
По ряду причин размер корневой файловой системы желательно сделать достаточно малым.
Иногда приходится монтировать корневую файловую систему с носителя малого объема. Корневая файловая система обычно содержит неразделяемые файлы, специфичные для конкретной системы. Разделяемые файлы можно разместить на сетевых дисках. Это позволяет использовать в качестве рабочих станций в сети компьютеры с маленькими по объему локальными жесткими дисками. Маленькая корневая файловая система менее подвержена разрушению в случае сбоев. Из стандарта можно сделать вывод о том, что в корневой файловой системе обязательно должны целиком располагаться каталоги /bin, /dev, /etc, /lib, /sbin и, возможно, /root. Каталог /boot в силу аппаратных ограничений может оказаться необходимым разместить на отдельном разделе диска, расположенном целиком в пределах первых 1024 цилиндров загрузочного диска. Остальные подкаталоги корневого каталога (home, mnt, opt, tmp, usr, var) могут размещаться в других файловых системах (на других разделах или дисках). Более того, в стандарте явно постулируется, что в каталогах /usr, /opt и /var размещаются такие файлы, которые могут располагаться в других разделах диска или в других файловых системах. Разработчики стандарта советуют в том случае, когда /var не может быть размещен в отдельном разделе диска, переместить каталог /var из корневого раздела в раздел с каталогом /usr. Однако /var нельзя делать ссылкой на /usr потому что это затрудняет разделение /usr и /var и может привести к конфликту имен, лучше уж сделать /var ссылкой на /usr/var.
Отметим, что в статье речь идет только о требованиях и рекомендациях стандарта FHS, разработанного с ориентацией на операционные системы Linux и BSD. Даже конкретные дистрибутивы Linux не во всем следуют этому стандарту. Так, в Red Hat Linux версий 7.3 и 8.0 каталог /etc/opt хотя и создан, но пуст, а конфигурационные каталоги пакетов размещаются непосредственно в /etc. Можно указать и другие отклонения от стандарта. Но все же в основном структура каталогов выдерживается в соответствии с FHS, так что знакомство с этим стандартом, безусловно, полезно всем пользователям Linux, а тем более разработчикам.
II. Язык обработки шаблонов awk
awk - команда контекстного поиска и преобразования текста. Она - фильтр. Ее можно рассматривать как оболочку "awk" в оболочке "shell".
Именованные каналы
Канал - это простейшее, но очень удобное и широко применяемое средство обмена информацией между процессами. Все, что один процесс помещает в канал (буквально - в "трубу"), другой может оттуда прочитать. Если два процесса, обменивающиеся информацией, порождены одним и тем же родительским процессом (а так чаще всего и происходит), канал может быть неименованным. В противном случае требуется создать именованный канал, что можно сделать с помощью программы mkfifo. При этом собственно файл именованного канала участвует только в инициации обмена данными.
Имя компьютера
Я всегда переименовываю значок My Computer. Для этого достаточно просто щелкнуть правой кнопкой мыши, в открывшемся меню выбрать команду Rename и ввести новое имя компьютера. Специалисты службы поддержки часто переименовывают этот значок на клиентских машинах из-за того, что пользователи обычно не знают, где посмотреть имя рабочей станции. В операционной системе Windows NT 4.0, чтобы увидеть это имя, нужно щелкнуть правой кнопкой мыши на значке Network Neighborhood и выбрать в контекстном меню команду Properties. В Windows 2000 указанные действия приведут к появлению диалогового окна, в котором можно изменить сетевые настройки, однако имя компьютера там отсутствует. Вместо этого нужно щелкнуть правой кнопкой мыши на значке My Computer, выбрать в меню пункт Properties, открыть диалоговое окно System Properties, и в нем, открыв вкладку Network Identification, найти имя машины. Если же переименовать значок My Computer, даже самый неопытный пользователь легко найдет имя своего компьютера.
Инсталляция FreeBSD в качестве Internet-сервера
, МИСиС
Много чего написано про инсталляцию Windows от 3.* до NT; немного меньше - про инсталляцию OS/2, а вот детальное описание инсталляции Unix я не встречал. Попробую рассказать, как установить и настроить FreeBSD. Это - мой личный опыт, так что возможны расхождения во мнениях с гуру, а также пробелы, тем более что многие вещи я пишу прямо по горячим следам: сделал, понял - и сразу на всеобщее обозрение. :-)
Я работаю в условиях, когда я - единственый администратор на машине, на которой нет никакой особо секретной информации. Вокруг меня нет серьезных хакеров (по крайней мере они себя никак не проявляют). Основная задача - обеспечить почту, в основном по UUCP. Это накладывает некоторый отпечаток на мои воззрения по поводу администрирования.
Инсталляция ОС Linux на компьютер с Windows
В. Костромин
Настоящий текст является главой 2 из книги В.Костромина "Linux для пользователя", которая вышла в издательстве "БХВ-Петербург" в серии "Самоучитель" в 2002 году. Разрешается копировать и публиковать данный текст при условии сохранения ссылки на источник.
К фирменным русифицированным дистрибутивам Linux прилагается краткое руководство по инсталляции системы. А на дистрибутивном диске (дисках) обычно имеется и достаточно полное руководство по установке Linux в электронной версии (такое руководство для Red Hat Linux Russian Edition вы можете найти на сайте ). Кроме того, на русском языке опубликована отличная книга М. Уэлша и др. [П 4.1], которую легко найти и в Интернете под названием "Инсталляция Linux и первые шаги" (правда, в одной из более ранних редакций). Поэтому я не буду в этой книге подробно излагать этапы инсталляции системы, отсылая читателя к упомянутым руководствам. Вместо этого расскажу только о том, что нужно знать и приготовить до начала инсталляции, а также подробно рассмотрю вопрос об особенностях установки Linux на компьютер, уже работающий под одной из ОС семейства Windows, и об организации многовариантной загрузки.
Дело в том, что большинство из тех, кто начинает осваивать Linux, являются уже опытными пользователями ОС Windows, чаще всего Windows 95 или Windows 98. Действительно, пока еще вряд ли Linux является той операционной системой, с которой пользователь начинает свое знакомство с компьютером. И, естественно, если пользователь раньше работал с ОС Windows и решил поэкспериментировать с Linux, то ему не хочется терять свою привычную среду и все, что было наработано, настроено и отлажено под Windows. К счастью, терять и не обязательно, потому что на одном компьютере вполне могут ужиться две и даже больше ОС (хватило бы места на диске!). Именно поэтому ниже будет рассказано о том, как установить ОС Linux на компьютер, который до тех пор работал под одной из операционных систем фирмы Microsoft
Использование процессора
Счетчик Process:%Processor Time оценивает степень загрузки процессора приложением. Это важно знать при выявлении узких мест в работе операционной системы. Вместе с тем, при использовании данного счетчика надо быть очень внимательным. Например, некоторые приложения могут находиться в цикле ожидания в преддверии наступления определенных системных событий. Такие циклы способны вызывать стопроцентную загрузку процессора, что, однако, не мешает рабочей станции запускать другие процессы.
В большинстве случаев эти циклы имеют низкий приоритет и уступают процессорные ресурсы другим приложениям, которые после старта требуют исполнения своего кода. Когда ранние версии Web-браузера Netscape отрабатывали циклы, обеспечивающие стопроцентную загрузку процессора, никто не мог точно сказать, что делает программа: интенсивно обрабатывает данные или ожидает наступления события. Конечно, при активном использовании диска, дефиците свободной памяти и общем снижении производительности, сопровождаемом стопроцентной загрузкой процессора со стороны приложения, можно сказать, что в таком приложении, скорее всего, кроется ошибка.
Включенная в Windows NT Resource Kit утилита CPU Stress позволяет искусственно загрузить процессор и выяснить, как система должна себя вести в подобных ситуациях. С помощью этого средства можно настраивать приоритеты и уровень активности четырех потоков, контролировать степень загруженности процессора приложениями и определять значимость каждого потока для операционной системы (например, оценивать, какие потоки с низким приоритетом уступают управление более приоритетным потокам).
Использование RPM
,
Привет! Теперь и я решил написать кое-что изученное мной. А именно как пользоваться одной из самых важных утилит дистрибьюшена . Пакет предназначен для упрощения установки и убивания других программных продуктов (будем называть их пакетами (packages) а RPM - RPMмом!), соответствующим образом оформленных (что-то вроде инсталлятора и деинсталлятора в Виндах, только круче). Прежде всего хочу сказать какие достоинства и недостатки таит его использование.
Начнем с достоинств:
Превосходный способ доставки. В добавок, возможность инсталляции по FTP. Удобная и быстрая установка программных продуктов. При этом нет необходимости сливать все во временный директорий. Проверка вашей системы на наличие компонент необходимых устанавливаемому пакету при инсталляции, т.е.
Наличие определенных файлов, например командного интерпретатора bash для запуска скриптов установки и деинсталляции. Наличие необходимых библиотек и проверок их версий. Наличие необходимых пакетов, требуемых для данного.
Простое удаление пакетов из системы. При этом осуществляется проверка наличия пакетов, функционирование которых зависит от удаляемого. Апгрейд (Upgrade) пакетов, с контролем версии (запрет дегрейда (Degrade)), и всего описанного ранее. Просмотр информации о пакете: что делает, кто сделал, где взять, содержимые файлы, и т.д. Есть много утилит, обеспечивающих пользовательский интерфейс. Существуют так называемые репозитории (хранилища) пакетов, с организованным в них поиском. Каждый пакет (установленный и нет) имеет свое место в иерархии, т.е. существует общая иерархия пакетов, с помощью которой просто определить что делает этот пакет. Обеспечивается возможность поиска к какому пакету относится данный файл или директорий. Комплексная проверка состояния пакетов в системе: что изменялось, что запортилось, что случайно удалили, и т.д.
Недостатки:
Большинство (но не все, например GNOME и IceWM) пакетов готовятся немного с запаздыванием. Особенно это относится к пакетам, хранящимся в репозитории Red Hat.
Но, в основном, этот список хранит стабильные версии пакетов. Немного проблематично искать пакеты, которые необходимы для основного пакета. Если часть программного обеспечения поставляется вне RPM-пакетов, то проблематична даже и установка. Для хранения информации требуется достаточно много места на диске. Информация хранится в файлах. А это, как известно, приводит иногда к разочарованиям при их потере.
Если кто-то хочет еще добавить - это не возбраняется.
Итак, по-порядку...
Все пакеты имеют расширение .rpm. Их по содержимому, как обычно, можно разделить на два класса: пакеты с программами в двоичном коде, и пакеты с исходным кодом. Имя пакета задается следующим образом: "имя-программы"-"версия"-"релиз"."платформа или src".rpm, например недавний релиз IceWM называется так: icewm-0.9.25-1.i386.rpm, т.е. icewm версии 0.9.25, релиз первый, для платформы PC-x86. Добавлю, что необходимо смотреть для каких библиотек он скомпилирован (определяется по имени поддиректория, откуда был выкачен, например ./RPMS/..../i386/libc6/icewm...., icewm для библиотек libc6 (glibc2 ?) (для RedHat не меньше 5.0 пойдет). Я еще чайник здесь.). RPMS - имя директория с двоичными пакетами, именно в нем надо искать бинары. Сырцы (исходный код) в большинстве репозиториев лежат в SRPMS (с буквой "S" в начале), т.е. исходники icewm 0.9.25 будут лежать в файле .../SRPMS/icewm-0.9.25-1.src.rpm.
Рассмотрим подробнее первый класс, хотя большинство, а именно 57% линуксоидов инсталлирует с сырцов.
Для начала рассмотрим самый "сложный" вариант - работа с rpm в командной строке. Чтобы проинсталлировать пакет наберите команду: bash$ rpm -i "полное имя пакета"
но лучше, используя icewm для примера, набрать bash$ rpm -ivh icewm-0.9.25-1.i386.rpm
а еще лучше, чтобы учесть возможный апгрейд (если у вас инсталлирован пакет ранней версии): bash$ rpm -Uvh icewm-0.9.25-1.i386.rpm
Здесь используются следующие опции: i - install package (установить пакет), U - upgrade package (апгрейд пакета).
vh - для статус бара и дополнительной информации. Опция U делает не только апгрейд, если установлена старая версия, но и осуществляет установку пакета, если его нет вообще. Я пользуюсь именно -Uvh.
Можно, например, запустить bash$ rpm -Uvh ftp://sf.irk.ru/pub/linux/redhat-5.2/i386/RPMS/apache-1.3.3-1.i386.rpm
(за точность воспроизведения не ручаюсь) тогда вы проинсталлируете Apache прямо с замечательного сайта (качка достигает 10kbps). Если надо установить проксю используются дополнительные опции.
Если установка завершена успешно то rpm ни чего не ответит, иначе выругает(ся). Если этому пакету что-то еще нужно, не беспокойтесь он [rpm] вам скажет.
Замечу еще, иногда бывает необходимо использовать как новую так и старую библиотеки, например для старого GIMP и нового GNOME с еще недоразвитыми библиотеками. В этом случае используйте -ivh опции для нового пакета. Таким образом у вас будут обе программы работать, и места в два раза больше затрачено, но при этом старая библиотека будет цела и невредима.
Если в системе уже были какие-то файлы, с теми же именами, что и в пакете, то rpm сохраняет их как .rpmsave файлы, что экономит ваши усилия по настройке.
Кстати, если вы используете Midnight Commander (mc), то вместо имени файла можно писать %f и установить курсор на сам файл. Более того mc обеспечивает специальный сервис для .rpm и .deb (Debian) пакетов. Об этом позже.
Удаление пакетов из системы осуществляется так же просто. bash$ rpm -e apache
Но в данном случае надо указать только имя пакета. Если он никакому другому пакету не нужен то его как ни бывало.
Если вам не нравятся сообщения, что то или се нельзя удалять или инсталлировать, то можно попробовать добавить опцию --force. Она полезна для переинсталляции пакета, так как rpm не хочет заново инсталлировать тот же самый пакет, если не настоять таким образом ;-). Или есть еще более крутые меры воздействия и убеждения (полезны особенно при потере информации об установленных пакетах. Бывает и такое.): --nodeps - не проверять зависимости и --replacefiles - заменять все старые файлы на новые не переименовывая их в .rpmsave.
Как узнавать информацию о пакете. Я пользуюсь Midnight Commanderом для этого (подождите, см. ниже), но этот способ не приемлем для FTP (требует полной закачки файла). Здесь я научился набирать bash$ rpm -qpi FTP://sf.irk.ru/......./apache-1.3.3-1.i386.rpm
и подождав 5 сек получаю всю необходимую информацию
Name : apache Distribution: Manhattan Version : 1.3.3 Vendor: Red Hat Software Release : 1 Build Date: Tue Oct 13 16:08:03 1998 Install date: (not installed) Build Host: porky.redhat.com Group : Networking/Daemons Source RPM: apache-1.3.3-1.src.rpm Size : 1980776 License: Freely distributable and usable Packager : Red Hat Software Summary : Leading World Wide Web server Description : Apache is a full featured web server that is freely available, and also happens to be the most widely used.
Мне информации предостаточно, но иногда бывает так, что есть необходимость увидеть список файлов внутри bash$ rpm -qpl FTP://sf.irk.ru/......./apache-1.3.3-1.i386.rpm
и получаю
/etc/httpd/conf /etc/httpd/conf/access.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/httpd/conf/srm.conf /etc/httpd/logs /etc/httpd/modules ................... /usr/sbin/ab /usr/sbin/httpd /usr/sbin/logresolve /usr/sbin/rotatelogs /var/cache/httpd /var/log/httpd
и т.д. (в смысле другую информацию). Найти другие опции можно или набрав rpm, man rpm или RPM-HOWTO.XXX, есть русский перевод в разделе документации на .
Опции: q - query (запрос), p - package (пакет), i - information (информация), l - file list. Все очевидно как в раю.
Замечу, однако, что если вы хотите просмотреть инфу об установленном пакете, то вам надо убрать буковку p из списка опций и задавать только имя пакета, т.е. bash$ rpm -qi apache
узнает все об проинталлированом Апаче.
Теперь рассмотрим как узнать установлен ли данный пакет и как проверить интегрированность системы.
Сначала, например мы хотим узнать установлен ли в нашей системе IceWM.
bash$ rpm -q icewm icewm-0.9.25-1
Как видно он у меня есть IceWM версии 0.9.25, релиз 1.
А теперь хотим узнать из какого пакета мы получили файл mc
bash$ whereis mc mc: /usr/bin/mc /usr/lib/mc /usr/man/man1/mc.1 bash$ rpm -qf /usr/bin/mc mc-4.5.3-1
или еще круче (замечание ) bash$ rpm -qf `whereis mc`
Теперь проверим все ли файлы Midninght Commanderа в порядке: bash$ rpm -V mc Unsatisfied dependencies for mc-4.5.3-1: pam >= 0.59, /sbin/chkconfig , ld-linux.so.2, libc.so.6, libgpm.so.1, libm.so.6, libncurses.so.4, libslang.so.0, /bin/sh, /usr/bin/perl S.5....T /usr/lib/mc/mc.ext
Исходя из этой информации нарушены некоторые зависимости, а именно нет пакета pam, версией больше 0.59, и ряда других файлов. Сие обидно, конечно, но недавно произошел сбой на моей машине и потерялась информация об инсталлированных пакетах. Поэтому на эту информацию я не обращаю (сейчас) большого внимания, а вот последняя строчка говорит мне о том, что файл /usr/lib/mc/mc.ext с глобальными настройками был мной модифицирован, это сообщают мне буквы S - size (размер файла), 5 - MD5 сумма (что-то вроде CRC?), T - time (время). Есть и другие буквы. Если с файлом все в порядке (информация о котором совпадает с информацией в ресурсном файле) то он на экран не выводится.
Предположим, что вы кому-то однажды установили Red Hat Linux, и, вдруг, тот товарищ обращается к вам с просьбой узнать, что он такое наделал, что машина вдруг перестала нормально работать. В этом случае большую помощь в поиске его исправлений поможет команда:
bash$ rpm -Va Unsatisfied dependencies for tetex-latex-0.9-6: tetex = 0.9, /bin/sh , /bin/sh .M...... /usr/share/texmf/tex/generic/xypic/xylatex.ini S.5....T /usr/share/texmf/web2c/elatex.efmt S.5....T /usr/share/texmf/web2c/elatex.log S.5....T /usr/share/texmf/web2c/latex.fmt S.5....T /usr/share/texmf/web2c/latex.log S.5....T /usr/share/texmf/web2c/pdflatex.fmt S.5....T /usr/share/texmf/web2c/pdflatex.log Unsatisfied dependencies for tetex-russian-2.0-6: /bin/sh , tetex >= 0.9, patch ..5..... /usr/share/texmf/fonts/source/lh/base/lypseudo.mf ..5..... /usr/share/texmf/fonts/source/lh/base/nodraw.mf ..5..... /usr/share/texmf/tex/latex/cyrsam/antiqua.fd ..5..... /usr/bin/gyahtzee ..5..... /usr/bin/mahjongg ..5..... /usr/bin/same-gnome ..5.....
c /etc/X11/wmconfig/printtool .M...... /usr/lib/libImlib.so.1 .M...... /usr/lib/libgdk_imlib.so.1
Что ж вы сделали? ... А вы проверили (V - verify) все (a - all) пакеты, установленные в системе.
Это конечно не все, что может rpm, но самое основное, чем я, лично, пользуюсь.
Теперь несколько слов, как я и обещал, об программках, работающих с rpm
Midnight Commander - замечательная системка, позволяет просматривать .rpm и .deb пакеты как поддиректории файловой системы, для этого надо только нажать ввод на rpm-пакете. Обращу внимание только на ряд виртуальных файлов и директориев (они все пишутся большими буквами).
HEADER - заголовок пакета, то, что получаете по rpm -qi .... Содержимое просматривается по F3. *INSTALL и *UPGRADE, если вы нажмете на них ввод, то Midnight Commander, соответственно, проинсталлирует или апргрейднет этот пакет. Заметьте, чрезвычайно удобно. /INFO - директорий с разнообразной информацией, тоже в виде файлов. (Разберитесь с ним сами).
glint - спецпрограммка для X-ов, непосредственно предназначена для управлением rpmмом. Она отображает пакеты в виде иерархии (как установленные, так и директорий с неустановленными пакетами). Входит в стандартный дистрибьюшн Red Hat.
purp - ncursers-ный tty-шный пакет, удобен для удаления ненужных пакетов не запуская X-ы. Тоже отображает иерархию.
grpm,gtkrpm - GTK+-ные программки. Признаюсь честно - я их смотрел мельком. Информацию о них смотрите на .
Использование возможностей Disk Management
При работе с Windows NT создание томов было утомительным занятием: приходилось выбирать свободные участки, тип тома, его размер, осуществлять последующую перезагрузку и форматирование из командной строки или из Windows Explorer. В состав Disk Management входят мастера, которые помогают выполнить все необходимые действия.
ЭКРАН 5. Просмотр информации о настройках тома
Для создания нового тома (на динамическом диске), нового раздела или логического устройства (на обычном диске) следует щелкнуть правой кнопкой мыши на нераспределенном пространстве устройства того же, как и у создаваемого устройства, типа. В контекстном меню следует выбрать команду Create Volume Wizard, причем для динамических дисков запустится мастер Create Volume Wizard, а для обычных - мастер Create Partition Wizard. В зависимости от того, что создается, будет запущен специально настроенный интерактивный диалог, позволяющий указать все необходимые параметры: тип тома, его размещение, метод идентификации (символьный или с помощью монтирования), а также формат тома. В самом конце будет показана полная информация (см. Экран 5), так что перед выполнением операции остается возможность параметры изменить. Как только закончится процесс подготовки и форматирования, можно использовать новый том без перезагрузки системы. Логически законченная последовательность действий Disk Management довольно сильно контрастирует с хаотичным методом создания новых томов с помощью Disk Administrator.
ЭКРАН 6. Создание зеркала тома
Довольно просто поменять и структуру существующих томов. Для дублирования тома нужно щелкнуть правой кнопкой мыши на томе динамического диска и выбрать в контекстном меню пункт Add Mirror. В открывшемся диалоговом окне (см. Экран 6) следует выбрать динамический диск, на котором достаточно нераспределенного пространства для размещения зеркала существующего дублируемого тома. После подтверждения (кнопкой Add Mirror) будет запущен процесс копирования существующих данных на вторую половину только что созданного дискового массива с дублированием. Его можно будет использовать сразу же после копирования всех данных.
Если необходимо увеличить размер обычного тома (например, тома на одном динамическом диске) за счет добавления пространства с другого диска или увеличить простой либо составной том, нужно щелкнуть на томе правой кнопкой мыши и выбрать в контекстном меню команду Extend Volume. На экране появится список динамических дисков со свободным нераспределенным пространством. Нужно просто выбрать один из них, и том будет увеличен. Расширенный том можно использовать также без перезагрузки. Однако к расширению готовы только те тома, которые были изначально созданы на динамическом диске. Тома, бывшие разделами на обычном диске перед его конвертированием в динамический, расширять нельзя.
Избегание тупиков
Поскольку по умолчанию для IPC используются синхронные вызовы SEND и RECEIVE, могут возникать тупики, когда два или большее число процессов одновременно пытаются обмениваться сообщениями, и все процессы блокируются в ожидании один другого. Поэтому мы тщательно разрабатывали протокол избегания тупиков, предписывающий частичное, нисходящее упорядочение сообщений.
Упорядочение сообщений приблизительно соответствует разбиению на уровни, описанному в разд. 2.2. Например, обычным пользовательским процессам позволяется только посылать сообщения с использованием примитива SENDREC серверам, реализующим интерфейс POSIX, а эти серверы могут запрашивать сервисы от драйверов, которые, в свою очередь, могут производить вызовы ядра. Однако для асинхронных событий, таких как прерывания и таймеры, требуются сообщения, посылаемые в противоположном направлении, от ядра серверу или драйверу. Использование синхронных вызовов SEND для передачи этих событий может легко привести к тупику. Мы избегаем этой проблемы путем использования для асинхронных событий механизма NOTIFY, который никогда не блокирует вызывающую сторону. Если оповестительное сообщение не может быть доставлено процессу-адресату, оно сохраняется в его элементе таблицы процессов до тех пор, пока он не выполнит RECEIVE.
Хотя протокол избегания тупиков поддерживается обсуждавшимся выше механизмом масок посылки сообщений, мы также реализовали в ядре распознавание тупиков. Если вызов примитива в некотором процессе непредусмотренным образом привел бы к возникновению тупика, то выполнение примитива не производится, и вызывающей стороне возвращается сообщение об ошибке.
Изменение нескольких правил одной командой
Иногда одна команда может воздействовать сразу на несколько правил. Это может происходить по двум причинам.
Во-первых, если вы указываете символический адрес машины, а его разрешение через DNS дает несколько различных IP-адресов, то ipchains будет действовать так, как если бы вы ввели несколько команд со всеми возможными сочетаниями IP-адресов. Например, если www.foo.com разрешается в 3 адреса, а www.bar.com - в 2 адреса, и вы ввели команду ipchains -A input -j reject -S www.bar.com -d www.foo.com
то ко входной цепочке добавится 6 правил.
Во-вторых, ipchains может выполнить несколько действий, если вы указали флаг '-b' (bidirectional). При этом ipchains будет действовать так, как если бы вы ввели команду дважды, во втором случае поменяв местами параметры '-s' и '-d'. Например, чтобы запретить пересылку пакетов от и к 192.168.1.1, можно воспользоваться командой: ipchains -b -A forward -j REJECT -s 192.168.1.1
Флаг '-b' может применяться в командах '-A', '-C', '-I', '-D' (кроме удаления по номеру правила).
Еще один полезный флаг - '-v' (verbose), который позволяет точно узнать, что сделала ваша команда. Он особенно полезен, если ваша команда может воздействовать сразу на несколько правил. Например, можно проверить, как работает пересылка фрагментов сразу в обе стороны между 192.168.1.1 и 192.168.1.2: ipchains -v -b -C input -p tcp -f -s 192.168.1.1 -d 192.168.1.2 -i lo
Пример настройки маскарадинга
ipchains -P forward DENY ipchains -A forward -s 192.168.1.0/24 -j MASQ echo 1 > /proc/sys/net/ipv4/ip_forward
Сначала отключается вся пересылка пакетов, потом включается маскарадинг в предположении, что в локальной сети используются адреса из пула 192.168.1.x.
Можно усложнить правила маскарадинга, указав адреса конкретных машин, для которых надо его осуществлять: ipchains -P forward DENY ipchains -A forward -s 192.168.1.2 -j MASQ ipchains -A forward -s 192.168.1.8 -j MASQ echo 1 > /proc/sys/net/ipv4/ip_forward
Остальные машины, кроме 192.168.1.2 и 192.168.1.8 доступа в интернет не получат.
Пример настройки фильтра пакетов
Предположим, что у вас есть PPP-соединение ('-i ppp0'). Вы читаете конференции (-p TCP -s news.virtual.net nntp) и почту (-p TCP -s mail.virtual.net pop-3). Иногда скачиваете по ftp свежее ядро для своего линукса (-p TCP -y -s ftp.kernel.org ftp-data). Бродите по www через прокси-сервер своего провайдера (-p TCP -d proxy.virtual.net 8080), но не любите рекламу с www1.reklama.ru и rb2.design.ru (-p TCP -y -d 195.46.160.46, -p TCP -y -d 212.24.32.76). Вы не возражаете против пользования ftp-сервером на вашей машине (-p TCP -d $LOCALIP ftp), но не хотите, чтобы кто-то снаружи делал вид, что он из вашей локальной сети (-s 192.168.1.0/24) - это называется IP-спуфинг (spoofing), и в ядрах 2.1.x и выше есть более правильные средства для защиты от него.
Итак:
Вы не хотите, чтобы ваши локальные процессы (в т.ч. Netscape) соединялись с www1.reklama.ru и rb2.design.ru: ipchains -A output -d 195.46.160.46 -j REJECT ipchains -A output -d 212.24.32.76 -j REJECT
Вы устанавливаете приоритеты для исходящих пакетов (для входящих этого делать нет смысла). Поскольку этих правил довольно много, можно выделить их в отдельную цепочку по имени ppp-out: ipchains -N ppp-out ipchains -A output -i ppp0 -j ppp-out
Минимальная задержка для www-трафика и telnet'а: ipchains -A ppp-out -p TCP -d proxy.virtual.net 8080 -t 0x01 0x10 ipchains -A ppp-out -p TCP -d 0.0.0.0/0 telnet -t 0x01 0x10
Низкая стоимость для данных ftp, nntp, pop3: ipchains -A ppp-out -p TCP -d 0.0.0.0/0 ftp-data -t 0x01 0x02 ipchains -A ppp-out -p TCP -d 0.0.0.0/0 nntp -t 0x01 0x02 ipchains -A ppp-out -p TCP -d 0.0.0.0/0 pop-3 -t 0x01 0x02
Существуют некоторые ограничения на пакеты, приходящие по интерфейсу ppp0, выделим их в отдельную цепочку по имени ppp-in: ipchains -N ppp-in ipchains -A input -i ppp0 -j ppp-in
Никакие пакеты, приходящие из ppp0 не должны притворяться, что они с адресов 192.168.1.*, т.е. из локальной сети. Если же таковые появятся, то их надо занести в журнал ('-l') и уничтожить: ipchains -A ppp-in -s 192.168.1.0/24 -l -j DENY
Разрешим UDP-пакеты для DNS (поскольку у вас работает кэширующий DNS-сервер, который пересылает все запросы на 203.29.16.1, то и ответов вы ожидаете только оттуда), а также входящие ftp-пакеты и ответные ftp-data (которые должны быть с портов выше 1023, но не с портов X11 в районе 6000): ipchains -A ppp-in -p UDP -s 203.29.16.1 -d $LOCALIP dns -j ACCEPT ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 1024:5999 -j ACCEPT ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 6010: -j ACCEPT ipchains -A ppp-in -p TCP -d $LOCALIP ftp -j ACCEPT
Ну и, наконец, все локальные пакеты на эту же машину вполне допустимы: ipchains -A input -i lo -j ACCEPT
Политика по умолчанию для входной цепочки - DENY, то есть все остальное уничтожается: ipchains -P input DENY
Примечание: правила не обязательно добавлять именно в таком порядке, поскольку пока вы их добавляете, некоторые нежелательные пакеты могут проскочить через фильтр. С точки зрения безопасности наиболее правильно сначала установить политику DENY для входной цепочки, а потом добавлять новые правила. Однако, если добавляемые правила потребуют разрешения символических имен с помощью DNS, у вас могут возникнуть неприятности. Я вас предупредил ;-).
Измерения производительности
Производительность является проблемой, сопутствующей минимальным ядрам на протяжении десятилетий. Поэтому немедленно встает вопрос: во что обходятся обсуждавшиеся выше изменения? Чтобы разобраться в этом, мы создали прототип, состоящий из небольшого ядра и поддерживаемого им набора драйверов устройств и серверов, работающих в режиме пользователя. В качестве основы прототипа мы начали с использования системы MINIX 2 из-за ее небольшого размера и долгой истории. Код системы изучался многими десятками тысяч студентов в сотнях университетов в течение 18 лет, и в последние 10 лет почти не поступали сообщения об ошибках, имеющих отношение к ядру; по-видимому, отсутствие ошибок связано с малыми размерами ядра. Затем мы значительно изменили код, удалив из ядра драйверы устройств и добавив средства повышения надежности, обсуждавшиеся в разд. 3. Таким образом, мы получили практически новую систему MINIX 3 без потребности в написании большого объема кода, не существенного для данного проекта, такого как драйверы и файловая система.
Поскольку нас интересует стоимость изменений, обсуждавшихся в данной статье, мы сравниваем свою систему с базовой системой, в которой драйверы устройств являются частью ядра, путем запуска одних и тех же тестов на обеих системах. Это гораздо более чистая проверка, чем сравнение нашей системы с Linux или Windows, которое напоминало бы сравнение яблок с ананасами. Таким сравнениям часто мешают различия в качестве компиляторов, в стратегиях управления памятью, в файловых системах, в объеме выполненной оптимизации, в зрелости систем и во многих других факторах, которые могут полностью затенить все остальное.
Тестовой системой был 2.2 GHz Athlon (более точно, AMD64 3200+) с 1 Гб основной памяти и 40 гигабайтным диском IDE. Ни один из драйверов не был оптимизирован для работы в пользовательском режиме. Например, мы ожидаем, что на Pentium сможем обеспечить защищенным образом прямой доступ драйверов устройств к требуемым им портам ввода-вывода, устраняя, таким образом, многие вызовы ядра. Однако для поддержания переносимости интерфейс не будет изменяться. Кроме того, в настоящее время в драйверах используется программируемый ввод-вывод, что гораздо медленнее использования DMA. После реализации этих оптимизаций мы ожидаем существенного повышения эффективности. Тем не менее, даже при использовании существующей системы ухудшение производительности оказалось вполне разумным.
Изоляция драйверов с использованием виртуальных машин
В другом проекте по инкапсуляции драйверов это делается с использованием понятия виртуальной машины для их изоляции от других частей системы [19, 18]. Когда драйвер вызывается, он запускается на другой виртуальной машине, не в той, в которой работает основная система, так что его сбой не портит основную систему. Подобно Nooks, этот подход полностью фокусируется на выполнении унаследованных драйверов для унаследованных операционных систем. Авторы не утверждают, что для новых разработок хорошим подходом является включение ненадежного кода в ядро с последующей защитой каждого драйвера путем его выполнения на отдельной виртуальной машине.
Хотя этот подход позволяет достичь намеченных целей, с ним связаны некоторые проблемы. Во-первых, имеются вопросы, связанные с тем, насколько могут доверять друг другу основная система и виртуальная машина, на которой выполняется драйвер. Во-вторых, запуск драйвера на виртуальной машине порождает проблемы с временными соотношениями и блокировками, поскольку все виртуальные машины работают в режиме разделения времени, и ядерный драйвер, разрабатывавшийся в расчете на выполнение без прерываний, может быть непредвиденным образом квантован во времени с непредусмотренными последствиями. В третьих, может потребоваться совместное использование несколькими виртуальными машинами некоторых ресурсов, таких как конфигурационное пространство шины PCI. В четвертых, механизм виртуальной машины потребляет дополнительные ресурсы, хотя соответствующие расходы соизмеримы с расходами нашей схемы: от 3% до 8%. Хотя для этих проблем предлагаются решения, подход в лучшем случае является громоздким и в основном подходит для защиты унаследованных драйверов в унаследованных операционных системах, а не для использования в новых разработках, которым посвящено наше исследование.
Изоляция драйверов в программном обеспечении
Одним из важных исследовательских проектов, в котором предпринимается попытка построить надежную систему в присутствии ненадежных драйверов устройств, является Nooks [26]. Целью Nooks является повышение надежности существующих операционных систем. Словами авторов, «мы нацеливаем существующие расширения на массовые операционные системы, а не предлагаем новую архитектуру расширений. Мы хотим, чтобы сегодняшние расширения выполнялись на сегодняшних платформах, по возможности, без их изменения.» Идея состоит в обратной совместимости с существующими системами, но небольшие изменения допускаются.
Подход Nooks состоит в том, чтобы оставить драйверы устройств в ядре, но заключить их в своего рода облегченную защитную оболочку, чтобы ошибки драйвера не могли распространяться на другие части операционной системы. Nooks работает путем вставки прозрачного уровня повышения надежности между обертываемым драйверов устройства и оставшейся частью операционной системы. Весь трафик управления и данных между драйвером и оставшейся частью ядра проверяется уровнем повышения надежности. При запуске драйвера уровень повышения надежности модифицирует таблицу страниц ядра таким образом, чтобы запретить доступ по записи к страницам, которые не являются частью драйвера, предотвращая, тем самым, их непосредственную модификацию. Для поддержки законного доступа по записи в структуры данных ядра Nooks копирует необходимые данные в драйвер, а после модификации переписывает их обратно.
Наша цель полностью отличается от цели Nooks. Мы не пытаемся сделать более надежными унаследованные системы. Будучи исследователями, мы задаем вопрос: как следует разрабатывать будущие операционные системы, чтобы с самого начала предотвратить возникновение этой проблемы? Мы полагаем, что правильная разработка будущих систем состоит в построении мультисерверной операционной системы и выполнении ненадежного кода в независимых процессах в пользовательском режиме, что сделает этот код гораздо менее вредным (как обсуждалось в разд. 3).
Несмотря на разные цели, имеются и технические аспекты, в отношение которых системы можно сравнивать. Рассмотрим всего несколько примеров. Nooks не может справиться со сложными ошибками, такими как непреднамеренное изменение в драйвере таблицы страниц; в нашей системе у драйверов отсутствует доступ к таблице страниц. Nooks не может справиться с бесконечными циклами; мы можем, поскольку, когда драйвер не отвечает правильным образом серверу реинкарнации, он принудительно завершается и перезапускается. Хотя на практике Nooks может в большинстве случаев справиться с недопустимыми записями в структуры данных ядра, в нашей разработке такие записи не допускаются структурно. Nooks не может справиться с драйвером принтера, который случайно пытается произвести запись в порты ввода-вывода, управляющие диском; мы отлавливаем 100% таких попыток. Заслуживает внимания и размер кода. Nooks включает 22,000 строк кода, почти в шесть раз больше размера всего нашего ядра и больше минимальной конфигурации всей нашей операционной системы. Трудно отойти от этой аксиомы: в большем по размеру коде содержится больше ошибок. Поэтому статистически в Nooks, вероятно, содержится в пять раз больше ошибок, чем во всем нашем ядре.