2015-07-22 2 views
0

Моя цель - отредактировать файл (чей владелец user1), используя скрипт, где user2 не имеет права на непосредственное редактирование файла, но его следует редактировать при выполнении сценария по user2, поэтому я SUID на сценарий Мой скрипт ниже содержаниеSed не может скопировать временный файл в исходный файл

#!/bin/sh 
echo "Enter variable a" 
read a 
echo "Enter path" 
read Path 
echo "Enter variable b" 
read b 
sed -i -c "/#Hello variable \<$a\>/{h;n;s/\$Initial_Value=.*/\$Initial_Value=$b/}" "$Path" 

скрипт заменяет некоторые сопоставления с образцом в файле в качестве входа

Permissions сценария являются

-rwsr-xr-x 1 user1 user1 648 Jul 21 08:03 Script.ksh 

Права доступа к файлу, скрипт модифицирует являются следующими

-rwxrwxr-x 1 user1 user1 224 Jul 21 10:46 file 

Права доступа к каталогу, под которым файл присутствует в следующем

drwxrwxr-x 6 user1 group1 122880 Jul 22 11:17 directory 

Script становится выполнен user2, который является частью group1, где файл существует, и для выполнения user2 не будет прав на непосредственное редактирование файла.

Чтобы отредактировать файл косвенно с помощью скрипта, я установил бит SUID в скрипте, подумал, что при выполнении пользователем2 он будет выполнен с разрешениями пользователя1 Но когда я выполняю скрипт, SED дает ниже ошибку.

sed: cannot copy Path/sedFKvRSo to Path/file: Permission denied 
+1

Взгляните на: [Разрешить setuid на скриптах оболочки] (http://unix.stackexchange.com/a/2910/74329) – Cyrus

ответ

0

Suid bit не влияет на интерпретируемые сценарии. Просто введите команду id, чтобы узнать ее. Лучше отредактируйте файл sudoers, чтобы позволить user2 запускать этот скрипт как root или написать простой suid-wrapper для его запуска, как показано в this thread.

#include <unistd.h> 

int main(int argc, char *argv[]) { 
    setuid(0); 
    setgid(0); 
    seteuid(0); 
    setegid(0); 
    execv("/tmp/script.sh", argv); // run the script 
    return 0; 
} 
Смежные вопросы