Проблема каталога группы

Имейте сложный вопрос для Вас. Имейте поле Linux. Потребность создать каталог, где пользователи смогли бы создать файлы, но удалить/изменить только файлы, созданные ими. Достаточно простой иметь липкий набор битов и вот именно. Но затем мы хотим, чтобы конкретный администраторский пользователь смог удалить файлы из этого каталога и не являющийся пользователем root. Как сделать это? NFS4_ACLs возможны там. Но я уверен, что они не помогут. Идеи? Пользователи: user1:uploaders user2:uploaders admin1:admins <---должен смочь управлять файлами в dir группы

sgid на dir позволяет защитить файлы от того, чтобы быть отредактированным другими пользователями, но ничто не мешает пользователю удалить файлы других пользователей. Это - проблема

ОБНОВЛЕНИЕ 1:

Вопрос был для полномочий FS и nfs4_acls просто, потому что пользователи будут работать с файлами по sftp. Так, чтобы sudo и другие пути в виде сценария не были возможны. Возможный должен использовать LD_PRELOAD для sftp-сервера и переопределить удаление связь syscall или что-то как этот. Таким образом, это обрушивается к openssh и sftp-серверу.

ОБНОВЛЕНИЕ 2:

Пользователи являются chrooted к рассматриваемому каталогу openssh, и каталог должен быть root:root, находящимся в собственности, чтобы он работал. Все файлы помещаются в этот каталог без любой структуры (конкретное приложение). Администратор является на самом деле не единственным пользователем для управления загруженными файлами, а скорее группой администраторских пользователей.

2
задан 6 April 2015 в 19:02
6 ответов

Я бы предпочел использовать sudo , а не ACL. (В вопросе нет явного упоминания NFS, поэтому я предполагаю, что root_squash не является проблемой.)

Начните с вашего каталога с разрешениями 1777 (липкие плюс все чтение / запись) как вы предложили.

Создайте этот сценарий с именем файла, например / usr / local / bin / rmd . Измените определение TARGET так, чтобы это был абсолютный путь к целевому каталогу.

#!/bin/bash
#
# Remove files from $TARGET. Some care is taken to avoid escaping from
# the path root
#
########################################################################
#
TARGET='/tmp'

ERROR=
for ITEM in "$@"
do
    LINK=$(readlink -f "$ITEM")
    if test -n "$LINK" && echo "$LINK" | grep -vq "^$TARGET/"
    then
        echo "Suspicious path: $ITEM" >&2
        ERROR=yes
    fi
done
test yes = "$ERROR" && exit 1

exec rm "$@"

Добавьте следующую запись в файл sudoers (используйте visudo для редактирования этот файл). Измените admin на пользователя с правами администратора для удаления файлов в целевом каталоге.

admin ALL = NOPASSWD: /usr/local/bin/rmd

Поскольку нам известно, что rmd находится в / usr / local / bin можно было бы повторно exec скрипт, если у него не было достаточных привилегий, и таким образом, чтобы администратор не забывал использовать sudo , но я пропустил это сейчас. Дайте мне знать, если вы хотите эту настройку скрипта.

Пример использования

$ ls -l /tmp
lrwxrwxrwx 1 roaima roaima 4 Mar 31 00:17 etc -> /etc
-rw-r--r-- 1 roaima roaima 0 Mar 31 00:29 one
lrwxrwxrwx 1 roaima roaima 2 Mar 31 00:20 root -> ..
-rw-r--r-- 1 roaima roaima 0 Mar 31 00:29 two

$ sudo rmd /tmp/etc/hosts /tmp/root/etc/motd /tmp/one
Suspicious path: /tmp/etc/hosts
Suspicious path: /tmp/root/etc/motd

$ ls /tmp
etc  one  root  two

$ sudo rmd /tmp/one /tmp/root
$ ls /tmp
etc  two
1
ответ дан 3 December 2019 в 12:48

