У нас есть образы Linux на основе RH; на котором я должен «применить» некоторый «специальный архив», чтобы обновить их до последней версии разработки нашего продукта.
Человек, создавший архив, понял, что в нашем базовом изображении некоторые разрешения неверны; поэтому нам сказали бежать
sudo chgrp -R nobody /whatever
Мы сделали это; и позже, когда наше приложение работает, возникли неясные проблемы.
То , что я нашел позже: призыв к команде chgrp будет ясно Setuid битовой информации о наших двоичных файлах в пределах / независимо.
И настоящая проблема в том, что для правильной работы некоторых наших двоичных файлов должен быть установлен этот бит setuid.
Короче говоря: есть ли способ выполнить эту команду "chgrp", не убивая мои биты setuid?
Я просто запустил следующее в своей локальной Ubuntu; приводя к тому же результату:
mkdir sticky
cd sticky/
touch blub
chmod 4755 blub
ls -al blub
-> показывает мне имя файла с красным фоном -> так что, да, setuid
chgrp -R myuser .
ls -al blub
-> показывает мне имя файла без красного фона -> setuid ушел
4XXX
Бит называется Setuid бит (s
), не липкий. Липкийt
бит, и его назначение немного отличается: en.wikipedia.org/wiki/Sticky_bitsetuid
бит, а неsticky
бит. (2) Не очищатьsetuid
бит, когда вы делаетеchgrp
илиchown
будете проблемой безопасности.Ответы:
Если вы хотите реализовать свой
chgrp -R nobody /whatever
, сохраняя бит setuid, вы можете использовать эти двеfind
командыfind ... -perm 04000
Вариант подбирает файлы с УИП битом. Первая команда затем применяетchgrp
и затем a,chmod
чтобы восстановить бит setuid, который был сбит. Второй относитсяchgrp
ко всем файлам, у которых нет бита setuid.В любом случае, вы не хотите вызывать
chgrp
или использоватьchmod
символические ссылки, так как это повлияет на их цели, следовательно, на! -type l
.источник
chgrp
также очищает бит setgid (и возможности в Linux), который также может потребоваться восстановить.find
find
вызов. Мне не нравятся длинные строки в SE, когда нужно прокручивать текст. Мое добавление! Я сделал это через крайfind
подходом-exec +
может быть сложно сделать надежно, если в итоге разделитьchmod
/chgrp
s на несколько вызовов.find . ! -type l -exec chgrp nobody {} + \( -perms -6000 -exec chmod gu+s {} + -o -perms -4000 -exec chmod u+s {} + -o -perms -2000 -exec chmod g+s {} + \)
должно быть в порядке. Посколькуchgrp
спичек для нескольких файлов, для каждого файла должно быть сделано перед тем вchmod
с.Сброс битов SUID и SGID на
chgrp
(илиchown
) вполне разумен. Это мера безопасности для предотвращения проблем с безопасностью. Для SGID (на исполняемых файлах, я полагаю) означает запустить эту программу с эффективной группой владельца группы .Если вы измените владельца группы, то с точки зрения безопасности и контроля доступа это будет что-то совершенно другое, то есть вместо того, чтобы работать с эффективной группой,
uvw
программа теперь работает с эффективной группойxyz
.Таким образом, вам нужно явно восстановить бит SUID или SGID при смене владельца.
Приложение: к заявлению, что chgrp (или chown) должен очищать только SGID (или SUID, соответственно)
Используя
chown
илиchgrp
изменяя параметры безопасности для исполняемого файла, это является достаточной причиной для очистки любых атрибутов повышения привилегий. Сила Unix заключается в концептуальной простоте, а безопасность Unix уже достаточно сложна. С этой целью удаление SUID и SGID при любом изменении владельца является просто сетью безопасности - в конце концов, в истории Unix / Linux было довольно много уязвимостей из-за ошибочных настроек SUID или SGID.Так что нет более глубокой причины, по которой Unix ведет себя так, это просто консервативное решение.
источник
uvw
программа теперь будет работать с эффективной группойxyz
», но это не относится к обсуждаемому случаю.chown
Ингам илиchgrp
ИНГ изменить настройки безопасности, и это является достаточным основанием для четких признаков привилегий подъемных. Высоки шансы, что в противном случае это ударяет неосторожных.Просветление
setuid
,setgid
немного (по крайней мере на Linux) на не-каталогах осуществляются ядром наchown()
системном вызов сделанногоchgrp
, а неchgrp
сам по себе. Так что единственный способ - это восстановить его потом.Это также очищает возможности безопасности.
Итак, на GNU Linux:
И запустить (как
root
):изменить группу при попытке сохранить разрешения.
Вы можете сделать рекурсивно:
(это все, если предположить, что ничего не мешает одновременно с файлами).
источник
Как обычно в админке есть много способов пройти.
Решение, которое я поставил на место, выглядит так:
источник