6

Я не являюсь пользователем root и создал каталог, в который могут писать другие пользователи в моей группе. Каталог является setgid, поэтому файлы и каталоги в нем имеют одну и ту же группу.

Я могу удалить файлы, помещенные в этот каталог, но если пользователь создает подкаталог с файлами в нем, я не могу удалить их. Есть ли что-то особенное, что я могу сделать (кроме, скажем, беспокойства пользователя или системного администратора по этому поводу), чтобы избавиться от этого подкаталога?

РЕДАКТИРОВАТЬ: неизбежно, конечно, кто-то спрашивает «почему?"

Рассматриваемая общая папка является ртутным хранилищем. Мы не можем использовать сервер с общим ключом на основе ssh-ключа для этого, как mercurial-сервер, и мы не можем просто разместить его снаружи по различным причинам. Но эта часть работает отлично. Мы используем Redmine для управления проектами, но он еще не читает индекс репо для содержимого файла - он читает рабочий каталог. Поэтому рабочий каталог должен постоянно обновляться. crontab был отключен системным администратором, так что это не так. Поэтому я наивно положил хук изменения в общий репозиторий, который выполнил « hg update ». Сначала казалось, что это работает нормально, пока, конечно, кто-то не выдвинет коммит с новым каталогом. Хотя у меня были смутные мысли о попытке сделать сценарий setuid для хука, я, вероятно, просто рассмотрю более безопасные пути.

2 ответа2

4

Чтобы удалить файл в каталоге, вам нужно иметь разрешение на запись в этот каталог. Очевидно, что пользователи создают каталоги без вашего разрешения на запись, и в этом случае ответ на ваш вопрос - нет, вы ничего не можете сделать, не поговорив с соответствующим пользователем или сисадмином.

Однако, если бы я был сисадмином, я бы беспокоился о том, что ты делаешь. Пользователи не могут создавать файлы в каталогах других пользователей. Есть ли лучший способ сделать то, что вы делаете? Например, загрузка в подходящее веб-приложение даст лучший контроль, а также означает, что вам не нужно беспокоиться об этом.

0

Это не полный ответ, потому что пользователи могут переопределить umask, но вы можете настроить umask вашей "публичной" папки так, чтобы она наследовалась другими пользователями, так что любой созданный ими каталог также будет иметь разрешение 777. Это позволит вам удалить их файлы.

dir=/tmp/abcd
mkdir -o $dir
chmod 777 $dir
setfacl -d -m o::rwx $dir
setfacl -d -m g::rwx $dir

# let users write to $dir, including making subdirs underneath
# examples:
sudo -u other_guy mkdir -o $dir/foo
sudo -u other_guy touch $dir/foo/bar

rm -rf $dir

Без строк setfacl это не сработает, потому что $dir/foo/bar может быть удален кем угодно, кроме other_guy .

Это нарушает, конечно, если пользователь решает намеренно изменить права доступа к файлам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .