Linux глазами хакера - Михаил Флёнов
Шрифт:
Интервал:
Закладка:
□ информация о пользователе — здесь может быть полное имя, адрес и т.д.;
□ домашняя директория — каталог, принадлежащий пользователю, с которым он начинает работать при входе в систему;
□ интерпретатор команд — оболочка, которая будет выполнять команды пользователя. Если интерпретатора команд не должно быть, то указывается файл /sbin/nologin.
Теперь посмотрим на строку для пользователя root. Первый параметр — это имя, и, конечно же, тут написано root. Пароля в файле нет, т.к. вместо него мы видим символ x (или !!), а он находится в соответствующей записи файла /etc/shadow.
Следующие два параметра — уникальный идентификатор пользователя (UID) и уникальный идентификатор группы (GID). В файле не может быть двух записей с одним и тем же UID. По GID система находит группу, в которую входит пользователь и, соответственно, определяет права, которые даны этой группе, а значит, и пользователю.
Информация о пользователе может быть любой, и на работу системы она не влияет. Это просто пояснение, которое администратор использует по своему усмотрению.
Далее идет домашняя директория. Это каталог, который открывается пользователю при входе в систему.
Последний параметр — это командный интерпретатор, который будет обрабатывать пользовательские запросы. Наиболее распространенным является интерпретатор /bin/bash. Если команды пользователя не должны выполняться, то в качестве этого параметра устанавливается /sbin/nologin. Именно это значение введено для записей bin, daemon и многих других, потому что под ними нельзя входить в систему и они предназначены только для внутреннего обеспечения безопасности определенных программ.
Теперь посмотрим на файл /etc/shadow, а точнее, возьмем только первые три строки. Для примера этого будет достаточно:
root:$1$1emP$XMJ3/GrkltC4c4h/:12726:0:99999:7:::
bin:*:12726:0:99999:7:::
daemon:*:12726:0:99999:7:::
Здесь также несколько параметров, разделенных двоеточием. Нас будут интересовать первые два: login и пароль. По имени пользователя происходит связь записи из файла /etc/shadow с файлом /etc/password. А вот во втором параметре уже находится настоящая зашифрованная версия пароля. Но если вместо него стоят звездочки, то это запрет на использование записи. Например, для пользователей bin и daemon установлены именно звездочки, а значит, под этими учетными записями нельзя входить на компьютер.
3.3.2. Забытый пароль
Что делать, если вы забыли пароль, или хакер проник в систему и изменил его? Действительно, ситуация не из приятных, но все решаемо. Если у вашей учетной записи есть доступ к файлу /etc/shadow, то можно заняться его редактированием, а если нет, то посмотрим, как получить доступ с загрузочной дискеты.
Загрузившись с дискеты, вы должны войти в систему как root и подключить тот жесткий диск (или раздел диска), на котором находится папка /etc. Для этого нужно выполнить команду:
/sbin/mount -w hda1 /mnt/restore
Теперь директория /mnt/restore (желательно, чтобы она существовала до выполнения команды) указывает на главный раздел вашего жесткого диска, а файл паролей находится в каталоге /mnt/restore/etc/shadow. Откройте этот файл в любом редакторе и удалите пароль администратора root (просто сотрите весь текст между первым и вторым знаком двоеточия). В моем случае получилось:
root::12726:0:99999:7:::
Теперь обычным способом загружайте систему и в качестве имени пользователя вводите имя root. У вас даже не спросят пароль, потому что он пустой. Не забудьте поменять пароль, иначе это будет опасно для жизни. Это как электрику работать под высоким напряжением без средств защиты ☺.
Для смены пароля вы должны набрать команду passwd root, в ответ запустится программа, которая попросит вас дважды ввести код. Такой подход исключает случайную опечатку при наборе и может с определенной долей вероятности гарантировать, что сохранен верный пароль.
3.3.3. Модули аутентификации
Аутентификация на основе двух файлов /etc/passwd и /etc/shadow немного устарела и предоставляет нам слишком скудные возможности. Разработчики ядра ОС Linux стараются исправить ситуацию с помощью добавления новых алгоритмов шифрования, но все эти попытки чисто косметические, а нам необходимо кардинальное изменение.
Абсолютно новое решение для реализации аутентификации предложила компания Sun — Pluggable Authentication Modules (РАМ, подключаемые модули аутентификации).
Преимущество модульной аутентификации заключается в том, что не требуется перекомпиляция программы для их использования. Существуют модули для основных методов аутентификации, таких как Kerberos, SecureID, LDAP и др.
Конфигурационные файлы для каждого сервиса, который может использовать РАМ, находятся в директории /etc/pam.d. В большинстве случаев вам не придется создавать эти файлы вручную, потому что они устанавливаются во время инсталляции программы из RPM-пакета. Но вы должны знать их структуру, чтобы можно было изменить какие-то параметры в случае необходимости.
Каждая строка в конфигурационном файле состоит из четырех полей, разделенных пробелами:
□ тип модуля — может принимать одно из следующих значений:
• auth — аутентификация и проверка привилегий пользователей;
• account — распределение ресурсов системы между пользователями;
• session — поддержка сессии и регистрации действий пользователей;
• password — проверка пароля;
□ флаг — определяет параметры модуля. Здесь можно использовать три значения:
• required — обязательный;
• optional — необязательный;
• sufficient — достаточный;
□ полный путь к файлу модуля;
□ аргументы модуля.
Рассмотрим пример конфигурационного файла для FTP-сервиса, который находится в файле /etc/pam.d/ftp.
#%PAM-1.0
auth required /lib/security/pam_listfile.so item=user sense=deny
file=/etc/ftpusers onerr=succeed
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_shells.so
account required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
Это и все, что вам необходимо знать. Остальное берет на себя программа сервиса без нашего вмешательства.
3.4. Процессы
Для того чтобы эффективно управлять своим компьютером, вы должны досконально изучить свой сервер и работающие на нем процессы. Взломав ваш сервер, злоумышленник постарается запустить на нем какую-либо программу, которая незаметно будет выдавать хакеру права root в системе. Таких программ в сети великое множество, и к ним относятся различные троянские программы.
Процесс — это программа или ее потомок. При запуске программы создается новый процесс, в котором и работает код. Каждая программа должна функционировать с определенными правами. Сервисы, которые активизируются при старте системы, обладают правами root или nobody (без прав). Программы, которые выполняются из командной строки, наделены правами запустившего пользователя, если не указан SUID- или SGID-бит, при котором программа имеет права владельца.
Существует два основных типа процессов — фоновый (background) и центральный (foreground). Центральный процесс для определенного терминала может быть только один. Например, запустив по команде ls программу man для просмотра помощи, вы не сможете выполнять другие команды, пока не выйдете из программы man.
У тех, кто знаком с программой Midnight Commander, может возникнуть вопрос — а как же тогда работает МС и одновременно в нем можно выполнять команды? Ответ прост, процессы могут порождать другие процессы. То же происходит и в МС, но если его закрыть, то закроются и все порожденные процессы.
3.4.1. Смена режима
Фоновыми процессами являются все сервисы. Они выполняют свои действия параллельно с вашей работой. Но вы в фоновом режиме можете запустить любую программу. Для этого достаточно после указания команды через пробел поставить знак "&". Например, выполните сейчас следующую команду:
man ls &
В ответ на это вы не увидите файл помощи, а на экране появится только строка:
[1] 2802
После этого терминал снова готов работать, потому что центральный процесс запустил команду man ls в фоновом режиме, и свободен для выполнения новых директив.
А что же мы увидели в ответ на выполнение команды? В квадратных скобках показан порядковый номер фонового процесса, который мы запустили. Это число будет последовательно увеличиваться. В данном случае это первая команда, поэтому в квадратных скобках стоит единица. Это число формируется для каждого пользователя. Если войти в систему через второй терминал и запустить фоновый процесс, то вы увидите примерно следующее: