4.2 Файлове и директории

Трябва да създадем няколко файла/директории.

mkdir -p $J $J/bin $J/dev $J/etc $J/lib $J/libexec $J/tmp $J/usr/sbin $J/var/log $J/var/run $J/nonexistent (1)
cd $J
touch var/log/console.log (2)
chmod 1777 tmp (3)
cd $J/etc
(4)
cat <<MASTER_PASSWD_END > master.passwd
root:*:0:0::0:0:woot:/nonexistent:/usr/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin
MASTER_PASSWD_END
cat <<PASSWD_END > passwd
root:*:0:0:woot:/nonexistent:/usr/sbin/nologin
nobody:*:65534:65534:Unprivileged user:/nonexistent:/usr/sbin/nologin
PASSWD_END
cat <<GROUP_END > group
wheel:*:0:
nobody:*:65533:
nogroup:*:65534:
GROUP_END
pwd_mkdb -d $J/etc $J/etc/master.passwd (5)
(6)
echo 'nameserver 127.0.0.1' > resolv.conf
echo '192.168.0.13 webjail' > hosts
cp /usr/share/zoneinfo/Europe/Sofia localtime
cd $J
ln -sf dev/null kernel (7)
(8)
cp /bin/sh bin/
cp /usr/sbin/chown usr/sbin/
cp /bin/chmod bin/
cp -R /apache $J (9)
mkdir -p apache/logs
           

(1)
Тук създаваме директорията за затворът.
(2)
Създаваме var/log/console.log. Този файл се изисква от /etc/rc.d/jail и се използва за запис на логове.
(3)
Трябва да зададем правилни права за достъп на tmp/. Опцията 1777, зададена на chmod(1) означава "задай права за четене, писане и изъпълнение на: собственик, група на собственик, всички останали и също задай 'sticky bit'". sticky(8) битът прави директорията специална. Когато той е включен - всеки, който има нужните привилегии за директорията може да създава файлове/директории, да ги презаписва, или да ги изпълнява АКО той е техен собственик. Дори когати доректорията е o+rwx, достъпът на потребителят е ограничен само до тези файлове, които тои притежава.
(4)
Тук създаваме файловете /etc/passwd, /etc/master.passwd и /etc/group, които се изискват от системата. Добавяме само root и nobody потребители, защото нямаме нужда от други.

Note: Всъщност, на практика нямаме нужда от root потребител. Можем да стартираме затворът без него, НО.. /etc/rc.d/jail стартира затворът, използвайки -U root опцията, така че трябва да добавим и този потребител. Ако сте параноик - можете да премахнете root и wheel от passwd, master.passwd, group файловете. В такъв случай ще се наложи да премахнете -U root от /etc/rc.d/jail.

(5)
След като вече разполагаме с passwd, master.passwd и group в затворът трябва да изполвзваме pwd_mkdb(8), за да създадем etc/pwd.db
(6)
Желателно е затворът да разполага с DNS сървър - тряба да го опшием в /etc/resolv.conf. Текущият DNS сървър е 127.0.0.1, но можете да го смените, разбира се. Файлът /etc/hosts не е задължителен, но може да бъде полезен в PHP скриптовете. За да разполагате с точно време трябва да създадете /etc/localtime. Тук използваме /usr/share/zoneinfo/Europe/Sofia, защото аз живея близо до Sofia :) Разбира се, трябва да намерите файлът, който отговаря на Вашата часова зона в /usr/share/zoneinfo.
(7)
jail(8) казва, че трябва да създадем тази символична връзка :)
(8)
Добавяме sh(1), chown(8) и chmod(1), за да можем да променим правата за достъп докато тестваме затворът в следващата глава.
(9)
Да не забравяме /apache, където се крие цялата магия.


This, and other documents, can be downloaded from ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

For questions about FreeBSD, read the documentation before contacting <[email protected]>.
For questions about this documentation, e-mail <[email protected]>.