Є кілька підходів, деякі з них переважно захищені, інші - зовсім не такі.
Невпевнений спосіб
Нехай будь-яке використання працює mount
, наприклад, через sudo. Ви можете також дати їм корінь; це те саме. Користувач може змонтувати файлову систему з копією кореневої копії bash
—запуск, який миттєво дає корінь (швидше за все, без будь-якого журналу, поза фактом, що mount
був запущений).
Крім того, користувач може встановити свою власну файлову систему поверх /etc
, що містить свою власну копію /etc/shadow
або /etc/sudoers
, а потім отримати root з будь-яким su
або sudo
. Або можливо прив’язати-mount ( mount --bind
) над одним із цих двох файлів. Або новий файл у /etc/sudoers.d
.
Подібні напади можуть бути зняті /etc/pam.d
і над багатьма іншими місцями.
Пам'ятайте, що файлові системи навіть не повинні бути на пристрої, вони -o loop
зможуть змонтувати файл, який належить користувачеві (і, таким чином, змінюється).
Здебільшого безпечний спосіб: удиски чи подібні
У різних середовищах на робочому столі вже є вбудовані рішення для цього, що дозволяє користувачам монтувати знімні носії. Вони працюють, встановлюючи лише в підкаталозі /media
та вимикаючи підтримку set-user / group-id через параметри ядра. Варіанти тут включають udisks
, udisks2
, pmount
, usbmount
,
Якщо потрібно, ви можете написати свій власний сценарій, щоб зробити щось подібне, і викликати його через sudo - але ви повинні бути дуже обережними при написанні цього сценарію, щоб не залишати кореневих подвигів. Якщо ви не хочете, щоб ваші користувачі пам'ятали судо, ви можете зробити щось подібне у сценарії:
#!/bin/bash
if [ $UID -ne 0 ]; then # or `id -u`
exec sudo -- "$0" "$@"
fi
# rest of script goes here
Будучи захищеним колись: простори імен користувачів
Простори імен Linux - це дуже легка форма віртуалізації (конкретніше - контейнери). Зокрема, за допомогою просторів імен користувачів будь-який користувач у системі може створити своє власне середовище, в якому він знаходиться root. Це дозволило б їм монтувати файлові системи, за винятком того, що явно було заблоковано, за винятком кількох віртуальних файлових систем. Врешті-решт, файлові системи FUSE, ймовірно, будуть дозволені, проте останні патчі, які я міг знайти , не охоплюють блокові пристрої, а лише такі речі, як sshfs.
Крім того, у багатьох ядрах дистрибутива (з міркувань безпеки) дефолт не дозволяється непривілейованим користувачам користуватися просторами імен користувачів; наприклад, Debian має kernel.unprivileged_userns_clone
значення за замовчуванням до 0. Інші дистрибутиви мають подібні налаштування, хоча часто з дещо різними іменами.
Найкраща документація, яку я знаю про простори імен користувачів, - це стаття LWN Імена просторів
в роботі, частина 5: Простори імен користувачів .
Поки б я пішов з удисками2.
gvfs-mount
-d /dev/sdX