LinuxForum.Fans
Тема

Вопрос по BASH

Автор: dirsex 25 сообщений 4995 просмотров
#158199

Добрый день, скажу сразу в BASH не шибко рублю.
В общем делаю скрипт, мне необходимо некоторые команды выполнить от рута или через sudo

Ну допустим пускай будет такой скрипт:

text
#!/bin/sh
OLDFOLDER=$(pwd)
NEXTFOLDER="/home/user/"
cd $NEXTFOLDER
cp ./test.txt $OLDFOLDER
exit 0

Только нужно чтобы скрипт выполнился от рута (или sudo), т.е. залогинелся и принял пароль. Как сделать?

#158207
dirsex написал:
Как сделать?

Для пользователя, от имени которого будет запускаться скрипт, с помощью команды visudo настроить право запускать этот скрипт на данном компьютере без ввода пароля.
То есть, запустив visudo, наберите примерно такую команду:

text

USER   localhost = NOPASSWD: /полный_путь/к_скрипту/script.sh
#158212

Спасибо.

Я так понял, что альтернативного решения нет. Ну допустим в самом скрипте залогинется от какогонибуть пользователя и выполнять последующие команды?

#158214
dirsex написал:
Ну допустим в самом скрипте залогинется от какогонибуть пользователя и выполнять последующие команды?

Сделать скрипт интерактивным, ждущим ввода пароля для запуска от определённого пользователя, либо пароль в том или ином виде должен быть доступен скрипту.
IMHO, sudo как раз и предназначено в том числе и для обхода подобных решений. Чем именно не подходит sudo?

#158217

SUDO мне подходит, дело в моем нехватке знаний..

Ну допустим пускай пароль будет внутри скрипта... ну чтото типо

[console]echo password | sudo -u user touch /home/user/111.txt[/console]

Ну... даж не знаю.

Допустим будет скрипт, в котором будет 2-е переменных:
SCRIPTUSER="user"
SCRIPTPASSWORD="password"
ну а дальше скрипт .....
Чтобы потом я этот скриптик мог перенести на другой ПК, просто поменять параметры переменных и он работал..

#158218

Настройки sudo позволяют выполнять запуск определённых команд на определённом хосте или группе хостов от определённого пользователя или группы.
А передавать пароль в открытом виде даже на локальном компьютере как-то... oO

#158219

А передавать пароль в открытом виде даже на локальном компьютере как-то...

Я конечно понимаю, что бред. Но какбы теоретически можно или нет?

#158220
dirsex написал:
Но какбы теоретически можно или нет?

Скорее всего, возможно.

#158221

как?

#158225

Блин сам же, ответил на свой вопрос в 5 посте

text
echo password | sudo -S touch /test.txt

Тема закрыта.

#158236
dirsex написал:
Допустим будет скрипт, в котором будет 2-е переменных:
SCRIPTUSER="user"
SCRIPTPASSWORD="password"

ТАК ДЕЛАТЬ НЕЛЬЗЯ!!!!

если надо sudo БЕЗ пароля, следует использовать

NOPASSWD and PASSWD

By default, sudo requires that a user authenticate him or herself before running a command. This behavior
can be modified via the NOPASSWD tag. Like a Runas_Spec, the NOPASSWD tag sets a default for the commands
that follow it in the Cmnd_Spec_List. Conversely, the PASSWD tag can be used to reverse things. For
example:

ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm

would allow the user ray to run /bin/kill, /bin/ls, and /usr/bin/lprm as root on the machine rushmore
without authenticating himself. If we only want ray to be able to run /bin/kill without a password the
entry would be:

ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm

Note, however, that the PASSWD tag has no effect on users who are in the group specified by the
exempt_group option.

By default, if the NOPASSWD tag is applied to any of the entries for a user on the current host, he or she
will be able to run sudo -l without a password. Additionally, a user may only run sudo -v without a
password if the NOPASSWD tag is present for all a user's entries that pertain to the current host. This
behavior may be overridden via the verifypw and listpw options.

