1

Можно ли отказать в праве на копирование файлов?

У меня есть скрипт, который должен выполняться другими. Им также разрешено читать файл (хотя запретить чтение не составит труда). Но я не хочу, чтобы сценарий был изменен и выполнен.

Установить эти разрешения не проблема, но можно легко скопировать, изменить и запустить скрипт. Можно ли этого избежать?

ОС Red Hat Enterprise Linux Workstation версии 6.2 (Сантьяго).

3 ответа3

2

Вы можете использовать sudo для этого.

Вы можете разрешить пользователям использовать ваш сценарий и только этот сценарий.

Шаг за шагом:

  1. Создайте системную учетную запись "executor_account" (вы можете использовать любое имя) и дайте ей разрешения для вашего скрипта. Не используйте учетную запись root для этого.

  2. Настройте sudo.

    Вы должны научиться использовать sudo и позволить своим пользователям создавать "sudo executor_account myscript.sh" и ничего более. Можно разрешить им выполнять файл, который они не могут. Я не эксперт по Linux, я не буду объяснять это, но вы можете найти много учебников о sudo везде.

Я думаю, что это единственный способ позволить пользователю выполнить файл, который он не может прочитать.

Скрипт будет запускаться из другой учетной записи пользователя, поэтому возможные "продукты" скрипта (журналы и т.д.) Будут принадлежать той специальной учетной записи, которую вы создали. Вы должны как-то с этим справиться, если скрипт или программа, выполняемая скриптом, создает какие-то файлы.

1

Нет, это невозможно с разрешениями для файлов Linux. Пользователи должны быть в состоянии прочитать сценарий оболочки, чтобы выполнить его - и это означает, что они могут сделать копию, изменить ее и запустить.

1

Это немного глупо, но - напишите программу на C, которая выглядит так:

#include <stdio.h>
#include <stdlib.h>

    ︙

        FILE    *sh;

        sh = popen("/bin/sh", "w");            // Use "/bin/bash" if you need to.
        if (sh == (FILE *)NULL) {
                perror("popen");
                exit(1);
        }
                                        <-------- Insert magic here.
        fclose(sh);

На « Вставьте магию здесь. ”Укажите, вставьте код для записи сценария в sh ; например,

        fprintf(sh, "for x in red blue green\n");
        fprintf(sh, "do\n");
        fprintf(sh, "        echo x = \"$x\"\n");
        fprintf(sh, "done\n");

Если это больше, чем просто несколько строк, может быть удобнее хранить его как строковый массив.  Затем скомпилируйте эту программу и сделайте двоичный файл доступным только для выполнения (например, режим 710 или 711).

Ни одно решение не будет надежным, потому что пользователи смогут видеть, какие команды выполняются, используя ps в другом окне, но это даст им лишь фрагментарные проблески в сценарии.

Конечно, если логика вашего скрипта действительно чувствительна, реальный ответ - перевести его на компилируемый язык.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .