Я знаю, что включение setuid для скриптов имеет проблемы с безопасностью и поэтому неактивно по умолчанию, но ожидаю, что оно работает для исполняемых файлов. Я создал исполняемый файл, который показывает uid в качестве вывода, следуя инструкциям, описанным в этом посте: Разрешить setuid для сценариев оболочки
Но он возвращает один и тот же uid (1000) как до, так и после запуска sudo chmod +s ./setuid-test
. Я думаю, это означает, что setuid не влияет на мой исполняемый файл, почему и как решить?
Исходный код:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
printf("%d", geteuid());
return 0;
}
Построен и работает с
$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
При запуске ls -la
вот что я получаю:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
permissions
executable
setuid
Учитель PHP
источник
источник
me@me:~$ ls -la setuid-test
---- возвращает -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
df .
каталог, чтобы найти точку монтирования, затемmount | grep nameofmountpoint
. Там естьnosuid
флаг?Ответы:
Большинство файловых систем, разработанных для Unix / Linux, можно смонтировать с помощью
nosuid
атрибута, который не позволит двоичным файлам setuid или setgid, расположенным в этих файловых системах, изменять эффективный uid или gid процесса. Он часто используется при монтировании «ненадежных» файловых систем, которые находятся под контролем не администратора.В вашем случае вы используете файловую систему типа ecryptfs, которая в соответствии с askubuntu: Ошибка при запуске двоичного файла с корневым setuid в зашифрованном домашнем каталоге автоматически запускает nosuid (и nodev), начиная с версий, выпущенных несколько лет назад.
Вот описание причины изменения с https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-3409 :
источник
chown root
,chmod +s
3) смонтировать его 4) запустить исполняемый файлБит SetUID на исполняемом файле позволяет запускать исполняемый файл у владельца файла (не суперпользователя). Чтобы иметь возможность запускать исполняемый файл от имени пользователя root, выполните:
источник
setuid-test
должен отображатьсяnobody
UID.nobody
, а неroot
nobody
, поэтому я ожидаю65534
взамен, но я вижу,1000
кто бы ни был владельцем!nosuid
, то ваша программа не может работать.mount | grep /home/me
возвращается/home/me/.Private on /home/me type ecryptfs (ecryptfs_check_dev_ruid,ecryptfs_cipher=xxx,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs,ecryptfs_sig=0123456789abcdef,ecryptfs_fnek_sig=fedcba9876543210)