LINUX.ORG.RU

Как спрятать пароль в bash файле?

 ,


1

1

ОС = Debian6

Есть необходимость иметь на рабочем столе скрипт для быстрого RDP доступа к некомеуму виндовому серваку. Скрипт rdp.sh такой:

#!/bin/bash
rdesktop -a16 -5fz -k en-us -d'ДОМЕН' -u'ПОЛЬЗОВАТЕЛЬ' -p ПАРОЛЬ 192.168.189.13

НО, т.к. данный скрипт содержит пароль - содержимое должно быть видно лишь для root. Выставил на него права:

# chmod 700 rdp.sh

в /etc/sudoers прописал:

user ALL = NOPASSWD: /тра-та-та/rdp.sh

На рабочем столе кнопку запуска создал:

sudo /тра-та-та/rdp.sh

Ну и вопрос: Может ли пользователь user каким-то образом выудить пароль из скрипта? Если да, то как пароль понадежнее спрятать?

★★

Последнее исправление: cetjs2 (всего исправлений: 2)

Предлагаю пару вариантов:
1) вынести пароль в read
2) собрать из скрипта бинарник, с которого пароль уже не достать, а строку вызова сессии завернуть в функцию, что бы не палить её, при использовании, в ps.

Spirit_of_Stallman ★★★
()

А что, rdesktop по ключам не умеет?

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

А не проще ли тогда пропатчить саму rdesktop, чтобы пароли из /etc/credentials брала?

Ух, для меня этот вариант явно сложнее был бы. Я не знаю как этого сделать.
А завернуть в function и скомпилить в бинарник - работа пары десятков секунд и одной команды.

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

завернуть в function и скомпилить в бинарник

Запускать rdesktop будешь при помощи system? Тогда ps все покажет…

Eddy_Em ☆☆☆☆☆
()
echo -n qwerty12345 > password

в скрипте написать

rdesktop -u Администратор -p - 192.168.1.1 <password
и закрыть password на чтение всем кроме рута, запускать через sudo, как ты написал

Legioner ★★★★★
()

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

Ну раз, всё равно GUI уже есть, можно опробовать Remmina, и там создать новое подключение с запомненным паролем.

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

Ну раз, всё равно GUI уже есть, можно опробовать Remmina, и там создать новое подключение с запомненным паролем.

не нашел в реммине поля для пред ввода пароля. А в конфигах писать - смысла нет ) опять же можно подсмотреть.

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

2) собрать из скрипта бинарник, с которого пароль уже не достать

Можно подробнее о технологии?

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

Не может. Скрипт естественно должен быть как минимум read only, а лучше вообще закрыть, вместе с password.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)

rdesktop -a16 -5fz -k en-us -d'ДОМЕН' -u'ПОЛЬЗОВАТЕЛЬ' -p ПАРОЛЬ 192.168.189.13

Может ли пользователь user каким-то образом выудить пароль из скрипта?

да. Потому-что ему доступна строка запуска. А там у тебя пароль. Почитай мануал к rdesktop, там эта проблема должна быть решена.

НО, т.к. данный скрипт содержит пароль - содержимое должно быть видно лишь для root. Выставил на него права:

а где лежит этот файл? Если в каталоге юзера, то юзер может его подменить, и запустить ВСЁ ЧТО УГОДНО с ПРАВАМИ РУТА.

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

man strings

$vim test.sh

#!/bin/bash

function func1(){
    echo "password123"
    #echo "password123" | progname
}
func1
shc -f test.sh
cat test.sh.x

