Программа setuid, принадлежащая некорневому пользователю - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть программа setuid (getpwd), которая работает, как и ожидалось, только если она принадлежит пользователю root.

-rwsr-xr-x 1 root root 7981 2011-11-17 18:28 getpwd*

Другими словами, когда моя программа запускается из командной строки пользователем "Алиса", все работает нормально

Программа открывает файл в каталоге /home/secure и выводит содержимое на экран.

alice@devbox:/home/alice/tmp$ ./getpwd
setuid is working

Однако, когда я меняю владельца и устанавливаю setuid файла:

chown secure:users getpwd
chmod 4755 getpwd

-rwsr-xr-x 1 secure users 7981 2011-11-17 18:28 getpwd*

Программа не запускается при выполнении от имени пользователя "Алиса".

alice@devbox:/home/alice/tmp$ ./getpwd
cannot open file /home/secure/test ...

Почему это происходит?

ls -ld /home/ /home/secure/
drwx--x--x 2 secure users 280 Nov 18 11:16 /home/secure/

ls -ld /home/secure/*
-rw------- 1 secure users 33 Nov 15 14:35 /home/secure/test

1 Ответ

3 голосов
/ 18 ноября 2011

Как мне гарантировать, что только пользователь "Алиса" может запускать программу setuid, принадлежащую secure?

Есть два возможных подхода. Один использует только традиционные разрешения Unix, а другой использует новомодные списки ACL.

Традиционный Unix

Создать новую группу; возможно ALICE или что-то явно отличающееся от alice учетной записи пользователя. Убедитесь, что alice является членом ALICE в group(5). (vigr(8) - отличный способ отредактировать файл group(5).) Установите права владения вашими getpwd программами secure:ALICE и удалить привилегии мирового исполнения для файла. Тогда только secure и члены группы ALICE могут выполнить программу setuid getpwd.

Если alice является просто заменой для потенциально большей группы людей, то, возможно, назовите группу SECURE. (Верхний регистр просто удобен для моего описания. Вам не нужно придерживаться верхнего регистра.)

новомодных списков ACL

setfacl -m u:alice:x getpwd

Программа setfacl(1) немного сложна, но она позволяет создавать гораздо более сложные разрешения, чем традиционные разрешения Unix. Поскольку они довольно разные, в большинстве систем, которые я видел, по умолчанию они не включены - для этого требуется опция acl до mount(8) при монтировании файловой системы. Вам необходимо добавить acl к файловым системам в /etc/fstab, для которых требуются дополнительные разрешения. (Вам не нужно перезагружаться, чтобы сделать его доступным; mount /file/system -oremount,acl будет достаточно, пока файловая система смонтирована - обычно до перезагрузки.)

Я предлагаю придерживаться традиционного метода Unix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...