LINUX.ORG.RU

Как в bash-cкpиптe зaпpocить пpaвa cyпepпoльзoвaтeля?

 , ,


0

2

Как в bash-cкpиптe зaпpocить пpaвa cyпepпoльзoвaтeля?

Чтoбы нe oткpывaть eгo caмocтoятeльнo c пpaвaми cy.

Hyжнo oднaжды зaпpocить и иcпoлнять cкpипт oт имeни cy. Kaк вapиaнт вcтaвлять вeздe sudо... B oбщeм, я нoвичoк в этoм дeлe.



Последнее исправление: Dreamject (всего исправлений: 3)
Ответ на: комментарий от erzent

A кaк пpoдoлжить выпoлнeниe cкpиптa пocлe «su»?

Ecли c sudo

sudo blahblah
sudo blahblahblah

То с su кaк ? Если просто его поставить, скрипт перестаёт выполняться.

Dreamject
() автор топика
Ответ на: комментарий от Dreamject
#!/bin/sh

something
...
su -c << EOF
something
...
EOF


Как-то так, в общем, поищи на stackowerflow.

yars068 ★★★★
()
#!/bin/bash
if [ $EUID != 0 ]; then
    exec sudo $0 "$@"
fi

echo "Mwa-ha-ha, i am ROOOT!"

И тогда весь скрипт от рута выполнится (ибо через судо).

tiandrey ★★★★★
()
Последнее исправление: tiandrey (всего исправлений: 1)
Ответ на: комментарий от maloi

в centos/rhel работает, gentoo, если в бубунте не пашет, не значит что во всех линуксах.

erzent ☆☆
()
Ответ на: комментарий от maloi

Это не должно работать на всех linux-ах.
И не работает.
А постом ниже erzent просто соврамши: то, что ему позволяют поставить setuid на скрипт и он запускается молча, не значит, что это работает.

ABW ★★★★★
()
Ответ на: комментарий от erzent
$ cat test.sh
#!/bin/bash

whoami
echo "${EUID}"
touch /delme
rm /delme

$ whoami
kroz

$ ls -la test.sh 
-rwsr-xr-x 1 root root 58 июн  7 00:07 test.sh

$ stat -c "%a %n" test.sh 
4755 test.sh

$ ./test.sh 
kroz
1000
touch: cannot touch ‘/delme’: Permission denied
rm: cannot remove ‘/delme’: No such file or directory
Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)

Если программа должна иметь рутовые права, то пользователь должен ее так и запустить. Иначе это некислая дыра в безопасности. Поэтому правильный ответ на твой вопрос такой:

#!/bin/bash
if [ $EUID != 0 ]; then
    echo "Superuser access is required"
    exit 1
fi

...
А если ты заботишься о комфорте пользователя, то для этого существую алиасы.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от erzent

а в чём проблема? 4 буквы вроде места много не занимают

А сколько места занимают буквы твоего пароля? А если умножить на количество строк с sudo в скрипте?

gentoo_root ★★★★★
()
Ответ на: комментарий от Aceler

sudo не переспрашивает пароль в течении определённого времени.

sudo можно настроить так, чтобы спрашивал пароль каждый раз.

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

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

sudo можно вообще не настраивать и тогда ввод пароля не поможет совсем никак.

Автору лучше всего воспользоваться su: Как в bash-cкpиптe зaпpocить пpaвa cyпepпoльзoвaтeля? (комментарий)

Причём переспрашивать, как ниже советуют, не надо, su -c от рута просто выполнит дальнейший скрипт без лишних вопросов.

Aceler ★★★★★
()
Ответ на: комментарий от erzent

chown root:root /скрипт, chmod 4755 /скрипт и всё.

И давно ли SUID-бит на shell-скриптах работает как задумано? Hint: интерпретатор командной строки заупскается с правами запускающего его юзера.

dexpl ★★★★★
()
Ответ на: комментарий от ABW

Тебе запретили патчить ядро и запускать компилятор?

А то что erzent не может ни одного предложения написать без вранья давно известно.

maloi ★★★★★
()
Ответ на: комментарий от Dreamject

Ну там перенаправление ввода лишнее.

#!/bin/sh
echo bleat!
su -с 'mkdir /SUka; read -p "Проверка!"'
Aceler ★★★★★
()
Ответ на: комментарий от bl

суид-бит на шелскриптах вроде не работает.

для эрзента это не важно

JB ★★★★★
()

я конечно ещё нупка, а ты делал права на запуск только руту и алиас на запуск скрипта типа zapusk.sh=«sudo zapusk.sh»?

lolset
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.