Viji
@Viji
DevOps Engineer

Почему файл не выполняется под пользователем user1?

Есть скрипт со след permissions

rwsrwsrwx 1 user1 user1 3946 Sep  2 01:37 /home/user1/scripts/./generate_confi.sh*


вроде для него выполнил команду установки Setuid
chmod +x generate_confi.sh
chmod u+s generate_confi.sh


тем не менее когда запускаю скрипт из под юзера user2, он запускается из контекста этого же user2 - а вроде должен как user1? Проверял командой whoami внутри скрипта
  • Вопрос задан
  • 123 просмотра
Решения вопроса 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Биты setuid/setgid не работают со скриптами. Они работают только с двоичными исполняемыми файлами. Скрипт -- это текстовый файл интерпретируемый другой программой. Чтобы выполнить скрипт под другим пользователем воспользуйтесь командой sudo.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
suid работает к тем командам, которые собственно создают процесс.
В случае скриптов, процесс создает не /path/to/script.sh, а /usr/bin/bash, поэтому и suid следует ставить на /usr/bin/bash

И так со ВСЕМИ скриптами.
Используйте sudo, su или runuser
Ответ написан
Viji
@Viji Автор вопроса
DevOps Engineer
решил проблему командой visudo и добавлением строки - ограничиваю одной командой, скриптом

user2 ALL=(user1) NOPASSWD: /path/to/script.sh

запускаю

sudo -u user1 /path/to/script.sh
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@SunTechnik
Для bash скриптов suid бит не работает.

Можно попытаться в заголовке файла изменить:
#! /bin/bash
На
#! /bin/bash -p
Или на
#! /bin/sh -p

Но у sh есть некоторые отличия в синтаксисе.

Для perl скриптов suid работает.

Поиск в интернете по ключевым словам: bash suid script
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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