160Β Β || <(opt_all && info->level <= max_depth) || info->level == 0))161Β {162 Β print_only_size(size_to_print);163Β Β fputc('\t', stdout);164 Β if (arg_length)165Β Β {166 Β Β /* ΠΡΠ²Π΅ΡΡΠΈ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, Π½ΠΎ Π±Π΅Π· ΡΡΡΡΠΈΠΊΡΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° '.' ΠΈΠ»ΠΈ '/.'167Β Β Β Β Β ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² main. */168Β Β Β /* ΠΡΠ²Π΅ΡΡΠΈ Π²ΡΠ΅ Π΄ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π½Π°ΠΌΠΈ ΡΠ°ΡΡΠΈ. */169Β Β Β fwrite(file, arg_length, 1, stdout);170Β Β /* ΠΡΠ²Π΅ΡΡΠΈ Π²ΡΠ΅ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ. */171 Β Β fputs(file + arg_length + suffix_length172Β Β Β Β + (file[arg_length + suffix_length] == '/'), stdout);173Β Β }174Β Β else175 Β {176Β Β Β fputs(file, stdout);177Β Β }178Β Β fputc('\n', stdout);179 Β fflush(stdout);180Β }181182Β return 0;183 }Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ Π² ΡΡΡΠΎΠΊΠ°Ρ 158β160 ΡΠ±ΠΈΠ²Π°Π΅Ρ Ρ ΡΠΎΠ»ΠΊΡ, ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π² ΡΡΡΠΎΠΊΠ΅ 157 ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΠΎ. Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ: Β«ΠΡΠ»ΠΈ (1a) ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ ΠΈ (1b) ΡΡΠΎΠ²Π΅Π½Ρ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° (ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ β
-max-depthmax_depthduΠ‘ΡΡΠΎΠΊΠΈ 162β179 ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π²ΡΠ²ΠΎΠ΄. Π‘ΡΡΠΎΠΊΠΈ 162β163 Π²ΡΠ²ΠΎΠ΄ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ» TAB Π‘ΡΡΠΎΠΊΠΈ 164β173 ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ. ΠΡΠΎ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΎ Π΄Π°Π»Π΅Π΅ Π²
du.c524 /* ΠΡΠΈ ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ Π»ΠΈΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΌΡ525Β Β Β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ»Π°Π³ nftw FTW_PHYS, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΡΠ»ΠΊΠ°526Β Β Β Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, Π² Π½ΠΎΡΠΌΠ΅ Π½Π΅527Β Β Β ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΠ΄Π΅ΠΌ Π½Π° ΠΈΠ·Π΄Π΅ΡΠΆΠΊΠΈ,528Β Β Β ΡΠ½Π°ΡΠ°Π»Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡ '/.' (ΠΈΠ»ΠΈ '.'), Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΈΡ
ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·529Β Β Β ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. */Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅
arg_lengthΠ€Ρ! ΠΡΡΠ° ΠΊΠΎΠ΄Π°. ΠΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΡΠΎ Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΡΠΏΠ΅ΠΊΡΡΠ° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π² ΠΊΠ½ΠΈΠ³Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ½ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΊΠΎΠ΄ ΠΈΠ· ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ ΡΠ°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΡΠΌ. ΠΡΡΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΡΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΎΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
du.Ρ8.6. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°:
chroot()Π’Π΅ΠΊΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
chdir(chdir()fchdir()ΠΠ΅Π½Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³. ΠΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΡΡΠΎΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΡΡΠ»Π°Π΅ΡΡΡ ΠΈΠΌΡ ΠΏΡΡΠΈ
/chroot()#include <unistd.h> /* ΠΠ±ΡΡΠ½ΡΠΉ */int chroot(const char *path);ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ 0 ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΈ -1 ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅.
ΠΠ°ΠΊ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° GNU/Linux chroot(2), ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Π½ΠΎΠ²ΡΠΌ ΠΊΠΎΡΠ½Π΅Π²ΡΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ·Π²Π°ΡΡ Π·Π°ΡΠ΅ΠΌ
chdir()if (chroot("/new/root") < 0) /* Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ */Β /* ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ */if (chdir("/some/dir") < 0) /* ΠΡΡΠΈ Π΄Π°Π½Ρ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° */Β /* ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ */Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ²
chroot()chroot()/bin/ls/etc/passwd/etc/groupPOSIX Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΡΠ΅Ρ ΡΡΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ², Ρ ΠΎΡΡ GNU/Linux ΠΈ Π²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Unix Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ. (ΠΠ½ ΠΏΠΎΠΏΡΠ»ΡΡΠ΅Π½ Ρ V7.) ΠΠ½ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½, Π½ΠΎ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π΅Π½.
8.7. Π Π΅Π·ΡΠΌΠ΅
β’Β Π€Π°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌΠΈ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², Π΄Π°Π½Π½ΡΡ , Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ², ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΎΡΠΎΠ±ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. Π€Π°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ (ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌ) ΡΠ°Π·Π΄Π΅Π»Π°ΠΌ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³; ΠΏΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, Ρ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π½ΠΎΠΌΠ΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π΅Π½ 2.
β’Β ΠΠΎΠΌΠ°Π½Π΄Π°
mountumount/./..