вот теперь - решено. хранить пароль в скрипте/переменных - основная ошибка любого начинающего админа. Именно эта дыра проверяется в первую очередь при взломе. Ибо так делают все :[

#158240
Lupo Alberto написал:
А передавать пароль в открытом виде даже на локальном компьютере как-то...

"даже" - это вы зря. Если так делать, то удалённый злоумышленник ВНЕЗАПНО становится локальным рутом. Со всеми вытекающими.

#158398

ДА Я ЭТО ПРЕКРАСНО ПОНИМАЮ И ПАРОЛЬ В ОТКРЫТОМ ВИДЕ ХРАНИТЬ НЕ СОБИРАЮСЬ!!

Просто сама реализация.

Ну допустим я делаю некий локальный интерфейс администрирования допустим на php, в котором будет идти запрос пароля для sudo, после чего выполняется команда с приминением этого пароля и все! Если пароль введен не верно ниче выполняться не будет, если верно = будет.

Так вопрос - зачем мне применять на какойто скрипт заведомо привилегии sudo???????????

#158407
dirsex написал:
(1)ДА Я ЭТО ПРЕКРАСНО ПОНИМАЮ И ПАРОЛЬ В ОТКРЫТОМ ВИДЕ ХРАНИТЬ НЕ СОБИРАЮСЬ!!
dirsex написал:
(2)Ну допустим я делаю некий локальный интерфейс администрирования допустим на php, в котором будет идти запрос пароля для sudo

(1) противоречит (2). :(

dirsex написал:
Так вопрос - зачем мне применять на какойто скрипт заведомо привилегии sudo

всё очень просто - если взломать php-скрипт, он сможет только выполнять данный sh-скрипт. Т.е. злоумышленник не получит ничего нового. Например - юзер может выполнить скрипт, который останавливает и/или запускает программу. тыкает себе start/stop. предположим, враг взломает сайт. И что? У него как было право тыкать start/stop, так и осталось ТОЛЬКО это право. А если php скрипт знает какой-то пароль, то враг тоже может воспользоваться этим паролем, и не только выполнить start/stop, но и всё, что угодно.

При этом подразумевается, что права на sh-скрипт 0700, т.е. враг его даже прочитать не может (а потому найти там дыры), он его может только тупо запускать.

Вообще, пароли никогда не вводятся скриптом. Никогда
Пароль используется для доказательства того, что "у руля" человек, а не скрипт. Скрипты не пользуются паролями. Если скрипту требуется доступ на другой компьютер, используется ключ. (скрипту всё равно, сколько букв запоминать, потому используется длинный и защищённый ключ, который есть ТОЛЬКО у того скрипта, у которого есть доступ. А тот комп К КОТОРОМУ доступ ключа к себе-же не имеет. Как и все остальные компьютеры. Это позволяет оперативно заблокировать атакованный узел (а не всю сеть гасить).

#158414

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

Пароль используется для доказательства того, что "у руля" человек, а не скрипт.

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

(1) противоречит (2).

Извините, но Вы меня не так поняли. Сперва запрос пароля (Введите пароль ... ) потом выполнение скрипта с использованием sudo.
ТОЛЬКО ЗАПРОС ПАРОЛЯ В САМОМ ВЕБ ИНТЕРФЕЙСЕ.

#158422
dirsex написал:
ТОЛЬКО ЗАПРОС ПАРОЛЯ В САМОМ ВЕБ ИНТЕРФЕЙСЕ.

хватит уже сферического вакуума. существует десятки точек, откуда будет виден ваш пароль. в каждом конкретном случае есть множество лазеек.

Уже достаточно того, что удалённый пользователь знает локальный пароль, а следовательно с лёгкостью войдёт в систему любым удобным ему способом, минуя web-интерфейс вообще.

#158427

dirsex, а вообще - делайте как хотите. 95% так делают. и - ничего.

#158435

:D
Везде есть свои недостатки, а вломать можно все, что угодно. сплойты стряпают каждый день на такие проекты.... А практика нужна во всем, даже по Вашему мнению - глупой реализации.

#158441
dirsex написал:
А практика нужна во всем, даже по Вашему мнению - глупой реализации.

понимаете, это не Моё Мнение. Это общепринятая практика: Везде, при любых условиях, стремятся избежать передачи/ввода пароля в открытом виде. Для решения этой задачи существует десятки хитроумных схем и сотни разных костылей (вроде sudo). На бедную su навесили Over9000 проверок, лишь-бы она жрала пароли ТОЛЬКО от оператора, а не в коем случае от кого-то ещё...

Может вы лучше что-нить полезное изучите? Например асимметричное шифрование? Чем плодить ещё одну провальную схему? Таких схем "защиты" и так... И без вас много :(

#158443

кстати, пароль на доступ нигде не хранится, и никогда не проверяется. В т.ч. и в Linux'е.

Войдите или зарегистрируйтесь, чтобы ответить.