%general-entities; ]> Создание основных файлов и символических ссылок /etc/passwd /etc/group /run/utmp /var/log/btmp /var/log/lastlog /var/log/wtmp Исторически сложилось, что Linux хранит список примонтированных файловых систем в файле /etc/mtab. Современные ядра хранят этот список внутри себя и предоставляют его пользователю через файловую систему /proc. Чтобы удовлетворять требованиям утилит, которые ожидают наличия /etc/mtab, создайте следующую символическую ссылку: ln -sv /proc/self/mounts /etc/mtab Создайте файл /etc/hosts, на который будут ссылаться некоторые наборы тестов, а также один из файлов конфигурации Perl: cat > /etc/hosts << EOF 127.0.0.1 localhost $(hostname) ::1 localhost EOF Чтобы пользователь root мог войти в систему и распознавался системой, в файлах /etc/passwd и /etc/group должны быть соответствующие записи. Создайте файл /etc/passwd выполнив следующую команду: cat > /etc/passwd << "EOF" root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/dev/null:/usr/bin/false daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/false EOF cat > /etc/passwd << "EOF" root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/dev/null:/usr/bin/false daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/usr/bin/false systemd-journal-remote:x:74:74:systemd Journal Remote:/:/usr/bin/false systemd-journal-upload:x:75:75:systemd Journal Upload:/:/usr/bin/false systemd-network:x:76:76:systemd Network Management:/:/usr/bin/false systemd-resolve:x:77:77:systemd Resolver:/:/usr/bin/false systemd-timesync:x:78:78:systemd Time Synchronization:/:/usr/bin/false systemd-coredump:x:79:79:systemd Core Dumper:/:/usr/bin/false uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false systemd-oom:x:81:81:systemd Out Of Memory Daemon:/:/usr/bin/false nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/false EOF Пароль пользователя root будет задан позднее. Создайте файл /etc/group, выполнив следующую команду: cat > /etc/group << "EOF" root:x:0: bin:x:1:daemon sys:x:2: kmem:x:3: tape:x:4: tty:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: video:x:12: utmp:x:13: cdrom:x:15: adm:x:16: messagebus:x:18: input:x:24: mail:x:34: kvm:x:61: uuidd:x:80: wheel:x:97: users:x:999: nogroup:x:65534: EOF cat > /etc/group << "EOF" root:x:0: bin:x:1:daemon sys:x:2: kmem:x:3: tape:x:4: tty:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: video:x:12: utmp:x:13: cdrom:x:15: adm:x:16: messagebus:x:18: systemd-journal:x:23: input:x:24: mail:x:34: kvm:x:61: systemd-journal-gateway:x:73: systemd-journal-remote:x:74: systemd-journal-upload:x:75: systemd-network:x:76: systemd-resolve:x:77: systemd-timesync:x:78: systemd-coredump:x:79: uuidd:x:80: systemd-oom:x:81: wheel:x:97: users:x:999: nogroup:x:65534: EOF Созданные группы не являются частью какого-либо стандарта — это группы, определяемые частично требованиями конфигурации Udev в главе 9, а частично общими соглашениями, используемыми в ряде существующих дистрибутивов Linux. Кроме того, некоторые наборы тестов зависят от конкретных пользователей или групп. Спецификация LSB (доступна по адресу ) рекомендует, чтобы, помимо группы root с идентификатор (GID) 0 присутствовала группа bin с GID 1. GID 5 широко используется для группы tty, число 5 также используется в systemd /etc/fstab для файловой системы devpts. Все остальные имена групп и GID могут свободно выбираться системным администратором, так как хорошо написанные программы не зависят от номеров GID, а чаще используют название группы. Идентификатор 65534 используется ядром для NFS и отдельных пользовательских пространств имен для несопоставленных пользователей и групп (они существуют на сервере NFS или родительском пространстве имен пользователя, но не существует на локальном компьютере или в отдельном пространстве имен). Мы присваиваем nobody и nogroup для того, чтобы избежать несопоставленных идентификаторов. Другие дистрибутивы могут обрабатывать этот идентификатор по-разному, поэтому любая переносимая программа не должна зависеть от этого присвоения. Для некоторых тестов в требуется обычный пользователь. Добавим такого пользователя здесь и удалим эту учетную запись в конце главы. echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd echo "tester:x:101:" >> /etc/group install -o tester -d /home/tester Чтобы удалить приглашение I have no name!, запустите новую оболочку. Поскольку файлы /etc/passwd и /etc/group были созданы, разрешение имен пользователей и групп теперь будет работать: exec /usr/bin/bash --login Программы login, agetty, init (и другие) используют ряд журналов для записи такой информации, как кто и когда входил в систему. Однако эти программы не будут записывать данные в журналы, если они еще не существуют. Инициализируйте журналы и предоставьте им соответствующие разрешения: touch /var/log/{btmp,lastlog,faillog,wtmp} chgrp -v utmp /var/log/lastlog chmod -v 664 /var/log/lastlog chmod -v 600 /var/log/btmp В файл /var/log/wtmp записываются все входы и выходы из системы. В файл /var/log/lastlog записывается время последнего входа каждого пользователя в систему. В файл /var/log/faillog записываются неудачные попытки входа в систему. В файл /var/log/btmp также записываются неудачные попытки входа в систему. В файл /run/utmp записываются пользователи, которые в данный момент вошли в систему. Он создаётся динамически, в процессе выполнения сценариев загрузки. Файлы utmp, wtmp, btmp и lastlog используют для временных меток 32-разрядные целые числа, значения счетчика достигнет максимума (2 147 483 647) 19 января 2038 года ("проблема 2038 года"). Многие пакеты перестали их использовать, другие же, собираются прекратить их использование. Вероятно, лучше считать их устаревшими.