Добавление привилегий root в сценарий bash

Мне нужно добавить привилегии root в сценарий bash, который использует sudo ; так что всякий раз, когда мы запускаем скрипт с терминала; независимо от того, является ли пользователь root или нет, он не должен запрашивать пароль. Пожалуйста помоги! Выполнение Запуск сценария Bash от имени root не помогло.

1
04.13.2017, 15:24
2 ответа

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

-1
12.03.2019, 06:13
  • 1
    не работает! :( –  MKJ 10.31.2012, 16:52
  • 2
    @Pascal -Хотя это позволяет любому выполнять сценарий, оно не повышает привилегии для запуска от имени пользователя root. –  Argusvision 11.03.2012, 00:08

Лучшим решением будет использование visudo(этот инструмент был создан для этого и позволит избежать раскрытия пароля root ), я предлагаю вам покопаться в том, что с этим происходит.

В качестве обходного пути вы можете запустить это :

echo <password> | sudo -S some-script

(начните команду с пробела, чтобы она не сохранялась в истории bash ).

С Уважением.

5
12.03.2019, 06:13

Вы пытались установить липкий бит в файле, чтобы при запуске он запускался от имени пользователя root?

Вы можете запустить chmod 2777для файла и chown rootдля файла, чтобы передать его пользователю root.

Теперь любой, кто запускает файл, будет запускать его как root.

-2
12.03.2019, 06:13
  • 1
    Это не то, что делает липкий бит. Вы можете прочитать больше о SetUID и stickybit здесь "http://www.dba-oracle.com/linux/sticky_bit.htm" –  Community 11.01.2013, 23:12
  • 2
    1. Бит setuid не работает для файла сценария (, возможно, в bash должен быть установлен бит setuid ). 2. бит setuid не работает для некоторых каталогов (и т. д. монтирование каталогов с помощью nosuid )3. программе может потребоваться `setuid `системный вызов (, если требуется, чтобы дочерний процесс имел такой же uid ) –  yurenchen 10.10.2020, 08:51

Очень неразумно создавать дыру в безопасности путем повышения прав (чего-то, против чего я выступаю )без какой-либо формы проверки личности, но если ваш скрипт не -интерактивен и система полностью контролирует сам скрипт (это означает, что пользователь не может возиться с ним )есть несколько способов сделать это безопасным способом. Я приведу вам несколько примеров использования импровизированных «триггеров событий»
(. да, немного растянув определение )

Этот скрипт должен быть запущен заранее сервером (в /etc/rclocal или что-то в этом роде )у этого скрипта права "root".

#!/bin/bash

CMD="/path/to/a/directory/the/user/has/rights/to/write/into"

mkdir -p "$CMD"

while :
do
    inotifywait -q -e moved_to "$CMD" >/dev/null
    /path/to/script/you/want/to/run.sh
done

Второй — это скрипт, который вызывает пользователь, у него нет root-прав :

#!/bin/bash

CMD="/path/to/a/directory/the/user/has/rights/to/write/into"

touch dummyfile ; mv dummyfile "$CMD"

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

Другой (менее безопасный )способ сделать это — использовать сокеты :

. Во-первых, снова скрипт, вызываемый сервером (, как и в первом примере )

#!/bin/bash
PORTNUMBER="12345"  #or whatever you like and not in use

while :
do
    nc -l localhost $PORTNUMBER >/dev/null
    /path/to/script/you/want/to/run.sh
done

. затем клиентский скрипт

#!/bin/bash
PORTNUMBER="12345"  #or whatever you like and not in use

echo "something" | nc localhost $PORTNUMBER

последнюю строку также можно заменить на :

echo "something" >/dev/tcp/localhost/$PORTNUMBER

Здесь снова :эхо в сокет будет сигнализировать серверному скрипту о запуске вашего скрипта.

И, конечно, это также можно сделать с помощью именованных каналов, но вы поняли идею :-)

4
12.03.2019, 06:13

Теги

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