Меню Рубрики

Образ файловой системы linux

Работа с файловой системой Linux

Во время выполнения различных задач по администрированию системы может понадобится работать с файловой системой Linux, форматировать разделы, изменять их размер конвертировать файловые системы, может понадобиться дефрагментация в Linux или восстановление файловых систем. Многие из этих действий выполняются в графическом интерфейсе, многие и вовсе автоматически. Но может возникнуть ситуация, в которой придется делать все через терминал. Также при администрировании удаленных серверов работать с ними приходится только через ssh, а это означает недоступность графического интерфейса.

В этой статье мы рассмотрим как выполняется работа с файловой системой Linux в терминале. За основу возьмем семейство файловых систем ext2/3/4, так как они самые распространенные среди большого многообразия дистрибутивов Linux.

Основные команды

Для управления файловой системой ext в Linux используется целый набор команд из пакета e2progs. Сюда входят как команды для управления флагами файлов, создания и изменения файловых систем, так и утилиты для отладки файловой системы.

Рассмотрим основные утилиты, которые будем использовать:

  • badblocks — если у вас старый жесткий диск и на нем накопилось много битых блоков, вы можете с помощью этой утилиты пометить их все на уровне файловой системы, чтобы больше не использовать.
  • e2label — позволяет изменить метку раздела с файловой системой ext.
  • fsck — проверка файловой системы linux и исправление найденных ошибок
  • mkfs — позволяет создать файловую систему Linux.
  • resize2fs — изменить размер раздела с файловой системой
  • tune2fs — позволяет изменить файловую систему Linux, настроить ее параметры.

А теперь будет рассмотрена работа с файловой системой linux на примерах.

Работа с файловой системой в Linux

Перед тем как переходить к работе с реальным жестким диском важно попрактиковаться. Если сменить метку или проверить на битые сектора можно и рабочий диск, то создавать новую файловую систему, изменять ее размер, рискуя потерять данные на реальном диске не рекомендуется. Можно отделить небольшой раздел диска для экспериментов с помощью Gparted и выполнять все действия в нем. Допустим, у нас этот раздел будет называться /dev/sda6.

Создание файловой системы

Создать файловую систему linux, семейства ext, на устройстве можно с помощью команды mkfs. Ее синтаксис выглядит следующим образом:

sudo mkfs -t тип устройство

Доступны дополнительные параметры:

  • — проверить устройство на наличие битых секторов
  • -b — размер блока файловой системы
  • -j — использовать журналирование для ext3
  • -L — задать метку раздела
  • -v — показать подробную информацию о процессе работы
  • -V — версия программы

Создаем файловую систему на нашем устройстве. Будем создавать ext3:

sudo mkfs -t ext4 -L root /dev/sda6

Creating filesystem with 7847168 4k blocks and 1962240 inodes

Filesystem UUID: 3ba3f7f5-1fb2-47af-b22c-fa4ca227744a
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Изменение метки файловой системы

Утилита e2label позволяет изменить или посмотреть метку раздела диска. Принимает всего два параметра — устройство и новую метку если нужно.

sudo e2label /dev/sda6

sudo e2label /dev/sda6 root1

Настройка файловой системы linux

Различные параметры файловой системы, такие как размер блока данных, иноды или зарезервированное место под данные пользователя root можно настроить. Для этого существует утилита tune2fs.

Синтаксис команды очень прост:

$ tune2fs опции устройство

Поддерживаются следующие опции:

  • -j — создать файл журнала. Позволяет превратить файловую систему ext2 в ext3.
  • -J — настроить параметры журнала
  • -l — получить содержимое суперблока
  • -L — изменить метку раздела
  • -m — изменить процент дискового пространства, зарезервированного для суперпользователя
  • -M — изменить последнюю папку монтирования
  • -U — задать UUID файловой системы
  • -C — изменить значение счетчика монтирования
  • -T — изменить последнюю дату проверки файловой системы
  • — изменить периодичность проверок файловой системы с помощью fsck
  • -O — изменить опции файловой системы.

Изменить размер зарезервированного места для суперпользователя до пяти процентов:

