Files
LFS_Book/chapter06/createfiles.xml
Anton Maisak fbc43235b3 SYNC
Revision: 11578
Author: bdubbs
Date: 15 апреля 2019 г. 23:15:34
Message:
Update bzip2 url.
Update to util-linux-2.33.2.
Update to linux-5.0.7.
Update to gawk-5.0.0.

----
Modified : /trunk/BOOK/chapter01/changelog.xml
Modified : /trunk/BOOK/chapter01/whatsnew.xml
Modified : /trunk/BOOK/chapter06/createfiles.xml
Modified : /trunk/BOOK/chapter06/creatingdirs.xml
Modified : /trunk/BOOK/general.ent
Modified : /trunk/BOOK/packages.ent
2019-08-10 11:06:23 +03:00

317 lines
16 KiB
XML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-system-createfiles">
<?dbhtml filename="createfiles.html"?>
<title>Создание основных файлов и символических ссылок</title>
<indexterm zone="ch-system-createfiles">
<primary sortas="e-/etc/passwd">/etc/passwd</primary>
</indexterm>
<indexterm zone="ch-system-createfiles">
<primary sortas="e-/etc/group">/etc/group</primary>
</indexterm>
<indexterm zone="ch-system-createfiles">
<primary sortas="e-/var/run/utmp">/var/run/utmp</primary>
</indexterm>
<indexterm zone="ch-system-createfiles">
<primary sortas="e-/var/log/btmp">/var/log/btmp</primary>
</indexterm>
<indexterm zone="ch-system-createfiles">
<primary sortas="e-/var/log/lastlog">/var/log/lastlog</primary>
</indexterm>
<indexterm zone="ch-system-createfiles">
<primary sortas="e-/var/log/wtmp">/var/log/wtmp</primary>
</indexterm>
<para>Некоторые программы используют жестко зашитые пути к другим программам, которые еще не установлены. Чтобы скорректировать этот недостаток, требуется создать ряд символических ссылок, которые
   будут заменены реальными файлами в процессе установки программ в этой главе.</para>
<screen><userinput>ln -sv /tools/bin/{bash,cat,chmod,dd,echo,ln,mkdir,pwd,rm,stty,touch} /bin
ln -sv /tools/bin/{env,install,perl,printf} /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib
ln -sv bash /bin/sh</userinput></screen>
<!--for lib in blkid lzma mount uuid
do
ln -sv /tools/lib/lib$lib.so* /usr/lib
done-->
<!--ln -svf /tools/include/blkid /usr/include
ln -svf /tools/include/libmount /usr/include
ln -svf /tools/include/uuid /usr/include-->
<!--for pc in blkid mount uuid
do
sed 's@tools@usr@g' /tools/lib/pkgconfig/${pc}.pc \
> /usr/lib/pkgconfig/${pc}.pc
done-->
<variablelist>
<title>Описание каждоый ссылки</title>
<varlistentry>
<term><parameter><filename>/bin/bash</filename></parameter></term>
<listitem>
<para>Большинство <command>bash</command> сценариев указывают на
<filename>/bin/bash</filename>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/bin/cat</filename></parameter></term>
<listitem>
<para>Этот путь жестко закодирован в сценарии конфигурирования Glibc.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/bin/dd</filename></parameter></term>
<listitem>
<para>Путь к <filename>dd</filename> будет жестко закодирован в утилите
<filename>/usr/bin/libtool</filename></para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/bin/echo</filename></parameter></term>
<listitem>
<para>Используется для тестирования Glibc. Наборам тестов требуется
<filename>/bin/echo</filename>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/usr/bin/env</filename></parameter></term>
<listitem>
<para>
Этот путь жестко зашит в процедуры сборки некоторых пакетов
<!-- systemd This may not be needed if we move sysd to the end--></para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/usr/bin/install</filename></parameter></term>
<listitem>
<para>Путь к <filename>install</filename> будет жестко закодирован в файле
<filename>/usr/lib/bash/Makefile.inc</filename></para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/bin/ln</filename></parameter></term>
<listitem>
<para>Путь к <filename>ln</filename> будет жестко закодирован в файле
<filename>/usr/lib/perl5/&perl-version;/&lt;target-triplet&gt;/Config_heavy.pl</filename>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/bin/pwd</filename></parameter></term>
<listitem>
<para>Некоторые <command>configure</command> сценарии, в частности Glibc's, имеют жестко закодированный путь</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/bin/rm</filename></parameter></term>
<listitem>
<para>Путь к <filename>rm</filename> будет жестко закодирован в файле
<filename>/usr/lib/perl5/&perl-version;/&lt;target-triplet&gt;/Config_heavy.pl</filename>
file.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/bin/stty</filename></parameter></term>
<listitem>
<para>Этот путь жестко закодирован в программе Expect, кроме того он необходим для выполнения набора тестов такими пакетами как Binutils и GCC.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/usr/bin/perl</filename></parameter></term>
<listitem>
<para>Большинство Perl сценариев имеют жестко закодированный путь к программе
<command>perl</command></para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/usr/lib/libgcc_s.so{,.1}</filename></parameter></term>
<listitem>
<para>Glibc требует эти ссылки для правильной работы библиотеки pthreads.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter><filename>/usr/lib/libstdc++{,.6}</filename></parameter></term>
<listitem>
<para>Эти ссылки необходимы для некоторых тестов в Glibc, а также
         для поддержки C ++ в GMP.</para>