Bindfs - одно из возможных решений. Я назвал своего опытного администратора nradmin , и вот пример:

mkdir /uploads
chmod 1777 /uploads

mkdir /home/nradmin/manage-uploads
bindfs -u nradmin -p ud+rwx /uploads /home/nradmin/manage-uploads

Каждый файл и каталог в смонтированной цели принадлежит nradmin . -p ud + rwx делает каждый каталог с разрешениями "rwx" для владельца каталога. Поскольку nradmin является владельцем всех каталогов и имеет в них полные права владельца, он может успешно удалить в них любой файл, даже рекурсивно.


Альтернативным подходом может быть код ограниченного ] chroot () реализация / bin / rm и выполните ее как root . chroot () может быть экранирован процессом, запущенным root , но только если вы дадите этому процессу свободу выполнять все, что он хочет. Простой двоичный файл C, который сначала делает chdir () & chroot () в каталог / uploads , а затем вызывает только unlink () ] или rmdir () должны быть безопасными. Но для этого требуется много кода, например, рекурсивное удаление каталогов, параметр командной строки, например -f , чтобы игнорировать несуществующие файлы и т. Д.

0
ответ дан 3 December 2019 в 12:48

Вот одно простое решение. Считайте, что администратором является admin , а наш специальный каталог должен быть / tmp / special .

mkdir /tmp/special
chmod 1777 /tmp/special
chown admin:admin /tmp/special
ls -ld /tmp/special
drwxrwxrwt 2 admin admin 4096 Apr  3 21:34 /tmp/special

Любой пользователь может создавать / редактировать / удалять свои собственные файлы в ] / tmp / special .Пользователь admin может удалить любой файл (хотя и с предупреждениями от rm ).

NB. Если пользователь создает каталог в / tmp / special , административный пользователь не может его удалить. Это может быть препятствием для этого решения, но, поскольку в вашем вопросе упоминались только файлы , а не каталоги , я чувствовал, что это стоит предложить.

0
ответ дан 3 December 2019 в 12:48

Полный объем этой проблемы неясен, так как мы не знаем, каков сценарий использования. Однако с помощью меток SELinux можно добиться того, о чем вы просите. SELinux дает вам детальный контроль над тем, кто что и где делает. Если количество пользователей «ограничено» и «известно» - наличие определенных контекстов / меток, связанных с каждым из них, не является большой проблемой, тогда нужно написать небольшую политику в коде ваших требований.

0
ответ дан 3 December 2019 в 12:48

Хм ... как насчет перехода в / special_folders_root / special_folder /./ , чтобы избежать проблем с корневыми каталогами, принадлежащими root? См. Документацию vsftpd (например) для объяснения посторонних точек в пути.

Не уверен, если следующее будет полезно, но: У нас есть доля самбы с субдирами. Сетевые MFU, помещающие отсканированные документы в определенные подкаталоги (MFU01 -> / share / 001 /, MFU15--> / share / 015 / и т. д.). Пользователи (из Windows) могут изменять или удалять файлы в любом из этих подкаталогов, но не могут удалять подкаталоги. Я сделал это, используя ACL в стиле Windows, но я ничего не знаю о ACL NFS

NB! Не за щедрость, а за помощь.

0
ответ дан 3 December 2019 в 12:48

ماذا عن هذا الأسلوب:

احتفظ بالملفات الأصلية التي تم تحميلها في دليل منفصل ، لكل مستخدم. يغطي هذا الحوكمة وأذونات الحذف.

في $ share ، كل شيء عبارة عن رابط للملفات الأصلية ، وقوائم التحكم في الوصول للمالك / المشرف موجودة.

في النهاية ، كل عنصر في $ share رابط العودة. أي شيء ليس رابط يتم نقله إلى مجلد مالك (رافع).

0
ответ дан 3 December 2019 в 12:48

Теги

Похожие вопросы