(man) писал(а):`sticky-бит' не описывается в POSIX. Такое специфическое название он получил из-за первоначальной функции, которую он выполнял: сохранял исполняемый
код программы на устройстве подкачки. В настоящее время установка sticky-бита для каталога, приводит к тому, что только владелец файла и владелец этого
каталога могут удалять этот файл из каталога. (Обычно это используется в каталогах типа /tmp, куда все имеют права на запись).
предположительно Вам нужен setuid-бит. что-то вроде
(man) писал(а):`sticky-бит' не описывается в POSIX. Такое специфическое название он получил из-за первоначальной функции, которую он выполнял: сохранял исполняемый
код программы на устройстве подкачки. В настоящее время установка sticky-бита для каталога, приводит к тому, что только владелец файла и владелец этого
каталога могут удалять этот файл из каталога. (Обычно это используется в каталогах типа /tmp, куда все имеют права на запись).
предположительно Вам нужен setuid-бит. что-то вроде
Почему mount отказывается монтировать и как заставить?
А этот скрипт при выполнении ругается как-нибудь? Чего говорит?
mount: только root может сделать это
ЗЫ. Нашёл вот
Сохраняемый идентификатор пользователя(SUID) применителен только к исполняемым модулям программ, которые обычно зовут бинарными файлами и имеющие соответствующие права запуска.
Собстевнно, проблему я решил. Надо сделать два скрипта:
loop_mount_core:
в sudoers надо разрешить запуск loop_mount_core без пароля
прада неясно, как в loop_mount_core узнать какой юзер это запустил (это нужно для проверки - можно монтировать, или отказать)
в sudoers надо разрешить запуск loop_mount_core без пароля
прада неясно, как в loop_mount_core узнать какой юзер это запустил (это нужно для проверки - можно монтировать, или отказать)
А это все ради чего вообще? Зачем такие сложности: два скрипта, sudoers, запуск без пароля...
Если уж влом монтировать от рута (хотя я привык), то может проще использовать fuse?
Пускай скрипят мои конечности.
Я - повелитель бесконечности... Мой блог
в sudoers надо разрешить запуск loop_mount_core без пароля
прада неясно, как в loop_mount_core узнать какой юзер это запустил (это нужно для проверки - можно монтировать, или отказать)
А это все ради чего вообще? Зачем такие сложности: два скрипта, sudoers, запуск без пароля...
Если уж влом монтировать от рута (хотя я привык), то может проще использовать fuse?
задача: разрешить юзерам монтировать свои образы.
осталась одна проблема: в скрипте, запущенном из-под sudo узнать имя юзера, который этот скрипт запустил
Math, как вариант могу Вам предложить Furius ISO Mount - GTK морда для стандартной mount. Она вообще пароль не запрашивает, и кроме ISO умеет монтировать IMG, BIN, MDF и NRG.
math, Вы представляете какую дыру в безопасности, Вы сделали?
Если бы система разрешила suid на Ваш shell скрипт - любой пользователь смог бы вызвать любую команду от рута.
То же самое во втором решении - там конечно вообще suid не нужен, но опять же - кто угодно сможет вызвать произвольную команду от рута
Если я ничего не путаю, то fuse именно для этого и существует. Ибо это Filesystem in Userspace
Думаю, корифеи не дадут соврать и поправят меня, если я ошибаюсь.
UPD: Точнее речь идет об утилите fuseiso.
Пускай скрипят мои конечности.
Я - повелитель бесконечности... Мой блог
осталась одна проблема: в скрипте, запущенном из-под sudo узнать имя юзера, который этот скрипт запустил
программа sudo сама по себе прекрасно проверяет имя пользователя и разрешает или запрещает выполнение команды в зависимости от правил в sudoers
Автору темы нужно узнать имя пользователя не для проверки прав на выполнение команды, а для того, чтобы каждому позволить монтировать только его собственные образы.
Хм... крайний раз когда я пробовал, было необходимо прописывать полный путь, иначе правило не срабатывало.
глянул man sudoers
там пишут:
"env_reset"
Если установлено, то sudo обнулит значения переменных окружения оставив только следующие: HOME, LOGNAME, PATH, SHELL, TERM, и USER (в дополнение к переменным SUDO_*). Из них будет полностью скопирован в неизменном виде только TERM. Прочие переменные будут установлены в значения по умолчанию (возможно изменённые в соответствии со значениями параметра set_logname). Если sudo было собрано с параметром SECURE_PATH, то это значение быдет использовано для переменной окружения PATH. Другие переменные могут быть сохранены использованием параметра env_keep.
Да при чем тут env_reset... Я говорю о том, что если в sudoers прописать правило на команду «mount», то это правило никогда не сработает. Нет такого файла. Есть /bin/mount, /home/vasya/bin/mount, /tmp/angry-trojan/mount и т.п, где бы и как бы не были установлены PATH и как бы пользователь ни вызывал эту команду. Ибо sudo всегда для сравнения берет абсолютный путь к запускаемому файлу, но путь из sudoers берет без изменений и преобразований по PATH или как там еще.
Во-первых, sudo использует $PATH рута. Во-вторых, никто не мешает прописать полный путь; но это и не обязательно (см. «во-первых»).
Про первое не знал. прям как у рута? то есть как делает логин шелл?
Про второе - конечно можно.
Ок. смотрим дальше на опции mount: можно смонтировать любую фс с поддержкой suid и dev
я просто не выкладывал полный скрипт, там есть ещё проверки безопасности и т.д. Сейчас доделаю и выложу. Может кому-нибудь будет интересно посмотреть, дыры поискать
#!/bin/bash
if [ ! -f "$1" ]; then
exit 1
fi
if su $SUDO_USER -c "[ ! -r \"$1\" ]"; then
exit 1
fi
if [ "$2" = rw ]; then
if su $SUDO_USER -c "[ -w \"$1\" ]"; then
/bin/umount /media/image 2>/dev/null
/bin/mount "$1" /media/image -o loop,users
exit 0
fi
fi
/bin/umount /media/image 2>/dev/null
/bin/mount "$1" /media/image -o loop,users,ro