У меня есть проблемы с правами доступа к файлам, которые я бы хотел решить, не прибегая к тому, чтобы все было доступно для записи.
Я пишу файлы в NetApp SAN. Каталог, в который я пишу, принадлежит пользователю devel
и имеет группу devel
с правами на запись в группу (0775
). Имя пользователя, которое я пишу, в группах username
и devel
.
Проблема в том, что SAN проверяет только первую группу, поэтому я получаю отказ в разрешении. Если я использую команды newgrp
или sg
, чтобы изменить мою группу на devel
, то я могу записать в каталог.
Сценарий, пытающийся сделать запись, написан на Perl, но запускается удаленно с другого компьютера через ssh и некоторые сценарии bash.
Я не могу изменить целевой каталог, чтобы он входил в группу username
, потому что есть другие разработчики, и они находятся в разных группах (но мы все разделяем группу devel
).
Я не могу сделать сам скрипт Perl setgid, потому что мы запускаем разные среды (devel, test, qa, production и т. Д.) С соответствующими группами, и я не хочу управлять битами прав доступа к файлам на этом уровне.
Я не могу использовать функцию POSIX setgid
из скрипта Perl, потому что она не запускается от имени пользователя root (и у меня нет возможности получить root), поэтому мне отказано в разрешении. Присвоение $)
и $(
дает тот же результат.
Я не могу использовать команду newgrp
от bash, потому что newgrp
не принимает никаких аргументов, он просто запускает новую интерактивную оболочку (любые последующие команды выполняются после выхода из новой оболочки) .
Я также не могу использовать newgrp
, чтобы запустить новую оболочку и создать оттуда скрипт Perl, поскольку скрипт Perl выполняется на удаленной машине через соединение ssh. Скрипт получит «свежую» оболочку на удаленной машине в моей группе по умолчанию, а не в группе, установленной через newgrp
на локальной машине.
Я не могу использовать команду sg
, потому что она принимает только один аргумент. Я цитирую полную командную строку, включая известные аргументы. Однако способ запуска удаленных процессов через ssh включает передачу локальных аргументов в переменной "$@"
bash. Другими словами, я могу сделать process start
или process stop
, а скрипт process
обрабатывает команду ssh
и передает любые локальные аргументы, которые я набрал, используя "$@"
. Я пытался написать обертку, но обнаружил, что мы используем множество интересных форм локальных аргументов, и не решаюсь погрузиться в необходимые цитаты и избежать кошмара.
Итак, мой вопрос: кто-нибудь знает о каких-то других способах установки эффективного идентификатора группы для запущенного процесса, из Perl или bash? Существует ли форма с несколькими аргументами sg
?