SUID немного в Linux, работает не так, как должно

У меня есть текстовый файл с именем Demo, который имеет разрешение на запись только для владельца. У меня также есть исполняемый файл (здесь он называется demowr.bash), который будет записывать в этот демонстрационный файл, и, поскольку я хочу, чтобы другие пользователи использовали эту программу, я установил бит set-uid. Вот что ls -l видно по файлам.

-rw-r--r-- 1 Coder Coder 6 Oct 28 23:36 ./Demo
-rwsrwxr-x 1 Coder Coder 7472 Oct 28 23:27 ./demowr.bash*

Если я выполняю файл как кодер, все в порядке. Но если я запускаю его как любой другой пользователь, он не работает, говоря, что у него нет разрешения на запись.

Я использовал следующие коды для исполняемого файла и текстового файла:

chmod u+s ./demowr.bash
chmod o-w ./demowr.bash

chmod o-w ./Demo
chmod g-w ./Demo

Вот содержимое файла demowr.bash

#!/bin/bash
echo "$1">Demo

Почему же, даже если бит s установлен, я не могу писать, когда запускаюсь от имени другого пользователя?

PS

Linux игнорирует бит setuid¹ во всех интерпретируемых исполняемых файлах (т.е. исполняемых файлах, начинающихся со строки #!)

Я также написал программу на C, чтобы сделать то же самое. Результат тот же, access Функция говорит, что разрешение на запись не дано. Вот код C:

#define FILENAME "./Demo"

int main(int argn, char *argv[])
{
  int length = strlen(argv[1]);
  if (access(FILENAME,W_OK) == -1){
    printf("Error: You do now have write permission.\n");
    return 1;
  }

  int fd = open(FILENAME,O_WRONLY);
  write(fd,argv[1],length);
  close(fd);
  return 0;
}

При запуске как не владелец я получаю сообщение об ошибке.

Error: You do now have write permission.

0 ответов

Другие вопросы по тегам