sudo tune2fs -m 5 /dev/sda6

Setting reserved blocks percentage to 5% (392358 blocks)

Посмотреть информацию из суперблока, эта команда показывает всю доступную информацию параметрах файловой системы:

Filesystem volume name: root
Last mounted on: /
Filesystem UUID: 3ba3f7f5-1fb2-47af-b22c-fa4ca227744a
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg spar
se_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux

Изменить счетчик количества монитрований:

tune2fs -C 0 /dev/sda6

Setting current mount count to 0

Думаю тут смысл понятен, нужно только немного со всем этим поэкспериментировать.

С помощью опции -O мы вообще можем превратить нашу ext3 в ext4 следующей командой:

sudo tune2fs -O extents,uninit_bg,dir_index

После этого действия нужно выполнить проверку файловой системы на ошибки в fsck. Подробнее об этом поговорим ниже.

sudo fsck -np /dev/sda6

Таким образом вы можете изменить файловую систему linux, и настроить по своему усмотрению любые ее параметры.

Изменение размера файловой системы Linux

Раньше такая функция поддерживалась в утилите parted, но потом ее убрали и для этого действия приходится использовать утилиту из набора e2fsprogs — resize2fs.

Запустить утилиту очень просто. Ей нужно передать всего два параметра:

$ resize2fs [опции] устройство размер

Доступны также опции:

  • -M уменьшить файловую систему до минимального размера
  • -f — принудительное изменение, не смотря на потерю данных
  • -F — очистить буфер файловой системы

Размер передается, как и во многих других утилитах, целым числом с указанием единиц измерения, например, 100М или 1G.

Для примера уменьшим размер нашего раздела до 400 Мегабайт:

sudo resize2fs /dev/sda6 400M

Resizing the filesystem on /dev/sda7 to 102400 (4k) blocks.
The filesystem on /dev/sda7 is now 102400 blocks long

Проверка файловой системы Linux

При неправильном отключении носителей или неожиданном отключении питания, файловая система Linux может быть повреждена. Обычно проверка корневой файловой системы и домашнего каталога на ошибки выполняется во время загрузки. Но если эта проверка не была выполнена или нужно поверить другой носитель, придется все делать вручную. Для этого есть утилита fsck.

$ fsck [опции] устройство

  • -p — автоматическое восстановление
  • -n — только проверка, без восстановления
  • -y — ответить да на все запросы программы
  • — проверить на битые сектора (аналог badblocks
  • -f — принудительная проверка, даже если раздел помечен как чистый
  • -j — внешний журнал файловой системы

Проверка файловой системы Linux выполняется такой командой, проверим диск /dev/sda6, заметьте, что диск должен быть не примонтирован:

sudo fsck -a /dev/sda6

root: clean, 11/32704 files, 37901/102400 blocks

Дефрагментация файловой системы

Хотя и фрагментация нехарактерное явление для файловых систем семейства ext, при очень интенсивном использовании может накапливаться фрагментированость, что будет замедлять работу файловой системы. Для дефрагментации можно использовать стандартную утилиту e4defrag. Просто выполните:

Чтобы проверить нужна ли дефрагментация в Linux выполните эту же команду с опцией -c:

Total/best extents 26247/24953
Average size per extent 1432 KB
Fragmentation score 0
[0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
This device (/dev/sda6) does not need defragmentation.
Done.

В поле Fragmentation score отображен процент фрагментации, как видите, у меня 0, нормой считается до 30, 31-55 небольшие проблемы, и больше 56 — нужна дефрагментация.

Выводы

В одной из предыдущих статей мы рассмотрели как выполняется разметка диска с помощью parted. Из этой статьи вы узнали все что нужно о работе с файловой системой. Теперь у вас не возникнет проблем если у вас вдруг не будет доступа к графическим утилитам и нужно будет исправлять ошибки или настраивать файловую систему. Если остались вопросы, спрашивайте в комментариях!

Источник

Записки IT специалиста

Технический блог специалистов ООО»Интерфейс»

Linux — начинающим. Часть 4. Работаем с файловой системой. Теория

Умение работать с файловой системой — один из наиболее важных навыков для начинающих. Действительно, о какой работе с системой может идти речь, если вы не знаете где и какие системные файлы расположены, не можете свободно перемещаться по дереву каталогов и выполнять элементарные операции с файлами? Тем более, что эти вопросы в руководствах обычно не поднимаются, предполагая, что читатель обладает необходимым минимумом знаний и умений. Поэтому очередная часть нашего цикла будет посвящена именно работе с файловой системой.

Перед тем как начать, вспомним, что такое файловая система. Прежде всего, это порядок, определяющий способ организации, хранения и именования информации на устройствах хранения, а только потом практическая реализация этого порядка. Т.е. первичен некий свод правил: что где лежит, как называется и т.д. и т.п., а практические реализации файловых систем, например, NTFS или ext4, это технический способ организации информации на определенном типе носителя в соответствии с принятыми правилами.

За примерами далеко ходить не надо, каждый пользователь Windows знает, что файлы лежат в папках, папки на разделах (логических дисках), а систему следует искать в папке Windows системного диска. Точно также любой Linux администратор будет искать настройки в /etc, логи в /var/log, а свои собственные документы в /home.

Так как большинство начинающих Linux администраторов уже имеют достаточный опыт работы с файловой системой Windows, то прежде всего мы рассмотрим, что общего у двух систем, а чем они отличаются. Понимание этих моментов поможет по максимуму использовать уже имеющийся опыт, в тоже время, не совершая глупых ошибок.

Структура файловой системы

Начнем с привычного и понятного.

В основу файловой системы Windows положен диск, символизирующий собой отдельное устройство хранения информации. При этом каждый диск содержит свою собственную файловую систему, корень которой составляет он сам и обозначается буквой. Т.е. запись вида C:\ — обозначает корень файловой системы на диске С, а D:\Работа — папку в корне файловой системы диска D. Подключая к системе новый носитель информации мы получаем еще одну или несколько файловых систем.

Это одна из самых больших привычек: подключили накопитель — в системе появился новый диск, если это не так, то накопитель либо не определился, либо неисправен.

В Linuх концепция принципиально иная. Вспомним: все есть файл, дисковые накопители — это тоже определенный тип файла. Кроме того, файловая система Linuх иерархична, т.е. имеет один единственный корень, обозначаемый символом /.

Этот момент вызывает у новичков множество непониманий. Но на самом деле нет ничего сложного, файловая система в Linux просто организована по-другому, но при этом она по-своему стройна, логична и понятна.

Давайте еще раз рассмотрим схему с Windows. На ней имеется один физический диск для системы, второй для пользовательских данных и компакт диск с музыкой. А теперь взглянем на другую схему, где мы показали аналогичную организацию размещения данных в среде Linux.

У нас также имеется системный диск, на котором расположен корень файловой системы и все системные папки. Пользовательские данные все также располагаются на втором физическом диске, но в системе вы его не увидите. Почему? Да потому что в файловой системе Linux такого понятия нет. Новички на этом месте обычно впадают в панику, считают что диск не определился и начинают судорожно искать его где можно и где нельзя.

Но диск, с точки зрения Linux, это тоже файл и может быть расположен в любом месте файловой системы. В нашем случае никто не мешает поместить его на место папки /home, где располагаются пользовательские данные. Такое действие называется монтированием, а место файловой системы, к которому присоединен носитель — точкой монтирования. Таким образом папка /home целиком окажется на втором жестком диске, что будет в какой-то мере аналогично переносу пользовательских данных на диск D.

Съемные носители, такие как компакт-диски, флешки и т.п. в графической среде монтируются автоматически в предопределенную директорию /media, а в рабочем окружении появляется ярлык, что делает работу с ними неотличимой от Windows. В серверной среде вам потребуется монтировать съемные носители вручную, также вы можете выбрать произвольную точку монтирования, но лучше не изобретать велосипед, а использовать /media.

Еще один момент, связанный с иерархичностью файловой системы Linuх — это неизменность путей к данным при изменении физической структуры дисков. Простой пример: у вас есть большая коллекция музыки, которую вы решили вынести на отдельный жесткий диск. В Windows все просто: купили новый диск, подключили, скопировали. Но есть один недостаток. Если до этого пути к музыке были D:\Музыка, то стали E:\Музыка и все ранее созданные ярлыки, плейлисты и т.п. стали неверны.

В Linux процесс выглядит немного посложнее: новый диск временно монтируется, скажем, в /mnt, затем на него переносится содержимое папки /home/Музыка, после чего он монтируется на постоянной основе в точку /home/Музыка. В итоге наша коллекция лежит на отдельном жестком диске, но все плейлисты как работали с /home/Музыка так и продолжают работать.

Эту возможность трудно переоценить, особенно когда надо вынести на отдельный раздел не коллекцию музыки, а базу почтового сервера или содержимое хранилища виртуальных машин.

Имена файлов и расширения

Имена файлов и папок в Linux ограничены длинной в 256 символов и запретом на / (слеш). Отдельно следует упомянуть о символах . (точка) и

(тильда), точка перед именем файла или директории добавляют ему атрибут «скрытый», а тильда после имени добавляет атрибут «архивный» и также делает файл скрытым. Например, .file — скрытый файл, а file

Но это не говорит о том, что можно называть файлы, как вам нравится, без оглядки на иные системы, прежде всего Windows. Допустим, мы решили вопреки всем правилам назвать файл , в Linux нам никто не помешает этого сделать, но уже попытавшись скопировать его на флешку с FAT32 нас постигнет наказание, имя файла превратится в набор подчеркиваний.

Если передать его по SSH то ситуация будет немного получше, подчеркиваниями заменятся только запрещенные символы, а просто перетащив файл из окна виртуальной машины мы получили третий вариант именования файла.

Поэтому, если вы не хотите превращения имени вашего файла в нечто совершенно неожиданное, то не используйте в именах символы:

Также не злоупотребляйте служебными символами в начале имени, например, никто не мешает создать вам файл с именем -text, однако при попытке скопировать его в консоли вы получите неожиданный результат:

Еще одна важная особенность — Linux регистрозависимая система, это означает, что file.txt, File.txt и file.TXTтри разных файла!

Пока вы работаете с такими файлами в среде Linux проблем не будет, но если мы их попытаемся скопировать на флешку FAT32, то сразу возникнут затруднения.

Но это цветочки, ягодки будут тогда, когда вам понадобиться перенести на Windows платформу, скажем, веб-сайт со всем содержимым, куда на протяжении длительного времени заливались многочисленные image.jpg, Image.jpg или image.JPG.

Поэтому примите к сведению и постарайтесь соблюдать еще одно простое правило: все имена файлов набирать только в нижнем регистре, верхний регистр допускается там, где он уместен, например, в именах собственных. Также не забывайте о спецсимволах. Почему? Просто посмотрите на скриншот ниже:

Отдельный разговор — это пробелы в именах файлов. Такая практика не запрещается, но считается в профессиональных кругах дурным тоном. По возможности избегайте таких имен.

Следующая особенность Linux-систем — это расширения файлов. В Windows тип файла полностью определяется его расширением, от которого также зависит дальнейшее поведение системы при работе с таким файлом. Все знают, что для того, чтобы скрипт мог запускаться, ему нужно присвоить расширение bat или cmd. В Linux поведение системы в отношении того или иного файла зависит от его типа, а для возможности запуска файл должен иметь установленный атрибут «исполняемый».

Однако это не говорит, что Linux игнорирует расширения файлов. В графической среде, для удобства пользователя, расширения точно также ассоциируются с приложениями, как и в Windows. Но есть и отличия, вы можете дать файлу несуществующее расширение или оставить его без расширения вообще, система правильно определит тип содержимого и сопоставит его с программой. А вот присвоив ему зарезервированное расширение вы просто сопоставите файл программе, без учета его содержимого.

Как видим документ LibreOffice успешно определяется последним невзирая на «левое» или отсутствующее расширение, но присвоив ему расширение jpg, мы сопоставим его программе просмотра изображений и получим ошибку при открытии.

С изображением и иным медиаконтентом связана еще одна особенность, если у файла есть расширение, то система не будет определять его реальное содержимое и будет пытаться открыть его так, как указано в расширении. Простой пример: мы переименовали файл jpg в png, после чего получили ошибку при попытке его открыть, в тоже время тот же самый файл без расширения вообще открывается нормально.

В Windows jpg переименованный в png (и наоборот) открываться будет нормально, разве что специализированный софт (например, Photoshop) станет ругаться. Поэтому если у вас в Linux перестали открываться мультимедийные файлы, которые нормально открываются в Windows, попробуйте просто удалить им расширение, чтобы система самостоятельно определила содержимое. Для примера мы специально удалили расширения у файлов различных типов, что из этого вышло можно увидеть ниже:

Конечно не со всеми типами файлов все гладко, так документы формата MS Office 2007 и выше (docx, xslx и т.п.) будут определяться как zip-архивы, которыми на самом деле и являются, но мы думаем, что ситуация, когда вы получите офисный документ без расширения на практике вам не встретится.

Жесткие и символические ссылки

Начав работать с Linux вы обязательно столкнетесь с этим типом файлов. Они не имеют прямого аналога в файловой системе Windows и поэтому на них стоит остановиться подробнее.

Начнем с символических ссылок, в первом и достаточно грубом приближении они напоминают ярлыки Windows, это специальный тип файла, который служит указателем на другой файл. Но при этом, в отличии от ярлыка, воспринимается системой прозрачно, т.е. не как файл ярлыка, а как файл типа, на который указывает ссылка. Проще говоря, мы не можем подсунуть Windows приложению ярлык на библиотеку вместо библиотеки, а в Linux это общепринятая практика.

Разберем устройство символических ссылок подробнее, в дальнейшем это поможет понять их отличие от жестких ссылок и лучше понять сферу их применения. Как известно файл (или каталог) есть ничто иное, как некая именованная область на диске. Соответствие имени файла областям диска хранится в специальной таблице файловой системы (inode в Linux, MFT или FAT в Windows), т.е. файл — это указатель в inode на определенную область данных на диске.

Символическая ссылка — это отдельный файл, со своим inode, который указывает на изначальный файл. Если первоначальный файл будет удален или перемещен, символические ссылки останутся, но окажутся бесполезными. В тоже время мы можем как угодно перемещать символические ссылки или удалять их, что никак не скажется на первоначальном файле.

Символические ссылки широко применяются в случаях, когда один и тот-же файл должен быть доступен под разными именами или в разных местах, но при этом его содержимое не должно меняться. Например, некое приложение требует библиотеку lib-1.0.1.so, в то время как есть совместимая библиотека lib-1.0.5.so, в этом случае создаем символическую ссылку на lib-1.0.5.so с именем lib-1.0.1.so и проблема решена. Другой случай, приложение требует lib-1.0.5.so, которая есть в системе, но ищет ее в другом месте, в этом случае делаем символическую ссылку с таким же именем, но в нужное расположение.

Визуально символические ссылки можно определить по значку ярлычка в графическом окружении или по символу @ перед именем файла в mc (но, если вы создадите файл с началом имени на @ — символической ссылкой он не станет).

Другое применение, это файлы настроек. Например, веб-сервер Аpache содержит два набора директорий: с доступными модулями и настройками, и применяющимися в текущий момент. Для того, чтобы подключить модуль или настройку достаточно сделать символическую ссылку из одной директории в другую, надо выключить — удаляем символическую ссылку. Сам файл модуля или настроек остается на своем месте и может быть использован в дальнейшем.

Символические ссылки можно создавать не только на файлы, но и на каталоги. Также нет ограничения на физическое расположение символических ссылок в пределах одной физической файловой системы (одного раздела).

Жесткие ссылки. Это принципиально иная сущность. Жесткая ссылка создает еще одну запись в inode файла, т.е. по сути является еще одним его именем, а внешне является полной копией первоначального файла, определить при этом где файл, а где жесткая ссылка практически невозможно. Отличие жесткой ссылки от копии заключается в том, что несмотря на разные имена, это один и тот-же файл и, если изменить одно из его имен — изменятся остальные. Также файл физически существует до тех пор, пока на него есть хоть одна ссылка (первоначальный это файл или символическая ссылка — значения не имеет).

Для чего могут понадобиться жесткие ссылки? Самое распространенное их применение, это создание полных копий файла без лишних затрат дискового пространства. Например, инсталляционные пакеты. Допустим нам надо выложить на FTP несколько вариантов ПО, в каждый из наборов которого входят некие общие пакеты и документация, причем нужна синхронизация между этими файлами, например, если мы внесли изменения в документацию, это должно отразиться во всех наборах. Жесткие ссылки отлично решают эту задачу.

В тоже время жесткие ссылки создают дополнительную путаницу, особенно если вам нужно удалить файл во всех местах использования. Поэтому подходите к использованию жестких ссылок с осторожностью и не злоупотребляйте ими, так как в большинстве случаев символических ссылок более чем достаточно.

Жесткие ссылки, так как являются дополнительной записью в inode, могут использоваться только в пределах одного физического раздела. Также спецификации POSIX запрещают создание жестких ссылок для каталогов.

Права доступа

Еще одним неотъемлемым атрибутом любой файловой системы являются права доступа к файлам и папкам. Linux унаследовал классическую UNIX-систему прав, они не так гибки, как хотелось бы, но обеспечивают приемлемый уровень гибкости и безопасности для простых систем.

Права доступа к файлу (а как мы помним, в Linux все есть файл) хранятся в специальном 16-битовом поле атрибутов файла:

Тип объекта Особые признаки Права доступа
SUID SGID sticky Пользователь Группа Остальные
# # # # s s t r w x r w x r w x

Первые четыре бита устанавливают флаг типа объекта, они задаются при создании файла и не могут быть изменены. Флаг может иметь следующие значения:

  • — Отсутствие флага — обычный файл
  • l — Символическая ссылка
  • d — Директория
  • b — Блочное устройство
  • c — Символьное устройство
  • p — Канал, устройство fifo
  • s — Unix-сокет

Следующие три бита хранят особые признаки, влияющие на запуск исполняемых файлов и некоторые иные права, к ним мы вернемся несколько позже. И наконец следующие девять бит, разделенные на блоки по три бита содержат права доступа к файлу или директории.

Каждый файл в UNIX должен иметь владельца (пользователь, user), группового владельца (группа, group) и остальных пользователей (остальные, other), каждый из этих пользователей может иметь права на чтение (r), запись (w) и исполнение (x).

Применительно к каталогам флаги имеют несколько иной смысл: r — право получения имен файлов в каталоге (но не их атрибутов), x — право получения доступа к файлам и их атрибутам, w — право манипулировать именами файлов, т.е. создавать, удалять, переименовывать. Минимальный разумный набор прав на каталог: rx-, так как только r позволит получить только имена файлов, но не их тип, размер и т.п. Ниже показан пример папки с набором прав r—.

Как нетрудно заметить, w без х не имеет никакого смысла и равносильно его отсутствию.

Запись прав может производиться как в символьной, так и в числовой форме, для этого используют двоичное или восьмеричное (что удобнее) значение установленных битов.

OCT BIN Символьное Права на файл Права на каталог
0 000 отсутствие прав отсутствие прав
1 001 —x право на исполнение право на доступ к файлам и атрибутам
2 010 -w- право на запись отсутствие прав
3 011 -wx право на запись и исполнение все права, кроме получения имен файлов
4 100 r— право на чтение право на получение имен файлов
5 101 r-х право на чтение и исполнение право на получение имен файлов и доступ к ним
6 110 rw- право на чтение и запись право на получение имен файлов
7 111 rwx все права все права

В то время, как в системе используются преимущественно символьные обозначения, для целей администрирования обычно используются цифровые восьмеричные значения. Потому что проще, быстрее и удобнее написать, что права на файл должны быть 644, а не rw-r—r—.

В тоже время символьная запись позволяет быстро оценить реальный набор прав, а не вспоминать, что значит 755. Стандартные права для вновь создаваемых файлов — 664, папок — 775, исключение — файлы и каталоги, созданные с правами суперпользователя, они получают 644 и 755 соответственно.

На практике из всех сочетаний флагов доступа реально используются только 0, 4, 5, 6, 7 для файлов и 0, 5, 7 для папок.

Разобравшись с основными правами перейдем к особым признакам, таких три:

OCT BIN Наименование Действие
1 001 sticky удалить файл может только владелец или root
2 010 SGID файл запускается на исполнение с правами группового владельца
4 100 SUID файл запускается на исполнение с правами владельца

Начнем с младшего бита, его установка означает установку sticky-бита для каталога, установка данного флага для файлов в современных системах игнорируется. Дословно sticky обозначает «липкий», что довольно хорошо соответствует его смыслу. После установки данного флага удалить файл из каталога может только его владелец или суперпользователь, даже если на файлы и папку стоят права 777.

Эта опция может быть использована для организации файловых серверов типа «файлопомойка», когда нужно организовать доступ для всех, без разбора, но исключить возможность случайного или преднамеренного удаления чужих файлов. Установить sticky-бит может только суперпользователь, снять — суперпользователь или владелец каталога.

Опции SUID и SGID позволяют любому пользователю запускать файл на исполнение с правами его владельца или группы. Для чего это нужно? В обычных условиях файл запускается с правами текущего пользователя, что не всегда достаточно для его работы. Например, таким образом работает утилита passwd, нам нужно чтобы пользователь имел возможность изменить свой пароль без повышения прав, но данная операция требует прав суперпользователя. Как быть? Использовать признак SUID. Если мы проверим права на утилиту, то увидим запись rwsr-xr-x или 4755.

При установке признаков SUID и SGID они заменяют символ x на s в соответствующей группе символьного представления или записываются перед основными правами в восьмеричном виде. Вообще-то в цифровом виде все права следует записывать в четырехзначном формате, так как если особые признаки не установлены, то это 000 BIN или 0 OCT. Т.е. правильно писать не 777, а 0777, но обычно для краткости первый ноль опускают.

Если установлены несколько признаков, то записывается восьмеричное число аналогичное установленным битам в двоичном формате, например, SUID + sticky это 101 BIN или 5 OCT. Установленный sticky-бит заменяет x на t в группе other. Ниже показан каталог с правами 7775 или rwsrwsr-t, что соответствует установке на него SUID, SGID и sticky-бит одновременно.

Данная запись сделана нами исключительно в тестовых целях, так как установка SUID для каталога не имеет смысла, а установка SGID приведет к тому, что групповым владельцем создаваемых в нем файлов будет группа владельца каталога, а не группа создавшего его пользователя, как происходит по умолчанию. Также, ввиду потенциальной опасности, игнорируется установка SUID и SGID для скриптов.

В графической среде установка прав разнится в зависимости от выбранного настольного окружения, например, в Unity настройки выполнены в понятной пользователю форме, но особые признаки не отображаются и не могут быть установлены, а для папок присутствует бесполезный набор прав r—.

В XFCE не потрудились задать понятные и логичные наборы для файлов и папок, ограничившись стандартным перечислением, включая бесполезные -w- и -wx, также отсутствует явное указание признака «исполняемый», вместо этого флаг x автоматически добавляется к любому набору прав владельца.

И наконец KDE сочетает достаточно лаконичный основной набор прав с возможностью установки признака «исполняемый» для файлов и sticky-бит для папок с возможностью явно указывать особые признаки в дополнительных настройках.

В любом случае следует помнить, что графический интерфейс не является основным средством администрирования Linux, а представляет надстройку над средствами командной строки. В следующей части нашей статьи мы как раз уделим внимание приемам работы с файловой системой Linux в консольной среде.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Образ диска linux ubuntu
  • Обработка фото в linux mint
  • Обработка фото raw в linux
  • Оболочки рабочего стола linux
  • Оболочка для linux carpc