</listitem>
</varlistentry>
<!--
<varlistentry>
<term><parameter><filename>/usr/lib/libstdc++.la</filename></parameter></term>
<listitem>
<para>This prevents a <filename class="directory">/tools</filename>
reference that would otherwise be in
<filename>/usr/lib/libstdc++.la</filename> after GCC is installed.</para>
</listitem>
</varlistentry>
-->
<!--<varlistentry revision="systemd">
<varlistentry>
<term><parameter><filename>/usr/lib/lib{blkid,lzma,mount,uuid}.{a,la,so*}</filename></parameter></term>
<listitem>
<para>Эти ссылки не позволяют утилитам systemd иметь ссылки на каталог
<filename class="directory">/tools</filename>.</para>
</listitem>
</varlistentry>
-->
<varlistentry>
<term><parameter><filename>/bin/sh</filename></parameter></term>
<listitem>
<para>Многие сценарии оболочки имеют жестко закодированный путь к
<filename>/bin/sh</filename>.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Исторически, Linux поддерживает список примонтированных файловых систем в файле <filename>/etc/mtab</filename>. Современные ядра Linux имеют поддержку такого списка внутри себя, и предоставляют его через виртуальный каталог <filename
class="directory">/proc</filename>. Для осуществления поддержки тех утилит и программ, которым нужны ссылка на <filename>/etc/mtab</filename> необходимо создать следующую символическую ссылку:</para>
<screen><userinput>ln -sv /proc/self/mounts /etc/mtab</userinput></screen>
<para>Для осуществления возможности авторизации пользователем <systemitem class="username">root</systemitem> от имени <quote>root</quote>, должны быть соответствующие записи в в файлах <filename>/etc/passwd</filename> и <filename>/etc/group</filename>.</para>
<para>Необходимо создать файл <filename>/etc/passwd</filename>:</para>
<screen revision="sysv"><userinput>cat &gt; /etc/passwd &lt;&lt; "EOF"
<literal>root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
daemon:x:6:6:Daemon User:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal>
EOF</userinput></screen>
<screen revision="systemd"><userinput>cat &gt; /etc/passwd &lt;&lt; "EOF"
<literal>root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
daemon:x:6:6:Daemon User:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
systemd-bus-proxy:x:72:72:systemd Bus Proxy:/:/bin/false
systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/bin/false
systemd-journal-remote:x:74:74:systemd Journal Remote:/:/bin/false
systemd-journal-upload:x:75:75:systemd Journal Upload:/:/bin/false
systemd-network:x:76:76:systemd Network Management:/:/bin/false
systemd-resolve:x:77:77:systemd Resolver:/:/bin/false
systemd-timesync:x:78:78:systemd Time Synchronization:/:/bin/false
systemd-coredump:x:79:79:systemd Core Dumper:/:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal>
EOF</userinput></screen>
<para>Фактический пароль для <systemitem class="username">root</systemitem>
(символ <quote>x</quote> здесь используется только для заполнения) будет указан позднее.</para>
<para>Необходимо создать файл<filename>/etc/group</filename>:</para>
<screen revision="sysv"><userinput>cat &gt; /etc/group &lt;&lt; "EOF"
<literal>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:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
input:x:24:
mail:x:34:
kvm:x:61:
wheel:x:97:
nogroup:x:99:
users:x:999:</literal>
EOF</userinput></screen>
<screen revision="systemd"><userinput>cat &gt; /etc/group &lt;&lt; "EOF"
<literal>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:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
kvm:x:61:
systemd-bus-proxy:x:72:
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:
wheel:x:97:
nogroup:x:99:
users:x:999:</literal>
EOF</userinput></screen>
<para>Созданные группы не являются частью какого-либо стандарта. Эти группы необходимы для конфигурации Udev в этой главе, и частично общей конвенцией используемой рядом существующих дистрибутивов Linux. Кроме того, некоторые наборы тестов зависят от конкретных пользователей и групп. Специфкация LSB (The Linux Standard Base, доступная по ссылке <ulink
url="https://wiki.linuxfoundation.org/lsb/start"/>) рекомендует, чтобы кроме группы root с идентификатором группы (GID), равным 0, присутствовала группа bin с GID, равным 1. Все другие имена групп и идентификаторы GID могут свободно выбираться системным администратором, поскольку хорошо написанные программы не зависят от номеров GID, а используют только имя группы.</para>
<para>Для того, чтобы убрать приглашение коммандной строки <quote>I have no name!</quote>, необходимо запустить новую командную оболочку. Когда был установлен пакет Glibc в главе <xref
linkend="chapter-temporary-tools"/> и файл <filename>/etc/group</filename> был создан, имя пользователя и группы, теперь будут работать:</para>
<screen role="nodump"><userinput>exec /tools/bin/bash --login +h</userinput></screen>
<para>Обратите внимание на использование аргумента <parameter>+h</parameter>. Он сообщает программе <command>bash</command> не использовать собственный механизм хеширования путей. Без этого аргумента, <command>bash</command> будет запоминать пути к двоичным файлам которые выполнялись. Для того, чтобы использовать новые скомплированные пакеты, по мере их установки, аргумент <parameter>+h</parameter> будет использован на протяжении всей главы.</para>
<para>Программы <command>login</command>, <command>agetty</command>, и
<command>init</command> (и другие) используют файлы с записями о событиях (log - файлов), например кто и когда авторизовался в системе. Однако, эти программы не смогут записывать файлы, до тех пор, пока их нет. Необходимо создать такие файлы, и назначить им правильные права:</para>
<screen><userinput>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</userinput></screen>
<para>Файл <filename>/var/log/wtmp</filename> хранит записи когда каждый пользователь выполняет авторизацию в системе. Файл <filename>/var/log/faillog</filename> хранит записи о неудачных попытках входа в систему. Очень полезно при проверке угроз в системе безопасности, хакерских атаках, попыток взлома методом перебора. Прочитать содержимое можно с помощью команды faillog. Файл <filename>/var/log/btmp</filename> хранит записи неудачных попыток входа в систему. Просто так, на всякий случай, если вы еще не догадались где следует искать следы активности взломщиков.</para>
<note><para>Файл <filename>/run/utmp</filename> хранит записи о тех пользователях, которые на данные момент авторизованы в системе. Он создётся динамически, в процессе выполнения сценариев загрузки.</para></note>
</sect1>