Флаг специального разрешения Linux Setuid с чтением / записью

Вы можете попробовать перекомпилировать пакет coreutils с помощью ./ configure --enable-single-binary , чтобы он разделял двоичный файл между всеми утилитами, как это делает busybox

0
04.05.2018, 09:12
1 ответ

Не -владелец не может прочитать файл, потому что setuid и setgid влияют только на действующие разрешения при выполнении файла ; в противном случае используются права доступа к файлу.Вот пример программы, которую можно попробовать:

readme.c

#include <stdio.h>

int main(int argc, char **argv) {
  FILE *f;
  int i;
  char c;

  if(argc>1) {
    f=fopen(argv[1],"rb");
    for(i=1; i++<100;) {
      c=getc(f);
      printf("%x%s", (int)c, i%50?" ":"\n");
    }
    fclose(f);
  }
}

Скомпилируйте его и измените его права доступа как кто-то, кроме того, с кем вы хотите протестировать (Я использовалroot):

# gcc -Wall -o readme readme.c
# chown root:root readme
# chmod ug+s,o-rw readme

Проверьте разрешения и попробуйте прочитать файл в качестве тестового пользователя:

erik ~ $ ls -la readme
-rwsr-s--x 1 root root 8064 May  4 12:05 readme
erik ~ $ cat readme
cat: readme: Permission denied

Теперь попробуйте запустить программу и заставить ее прочитать себя:

erik ~ $./readme readme
7f 45 4c 46 2 1 1 0 0 0 0 0 0 0 0 0 3 0 3e 0 1 0 0 0 fffffff0 5 0 0 0 0 0 0 40 0 0 0 0 0 0 0 40 18 0 0 0 0 0 0 0
0 0 0 40 0 38 0 9 0 40 0 1d 0 1c 0 6 0 0 0 4 0 0 0 40 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 fffffff8 1 0

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

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

0
28.01.2020, 04:23

Теги

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