Группа может быть установлена из сценария. Для этого требуется только оператор if if . Группа проверяется, и если она неверна, то сценарий перезапускается с помощью команды sg Nate.
Используется проверка на зацикливание (на случай, если это произойдет непредвиденно).
Чтобы использовать, просто измените группу с «колеса» на желаемое. Замените раздел «DEMO» на обычный код.
Читайте дальше, ниже (после скрипта.)
#! /bin/sh
#
# If the group(set with NEEDGRP) is already correct, or this code has already
# run, then this section is skipped and the rest of the
# script is run; otherwise sg is called to restart the script with the
# desired group. Assumes the command "id -ng" returns the group.
if ! [ "${SBREADY:=false}" = true -o $(id -ng) = ${NEEDGRP:=wheel} ] ; then
export SBREADY=true
exec sg $NEEDGRP "$0" "[email protected]"
fi
# ---------------------- DEMO: CUT HERE ---------------------------
# This is a demonstration of creating files.
echo HELLO my group is $(id -ng), GID=$(id -g)
# NOTE: files are created with the current group only if the directory
# is not sgid.
# Show current directory and permissions on it
echo
pwd -P
ls -ld .
echo
# Create and list some new files, the remove them.
touch my-$$.{a,b,c}
echo Created my-$$.{a,b,c}...
ls -l my-$$.{a,b,c}
echo
rm -v my-$$.{a,b,c}
Ниже приведены распечатки некоторых тестов, проведенных для того, чтобы объяснить, почему именно изменение группы не мой быть достаточным для того, файлы имеют право собственности группы. Разрешения каталога также вступают в игру.
Этот первый журнал является результатом разрушения в обычном каталоге. Сценарий запускается как пользователь frayser, а также группа frayser. Создаются файлы с желаемой группой.Сравните следующий список:
[email protected] ~/src/Answers $ (cd /tmp; $OLDPWD/set-group.sh)
HELLO my group is wheel, GID=10
/tmp
drwxrwxrwt 16 root root 976 Sep 24 04:45 .
Created my-19201.a... my-19201.b... my-19201.c...
-rw-r----- 1 frayser wheel 0 Sep 24 04:53 my-19201.a
-rw-r----- 1 frayser wheel 0 Sep 24 04:53 my-19201.b
-rw-r----- 1 frayser wheel 0 Sep 24 04:53 my-19201.c
removed `my-19201.a'
removed `my-19201.b'
removed `my-19201.c'
Теперь это следующий запуск происходит в режиссере, который SGID «аферист», потому как политика, управление конфигураций даются ГРУППА все Src каталогов. ПРИМЕЧАНИЕ: Файлы наследуют группу каталога.
[email protected] ~/src/Answers $ ./set-group.sh
HELLO my group is wheel, GID=10
/usr/lucho/src/frayser/practice
drwxr-s--- 6 frayser conman 768 Sep 24 04:51 .
Created my-19214.a... my-19214.b... my-19214.c...
-rw-r----- 1 frayser conman 0 Sep 24 04:54 my-19214.a
-rw-r----- 1 frayser conman 0 Sep 24 04:54 my-19214.b
-rw-r----- 1 frayser conman 0 Sep 24 04:54 my-19214.c
removed `my-19214.a'
removed `my-19214.b'
removed `my-19214.c'
[email protected] ~/src/Answers $
Из разрешений каталога, это может быть необходимо для сценария к явно установленных разрешений и прав собственности.
У меня нет систем, где я сейчас под рукой, чтобы проверить (у моей текущей учетной записи только одна группа). Попробуйте 'chgrp groupb myscript.sh' +' chmod g + s myscript.sh'. Это должно изменить идентификатор группы, под которым работает скрипт, и, надеюсь, группа будет использоваться при создании новых файлов. – Dummy00001