УЧЕТНЫЕ ФАЙЛЫ
Вероятно, наиболее важным среди протокольных файлов является учетный файл. В учетном файле имеется запись о каждом и всяком процессе, запускаемом в системе. Точную структуру можно посмотреть в файле /usr/include/sys/acct.h. В одном из полей этой структуры записаны процессы, имеющие суперпользовательские возможности. Когда кто-либо входит в систему через корневую дверь, для shellинтерпретатора, который он запускает, и для всех процессов, которые он порождает, владельцем является корень (суперпользователь). В учетном файле отражен номер терминала, с которого запущен процесс, поэтому вы можете увидеть корневые процессы, запущенные с таких терминалов, на которых пользователям не разрешен суперпользовательский доступ.
Если у вас имеются обычные линии с набором номера, то все такие записи могут представлять не одного и того же пользователя. Другие входы в систему могут иметь одинаковый номер терминала, но разные пользовательские идентификаторы. Однако, вы можете знать, кто обычно имеет доступ к некоторым выделенным линиям.
Учетные файлы могут хорошо разоблачить процессы, имеющие не такой пользовательский идентификатор, как у лица, запустившего эти процессы. Поищите процессы, владельцем которых был известный пользователь, но которые имеют суперпользовательские возможности. Среди них могут быть корректные записи, например lpr, так как отображаются все системные программы, запущенные со взведенным битом setuid. Записи, которые мы ищем, относятся к shell-интерпретаторам с установленным учетным флагом суперпользователя. Это выдает тот факт, что была выполнена программа потайной двери. Изучите подключаемый файл acct.h, чтобы увидеть все определения. Используя бит ASU для проверки поля, мы можем изолировать флаговую область, отражающую привилегию суперпользователя. Самый лучший способ рассмотреть эту структуру - написать программу на языке Си, печатающую все элементы структуры. В следующей распечатке показаны некоторые важные учетные поля:
| | cmd f uid tty btime | | more 0 russ 0 Sat Jul 5 01:25:59 1986 | ls 0 russ 0 Sat Jul 5 01:31:12 1986 | ps 0 russ 0 Sat Jul 5 01:31:59 1986 | id 0 russ 0 Sat Jul 5 01:34:00 1986 | pwd 0 russ 0 Sat Jul 5 01:34:12 1986 | sh 1% russ 0 Sat Jul 5 01:33:51 1986 | \__ корневой shell с эффективным пользовательским идентификатором | | sync 0 russ 0 Sat Jul 5 01:34:21 1986 | df 0 russ 0 Sat Jul 5 01:34:27 1986 | id 0 root 0 Sat Jul 5 01:34:37 1986 | sh 2# root 0 Sat Jul 5 01:34:33 1986 | \__ корневой shell с реальным пользовательским идентификатором, | 2# обозначает бит суперпользователя, | владелец изменен на root |
Отметим, что shell-интерпретаторы с эффективным пользовательским идентификатором маскируют бит во флаге суперпользователя, но владельцем их процессов является обычный пользователь. Не известно, все ли системы применяют значение 1 в качестве флага shell-интерпретатора с эффективным пользовательским идентификатором. Похоже, что Berkeley поступает именно так, а System V нет.