^?ELF^B^A^A^@^@^@^@^@^@^@^@^@^B^@>^@^A^@^@^@P^M@^@^@^@^@^@@^@^@^@^@^@^@^@`&^@^@^@^@^@^@^@^@^@^@@^@8^@^H^@@^@^]^@^\^@^F^@^@^@^E^@^@^@@^@^@^@^@^@^@^@@^@@^@^@^@^@^@@^@@^@^@^@^@^@À^A^@^@^@^@^@^@À^A^@^@^@^@^@^@^H^@^@^@^@^@^@^@^C^@^@^@^D^@^@^@^@^B^@^@^@^@^@^@^@^B@              ^@^@^@^@^@^@^B@^@^@^@^@^@^\^@^@^@^@^@^@^@^\^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@^A^@^@^@^E^@^@^@^@^@^@^@^@^@^@^@^@^@@^@^@^@^@^@^@^@@^@^@^@^@^@Ü^[^@^@^@^@^@^@Ü^[^@^@^@^@^@^@^@^@ ^@^@^@^@^@^A^@^@^@^F^@^@^@^@ ^@^@^@^@^@^@^@ `^@^@^@^@^@^@                                             `^@^@^@^@^@T^E^@^@^@^@^@^@<88>^F^@^@^@^@^@^@^@^@ ^@^@^@^@^@^B^@^@^@^F^@^@^@( ^@^@^@^@^@^@( `^@^@^@^@^@( `^@^@^@^@^@ ^A^@^@^@^@^@^@ ^A^@^@^@^@^@^@^H^@^@^@^@^@^@^@^D^@^@^@^D^@^@^@^\^B^@^@^@^@^@^@^\^B@^@^@^@^@^@^\^B@.......
$strings test.sh.x

/lib64/ld-linux-x86-64.so.2
__gmon_start__
libc.so.6
sprintf
perror
__isoc99_sscanf
fork
time
_exit
getpid
kill
strdup
calloc
getppid
strlen
memset
__errno_location
memcmp
putenv
memcpy
malloc
getenv
stderr
execvp
ptrace
waitpid
close
open
fprintf
atoll
strerror
__libc_start_main
__environ
__xstat
GLIBC_2.7
GLIBC_2.2.5
fff.
ATSH
fffff.
l$ L
t$(L
|$0H
x%lx
=%lu %d
%lu %d%c
/proc/%d/as
<null>
%s%s%s: %s
)m?N
pW4(T>?
r7=&k
(Dq9
YCuz
uQo
$ ./test.sh.x

password123

Where is password?

Spirit_of_Stallman ★★★
()
Последнее исправление: Spirit_of_Stallman (всего исправлений: 2)
Ответ на: комментарий от Acceptor

в ps пароль отображается в виде XXXXXXX

возьми другую ps. А вообще это в аргументах записано. argv[@] прочитай, и вся проблема.

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

Можно подробнее о технологии?

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

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

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

идиотский совет - этот твой скрипт вскрывается за 10 минут даже таким «хакером» как я.

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

а где лежит этот файл? Если в каталоге юзера, то юзер может его подменить, и запустить ВСЁ ЧТО УГОДНО с ПРАВАМИ РУТА.

не пришло в голову... Спасибо!

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

objdump -s и objdump -d наскоком ничего мне не дали.
Я верю, что кропотливо поработав пароль достать можно, это логично.
Но на это нужно явно больше труда и знаний, чем работа с файлом в plain text, с паролем в нём.
Или я не прав?

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

Да почитай ты уже ман, ну не может такого быть, чтобы пароль надо было в открытом виде давать: должны же быть и аутентификация по ключам, и чтение пароля из credentials…

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

shc, транслирует скрипт в сишный код

Ой-вей, що ви такое говоrите, таки тrанслrиует в С?

anonymous
()
Ответ на: комментарий от Spirit_of_Stallman

objdump -s и objdump -d наскоком ничего мне не дали.

пароль в 88 бит можно засунуть в пару 64х битных слов и передать через XMM регистр. Gcc любит SSE2, потому возможно компилятор так и сделал. Т.е. посчитал строчку не массивом байт, а двумя 64х битными константами. Ну или ещё что-то подобное. Покажи objdump -S -M intel, я не знаю, что там у тебя конкретно получилось.

Но на это нужно явно больше труда и знаний, чем работа с файлом в plain text, с паролем в нём. Или я не прав?

Дважды. Во первых это действительно не очень сложно, а во вторых, надо всегда считать, что злоумышленник _заведомо_ умнее нас, и для него читать просто байты и в уме декомпиллировать - раз плюнуть. Прятать так константы в любом случае не нужно, хотя оптимизирующий компилятор их обычно действительно так меняет, что они не грепаются.

Если-бы у меня была-бы такая проблема, я-бы зашифровал файл gpg ключом root'а. Вот только от локального рута это всё равно не спасёт - загрузится с флешки, и всё.

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

Да почитай ты уже ман, ну не может такого быть, чтобы пароль надо было в открытом виде давать: должны же быть и аутентификация по ключам, и чтение пароля из credentials…

++

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

Да почитай ты уже ман, ну не может такого быть, чтобы пароль надо было в открытом виде давать: должны же быть и аутентификация по ключам, и чтение пароля из credentials…

Есть, я так понимаю, вариант проброса токена, но в моём случае только хардкор пароль.

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

objdump -S -M intel

В любых вариациях «objdump: 'a.out': No such file»

Дважды. Во первых это действительно не очень сложно, а во вторых, надо всегда считать, что злоумышленник _заведомо_ умнее нас, и для него читать просто байты и в уме декомпиллировать - раз плюнуть. Прятать так константы в любом случае не нужно, хотя оптимизирующий компилятор их обычно действительно так меняет, что они не грепаются.

Значит я был не прав. В этой области толковых знаний не имею, потому и спорить было бы глупо.

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

Если-бы у меня была-бы такая проблема, я-бы зашифровал файл gpg ключом root'а.

И что дальше? пароль то от файла вводить все равно придется?

Вот только от локального рута это всё равно не спасёт - загрузится с флешки, и всё.

речь идёт об удалённой виртуале, с которой потом выход на rdp. Так что флешка тут не канает... Да и не о том заморочка...

Давай вернётся к gpg. Как предлагаешь провернуть?

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

Может ли пользователь user каким-то образом выудить пароль из password?

Без проблем. Запустив скрипт с bash -x увидит все внутренности.

shell-script ★★★★★
()
Последнее исправление: shell-script (всего исправлений: 1)
Ответ на: комментарий от Spirit_of_Stallman

В любых вариациях «objdump: 'a.out': No such file»

нуяхз. Может мультилиба нет?

В этой области толковых знаний не имею

а это азы. Букварь, если можно так сказать.

Ну а ваш совет - это самое распространённое заблуждение, о том, что бинарник «сложно взломать». На самом деле, обычно даже проще, чем sh-скрипт. В скрипте часто Over9000 строк ненужного кривого быдлокода, сложно докопаться до сути. В бинарном файле мусора нет, и всё на ладони. Очевидно, что с выхлопом знакомой программы разобраться проще, чем с продуктом жизнедеятельности какого-то погроммиста.

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

И что дальше? пароль то от файла вводить все равно придется?

нет. пароль можно зашифровать закрытым ключом без пароля на сам ключ.

речь идёт об удалённой виртуале, с которой потом выход на rdp. Так что флешка тут не канает... Да и не о том заморочка...

давай с самого начала? К чему имеет доступ данный юзер? К своему компу имеет доступ? Да? К серверу не имеет? Нет? Но компьютер юзера, должен иметь доступ к серверу, причём так, что-бы сам юзер доступа не имел? Это невозможно. Всегда ваш, К.О.

drBatty ★★
()
Ответ на: комментарий от shell-script

Без проблем. Запустив скрипт с bash -x увидит все внутренности.

это как? Юзер запускает скрипт через sudo, а sudo отдаёт его системе. Система читает первую строку sha-bang, а там никаких -x нет. Просто записано #!/bin/sh, которая на /bin/bash, и куда ты предлагаешь засунуть ключ?

drBatty ★★
()
Ответ на: комментарий от Legioner
┌[lord] [work-hell-machine]:~ 
└>strace ./script_d.sh 2>&1 | grep write
script_d.sh      script_d.sh.x    script_d.sh.x.c

┌[lord] [work-hell-machine]:~ 
└>strace ./script_d.sh.xz 2>&1 | grep write

┌[lord] [work-hell-machine]:~ 
└>strace ./script_d.sh.x 2>&1 | grep write

┌[lord] [work-hell-machine]:~ 
└>strace ./script_d.sh.x.c 2>&1 | grep write

┌[lord] [work-hell-machine]:~ 
└>
Spirit_of_Stallman ★★★
()
Ответ на: комментарий от drBatty

давай с самого начала? К чему имеет доступ данный юзер? К своему компу имеет доступ? Да? К серверу не имеет? Нет? Но компьютер юзера, должен иметь доступ к серверу, причём так, что-бы сам юзер доступа не имел? Это невозможно. Всегда ваш, К.О.

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

Acceptor ★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman
[vsb@localhost asd]$ ./script_d.sh.x 
./script_d.sh.x: �A�Tnn?4�5��n9v��휝bO�exec '%s' "$@"

страшное что-то выдаёт, пароля и близко не вижу :)

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

Скачал, чего-то бинарник скомпилированный им под strace-ом не хочет идти, ладно :)

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

страшное что-то выдаёт, пароля и близко не вижу :)

Попробовал на еще 2х машинах этот же файлик - и правда ересь, работает только на lh, где и был собран.
Через час приду на работу - посмотрю более плотно.
Если не отпишусь - ткните, пожалуйста, может запамятую вдруг.

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

Да я уже собрал свою версию, strace на неё почему то не работает, так что однострочный способ вытащить пароль не удался :)

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

А продолжать предпринимать попытки узнать пароль, в познавательных целях, будете продолжать?
Таки интересно, ибо я, как уже написал, в этой области дуб, а если вы понимаете что да как, было бы интресно узнать трудоёмкость вытаскивания пасса :)

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

Ну я не ахти какой спец в этом деле. Под gdb тоже не запускается, убивается почему-то, видимо какие-то защиты от отладки. Дальше только дизассемблер, а это дело небыстрое и не умею я это дело особо. Это надо на какой-нибудь wasm.ru идти :)

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

Это надо на какой-нибудь wasm.ru идти :)

Зашел я, на форуме, в 3 рандомных темы - заплакал и быстро убежал :)

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