Как вы получаете Linux для соблюдения директорий setuid?

8

Некоторое время назад, когда я разговаривал в IRC, один из пользователей канала, в котором я находился, предложил установить каталог для того, чтобы он унаследовал идентификатор пользователя для файлов, чтобы решить проблему, возникшую у другого человека. В то время я говорил и говорил: «Linux не поддерживает директории setuid». После этого человек, давший совет, показал мне пастин ( http://codepad.org/4In62f13 ) своей системы, соблюдающий набор разрешений setuid для каталога.

Просто чтобы объяснить, когда я говорю «linux не поддерживает каталоги setuid», я имею в виду, что вы можете перейти к «каталогу chmod u + s», и он установит бит в каталоге. Тем не менее, linux (как я понял) игнорирует этот бит (для каталогов).

Попробуйте, как я мог, я просто не могу воспроизвести этот пастин. Кто-то однажды предложил мне, что можно было бы подражать поведению с selinux - и, играя по правилам, можно принудительно установить uid в файле, но не из разрешения директории setuid (что я вижу). Чтение в Интернете было довольно неинформативным - большинство мест утверждают, что «нет, setuid для каталогов не работает с linux», а иногда «это может быть сделано при определенных обстоятельствах» (например, это: http://arstechnica.com/ etc / linux / 2003 / linux.ars-12032003.html )

Я не помню, кто был первоначальным человеком, но исходная система была системой Debian 6, и файловая система, на которой она работала, была смонтирована xfs с "default, acl". Я попытался воспроизвести это, но пока не повезло (пробовал пока что с различными версиями Debian, Ubuntu, Fedora и Centos)

Кто-нибудь может подсказать мне, что или как вы получаете систему для соблюдения setuid в каталоге?

Takigama
источник
XFS, безусловно, имеет параметр монтирования ( grpid|bsdgroupsили nogrpid|sysvgroups), который означает, что файлы в каталогах создаются с группой каталога, а не с группой владельца; возможно поиграть с этим?
Занчей

Ответы:

7

Setuid для каталогов не ведет себя как setgid. Если только выход оболочки не был получен из FreeBSD, кому-то было скучно, и он немного развлекался за ваш счет.

Набор разрешений setuid для каталога игнорируется в системах UNIX и Linux. [4] FreeBSD может быть настроен так, чтобы интерпретировать его аналогично setgid, а именно заставить все файлы и подкаталоги принадлежать владельцу верхнего каталога. [5]

В FreeBSD каталоги ведут себя так, как будто их бит setgid был установлен всегда, независимо от его фактического значения. Как указано в open (2): «Когда создается новый файл, ему присваивается группа каталога, в которой он находится».

http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories

Аарон Копли
источник
Я полагаю, что это так ... однако, парень был почти уверен, что он достиг своей цели ... Затем я обратился к форумам Debian, потому что он использовал Debian, и получил это для ответа: forums.debian.net /… Я, возможно, разместил в не очень хорошем состоянии и получил холодное плечо. Приблизительно после месяца и небольшого исследования этого, я не уверен, что это определенно не может быть сделано, но я не могу понять, почему ребята Debian полагают, что это возможно без изменения чего-либо.
Такигама
Если бы он достиг этого, он был бы лучшим источником того, как это было сделано. Я сам исследовал тему и ничего не нашел.
Аарон Копли
@AaronCopley: Есть ли у вас другой источник, кроме википедии, для того факта, что набор разрешений setuid для каталога используется в системах Linux?
Мартин Тома
Нет. Но вы можете попробовать это и убедиться сами. :)
Аарон Копли
2

Частичный ответ / обходной путь:

Я пытался сделать то же самое, я решил не бороться с этим и попробовать другой метод. Я попробовал списки контроля доступа, чтобы установить разрешения по умолчанию. (Примечание: вам может понадобиться сначала их включить).

setfacl -R --set-file=- . <<EOF
# file: testdir/
# owner: testuser
# group: testgroup
user::rwx
group::rwx
group:normaluser:rwx
mask::rwx
other::r-x
default:group::rwx
default:group:normaluser:rwx
default:mask::rwx
default:other::r-x
EOF

Здесь testuser используется для запуска тестов, и обычный пользователь может удалить результаты, не приводя к использованию root (каждый раз).

Ctrl-Alt-Делор
источник
Это добавляет новую группу, но установленный идентификатор группы работает нормально.
Ctrl-Alt-Delor
-2

От RHEL man chmod

chmod сохраняет биты set-user-ID и set-group-ID каталога, если вы явно не укажете иначе. Вы можете установить или очистить биты с помощью символических режимов, таких как u + s и gs, и вы можете установить (но не очистить) биты с помощью числового режима.

Численно, если я правильно помню, chmod 4711 ./dirдобавляет установленный бит UID, chmod 2711 ./dirдобавляет установленный бит gid для этого, 6711устанавливая наследование uid + gid согласно демонстрации в pastebin.

На страницу руководства chmod u+s== chmod 4XXXи chmod g+s==chmod 2XXX

Oneiroi
источник
1
нет, я понимаю, как их применять, это не проблема.
Такигама
(нажмите enter по ошибке) Проблема в том, что они делают с каталогом, я считаю, что setuid для каталогов не был чем-то, что делал linux, например (система ubuntu 10.10): testuser @ boson: ~ $ ls -ald ~ drwsrwsrwx 3 testuser testuser 4096 2012-03-21 01:55 / home / testuser В этом каталоге есть и setuid, и setgid. Теперь как пользователь tt @ boson: ~ $ touch ~ testuser / file t @ boson: ~ $ ls -la! $ Ls -la ~ testuser / file -rw-r - r-- 1 t testuser 0 2012-03 -21 01:57 / home / testuser / file Обратите внимание, что бит setuid в каталоге не влияет (что я ожидаю). как заставить систему linux использовать setuid в каталоге?
Такигама
Вы можете очистить их с помощью чего-то вроде =755или 00755используя
числовые значения