- A folder with the setgid bit set force all its content to have the same owner group as the folder
Ага. Вновь созданные файлы получают группу каталога, группу файла можно, конечно, впоследствии изменить.(Мы называем их каталогами, а не папками.)
- A program with the setgid bit set always run on behalf of the owner group
Ага. Хотя вам не нужен setgid в каталоге, если вы создаете файлы только через двоичный файл setgid. Программа setgid получает рассматриваемую группу в качестве основной группы, поэтому любые создаваемые ею файлы по умолчанию принадлежат этой группе (, а не группе вызывающего пользователя ).
- I set setgid bit for the shell script
Это та часть, которая не работает. Большинство систем не учитывают биты setuid и setgid в интерпретируемых скриптах , так как это легко приводит к ряду проблем с безопасностью.
Что вам нужно сделать, так это написать программу-оболочку на C, которая выполняет скрипт, и сделать эту оболочку setgid; или (предпочтительно )используйте что-то вроде
sudo
, чтобы позволить вашим пользователям запускать скрипт с правами другой группы.(sudo
уже имеет дело с такими вещами, как очистка переменных окружения, которые могут быть проблематичными. )В обоих случаях убедитесь, что скрипт и его интерпретатор находятся в каталогах, которые пользователи не могут изменять.Для
sudo
требуемая конфигурация (в/etc/sudoers
)будет примерно такой:username ALL=(:privgroup) /path/to/script
Это позволит пользователю
username
запускать/path/to/script
как группуprivgroup
. Вы можете использовать%groupname
вместоusername
, чтобы позволить всем членамgroupname
запускать скрипт. Пользователям нужно будет запустить сценарий, используяsudo -g privgroup /path/to/script
, потому чтоsudo
по умолчанию пытается запустить указанную команду какroot
, а мы этого не разрешили. Но вы можете написать оболочку для этой команды.