суббота, 12 июня 2010 г.

Какие права доступа и привилегии нужны, чтобы изменить владельца объекта?

Это перевод What are the access rights and privileges that control changing ownership of an object? Автор: Реймонд Чен.

Смена владельца объекта (обычно: файла) сама по себе не сложна: вы просто вызываете функцию SetNamedSecurityInfo с новым дескриптором безопасности.

Сложная часть - дойти до вызова SetNamedSecurityInfo.

Если у вас есть право WRITE_OWNER на объект, то вы можете изменить его владельца на себя (или любой другой SID в вашем токене, у которого есть атрибут SE_GROUP_OWNER): т.е. вы можете взять владение на себя. Однако, вы не можете сделать владельцем кого-то ещё: вы не можете передать владение другому человеку. Если вы могли бы так делать, то это было бы нарушением ограничения квот.

Вообразите, если бы это было бы возможно: если бы вы могли изменить владельца на любого, членом чего вы не являетесь. Пусть ваш аккаунт исчерпал свою квоту на дисковое пространиство. Не проблема, вы просто находите кого-то, кто ещё не исчерпал квоту (типа Фреда из бухгалтерии), берёте свой самый большой файл и делаете Фреда его владельцем. Это приводит к тому, что дисковое пространство для этого файла теперь будет вычитаться из квоты нового владельца - Фреда, при этом он даже не знает, что это произошло. Если вы положите этот файл в каталог, к которому у Фреда нет доступа, то бедный Фред будет получать сообщения "Вы исчерпали своё дисковое пространство", не имея при этом возможности даже найти этот дьявольский файл, что вы ему подсунули. Это как украсть чью-то библиотечную карточку и набрать на неё кучу книг.

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

Но как насчёт SeTakeOwnershipPrivilege? Эта привилегия даётся администраторам и позволяет вам действовать так, как если бы у вас был доступ WRITE_OWNER (а не SeRestorePrivilege) на любой объект. Иными словами, с SeTakeOwnershipPrivilege вы можете стать владельцем любого файла, но вы всё ещё не можете установить владельца в кого-то ещё.

И напоследок: загадочный SID CREATOR_OWNER, описанный в статье базы знаний и в блоге Ларри Остермана. Важной вещью является запомнить, что установка SID CREATOR_OWNER для объекта после его создания, на самом деле, не изменяет чего-либо для создателя или владельца. Прочитайте статью по ссылке для более подробного объявления.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

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