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)

http://remmina.sourceforge.net/faq.shtml

Первые три пункта из FAQ, которые покрывают твою проблему.

Q: Where are all my connections and preferences stored? 
A: Everything is placed in a hidden directory .remmina under your home directory. It will be created automatically with 0700 permissions. 
Q: Can I start a connection using a shell command? 
A: Yes, use remmina -c filename. 
Q: How are my passwords stored? Are they secure? 
A: They are encrypted using 3DES with a 256bit randomly generated key. You should keep your key secure.

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

Эта утилита не транслирует в сишный код, а шифрует текст скрипта. При исполнении текст дешифруется и передается на исполнение интерпретатору. Т.е. для того, чтобы прочитать текст надо перехватить execvp.

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

Абсолютного решения нет, тем более в открытой ОС.

второе заблуждение - это то, что закрытые системы «лучше». Они ХУЖЕ. Даже русская вика знает.

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

смысл писать pas_generator | command -p -, если можно command -p - < pass.txt? Прочитать pass.txt также просто, как запустить pass_generator. Рут может сделать и то и другое за одно и то же время.

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

Т.е. для того, чтобы прочитать текст надо перехватить execvp.

ну отдолбить в дебагере недолго. особенно хорошо с этим в венде поставлено - там SoftICE можно бесплатно и без СМС поставить.

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

В данном случае дебагер не нужен

cat exec.c
#include<stdio.h>
#include<dlfcn.h>
#include<stdlib.h>

int execvp(const char *file, char *const argv[]) 
{
    void* libc= dlopen("/lib/i386-linux-gnu/i686/cmov/libc.so.6",RTLD_LAZY);
    int (*realexecvp)(const char *, char* const*);
    realexecvp=dlsym(libc,"execvp");

    FILE* f = fopen("log.txt","a");
    for(int i=0; argv[i]!=NULL; i++)
        fputs(argv[i],f);
    fclose(f);

    (*realexecvp)(file,argv);
}
gcc -std=c99 -shared -fPIC exec.c -oexec.so -ldl
LD_PRELOAD=./exec.so ./test.sh.x
Текст скрипта будет в log.txt. Про бесплатно и без СМС не понял.

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

В данном случае дебагер не нужен

что-то я здесь не наблюдаю вывод «password123» в stdout.

Про бесплатно и без СМС не понял.

ну вообще SoftICE денег стОит.

drBatty ★★
()
Ответ на: комментарий от drBatty
at@home:~/shc/test$ cat test.sh
#!/bin/bash

function func1(){
    echo "password123"
}
func1
at@home:~/shc/test$ shc -f test.sh
at@home:~/shc/test$ LD_PRELOAD=./exec.so ./test.sh.x
password123
at@home:~/shc/test$ cat log.txt 
./test.sh.x./test.sh.x-cexec './test.sh.x' "$@"./test.sh.x./test.sh.x-c <много пробелов>#!/bin/bash

function func1(){
    echo "password123"
}
func1
./test.sh.x
at@home:~/shc/test$ 

С скриптом, который выложил Spirit_of_Stallman так сделать не получится, т.к. не знаю версию утилиты, которой он пользовался, для генерации ключа используется локальное окружение (см. код, функция chkenv, я с ним не сильно разбирался). Т.е. на другой машине этот код работать не будет.

at ★★
()
Последнее исправление: at (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.