URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9210
[ Назад ]

Исходное сообщение
"Как зашифровать(скомпилировать) bash script"

Отправлено armnic , 03-Авг-11 09:16 
На bash scriptе на терминальном Ubuntu server 10.10 будет присутствовать пароль для подключения к терминальному Windows 2003, хотелось чтобы пользователи не могли прочитать пароль со скрипта и пытаться исполнять другие команды на сервере. Как зашифровать(скомпилировать) bash script? Пытался скомпилировать утилитой SHC от Ubuntu 8.04 (для новых версий нет) файл после компиляции не запускается.

Содержание

Сообщения в этом обсуждении
"Как зашифровать(скомпилировать) bash script"
Отправлено XAnder , 03-Авг-11 11:38 
А смысл? Для выполнения скрипт всё равно придётся как-то расшифровывать, и средства расшифровки будут у пользователя, иначе он не сможет запускать этот скрипт.

Лучше установить права на файл со скриптом, чтобы запускать его могли только те, кому можно. Ещё лучше не упоминать пароль в тексте скрипта, а читать его из отдельного файла или со стандартного ввода.

Если же задача на самом деле формулируется так: «Пользователи могут использовать пароль, но не должны его знать.», то можно покопать в сторону suid/sudo.


"Как зашифровать(скомпилировать) bash script"
Отправлено allez , 03-Авг-11 11:47 
>  На bash scriptе на терминальном Ubuntu server 10.10 будет присутствовать пароль
> для подключения к терминальному Windows 2003, хотелось чтобы пользователи не могли
> прочитать пароль со скрипта и пытаться исполнять другие команды на сервере.
> Как зашифровать(скомпилировать) bash script? Пытался скомпилировать утилитой SHC от Ubuntu
> 8.04 (для новых версий нет) файл после компиляции не запускается.

Ну, раз пошла такая пьянка, попробуйте скачать исходный код этой утилиты: http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
Собирается все очень просто, достаточно распаковать архив, войти в каталог с исходниками
и дать команду "make". Только что сам скачал shc, собрал и попробовал скомпилировать
несколько скриптов - работает, полученные бинарники нормально запускаются.


"Как зашифровать(скомпилировать) bash script"
Отправлено jedi , 03-Авг-11 12:41 
>  На bash scriptе на терминальном Ubuntu server 10.10 будет присутствовать пароль
> для подключения к терминальному Windows 2003, хотелось чтобы пользователи не могли
> прочитать пароль со скрипта и пытаться исполнять другие команды на сервере.
> Как зашифровать(скомпилировать) bash script? Пытался скомпилировать утилитой SHC от Ubuntu
> 8.04 (для новых версий нет) файл после компиляции не запускается.

Есть если gcc то наверно проще всего будет вкомпилировать скрипт внутрь программы на С
http://www.unix.com/programming/29079-how-include-shell-scri...
Либо вызывать скрипт из программы


"Как зашифровать(скомпилировать) bash script"
Отправлено ACCA , 04-Авг-11 18:16 
>  На bash scriptе на терминальном Ubuntu server 10.10 будет присутствовать пароль
> для подключения к терминальному Windows 2003, хотелось чтобы пользователи не могли
> прочитать пароль со скрипта и пытаться исполнять другие команды на сервере.

Переформулируй задачу, исключив анонимный доступ, получишь очевидное решение.

1. [Некоторые] пользователи Ubuntu должны иметь доступ к мастдаю
2. Им разрешено запускать некоторые программы на мастдае

Решение - LDAP/AD + group policy в винде + pam_ldap в Ubuntu. Всеми рулишь через LDAP/AD.


"Как зашифровать(скомпилировать) bash script РЕШЕНО"
Отправлено armnic , 05-Авг-11 12:37 
>>  На bash scriptе на терминальном Ubuntu server 10.10 будет присутствовать пароль
>> для подключения к терминальному Windows 2003, хотелось чтобы пользователи не могли
>> прочитать пароль со скрипта и пытаться исполнять другие команды на сервере.
> Переформулируй задачу, исключив анонимный доступ, получишь очевидное решение.
> 1. [Некоторые] пользователи Ubuntu должны иметь доступ к мастдаю
> 2. Им разрешено запускать некоторые программы на мастдае
> Решение - LDAP/AD + group policy в винде + pam_ldap в Ubuntu.
> Всеми рулишь через LDAP/AD.

Всем спасибо, звиняйте что оставил ветку надолго. Уже начал на С делать вызов команды (похоже на вариант  jedi)

#include <stdio.h>
main() {
int ret = system("rdesktop -u user -p пароль -k en-us -g 1024x768 192.168.168.41");
}
Программа компилится, подключается,но в скомпилированном файле всё равно открытым текстом видна вся команда. Пытался зашифровать UPX 3.07 , так он не может, пишет NotCompressibleException (хотя файлы размером поболее зашифровывает нормально).
  Вариант allez-а с shc-3.8.7 заработал (сорри я сначала использовал более старую версию).
В дальнейшем надо подумать насчёт взламываемости, что-то в трудах небезизвестнго Криса Касперки про shc ничего нету (придётся самому думать)


"Как зашифровать(скомпилировать) bash script"
Отправлено armnic , 05-Авг-11 13:23 
Опять не работает. После компиляции с shc-3.8.7 запустился 1 или 2 раза, при последующих запусках пешет Operation not permitted Убито (как и с предыдущими версиями shc). Повторная сборка shc-3.8.7 и компиляция скрипта ничего не меняют. Придётся таки окунатся в С и мутить с шифрованием переменных команды скрипта (чобы не светились открытым тексом после компиляции).

"Как зашифровать(скомпилировать) bash script РЕШЕНО"
Отправлено angra , 07-Авг-11 11:57 
Даже если вы зашифруете бинарник, то запуск его под strace выдаст все параметры system в открытом виде. На многих системах ps и /proc отдадут инфу о параметрах дочернего процесса rdesktop
Так что чем шифровать бинарь просто уберите r флаг с него.

"Как зашифровать(скомпилировать) bash script РЕШЕНО"
Отправлено armnic , 09-Авг-11 12:42 
> Даже если вы зашифруете бинарник, то запуск его под strace выдаст все
> параметры system в открытом виде. На многих системах ps и /proc
> отдадут инфу о параметрах дочернего процесса rdesktop
> Так что чем шифровать бинарь просто уберите r флаг с него.

Спасибо за совет, но всё равно пользователь может читать параметры командной строки (через  папку /proc, да и в системном мониоторе (там правда можно скрыть столбец параметров командной строки)), даже если сделать владельцем файла root-а, а права выставить 711(rwx--x--x). Может попробовать выставить запрет на чтение папки /proc ?


"Как зашифровать(скомпилировать) bash script РЕШЕНО"
Отправлено Мяут , 04-Сен-11 00:44 
> Спасибо за совет, но всё равно пользователь может читать параметры командной строки
> (через  папку /proc, да и в системном мониоторе (там правда
> можно скрыть столбец параметров командной строки)), даже если сделать владельцем файла
> root-а, а права выставить 711(rwx--x--x). Может попробовать выставить запрет на чтение
> папки /proc ?

А разве rdesktop не подменяет пароль, указанный в коммандной строке на XXXXXXX?


"Как зашифровать(скомпилировать) bash script РЕШЕНО"
Отправлено pavlinux , 19-Сен-11 01:43 
> Может попробовать выставить запрет на чтение папки /proc ?

GRSECURITY впаяй, там много полезного для таких случаев.


"Как зашифровать(скомпилировать) bash script РЕШЕНО"
Отправлено pavlinux , 19-Сен-11 01:40 
> Даже если вы зашифруете бинарник, то запуск его под strace

Ёптыть, а что делает strace, gcc  и прочая DEV ботва на сервере?
А если юзер насуёт туда криптоанализаторов, john the рипперов, MD5 крякеров.


"Как зашифровать(скомпилировать) bash script РЕШЕНО"
Отправлено pavlinux , 19-Сен-11 01:46 
> Программа компилится, подключается,но в скомпилированном файле всё равно
> открытым текстом видна вся команда.

Через массивы


                              #include <stdio.h>
                              #include <stdlib.h>
                              #include <string.h>
                                    int
                                main(void){
                                 /* cat */
                            const char _Server_[]=
                           {0x63, 0x61, 0x74, 0x20};
                             /* /proc/cpuinfo */
                         const char Copyright_2009[]=
                           {0x2f, 0x70, 0x72, 0x6f,
                           0x63, 0x2f, 0x63, 0x70,
                           0x75, 0x69, 0x6e, 0x66,
                           0x6f, 0x00, 0x00, 0x00};
        char *Windows_ = malloc(sizeof(_Server_) + sizeof(Copyright_2009));
                   strncpy(Windows_, _Server_, sizeof(_Server_));
              strncat(Windows_, Copyright_2009, sizeof(Copyright_2009));
              char Microsoft[sizeof(_Server_) + sizeof(Copyright_2009)];
memmove((void *)&Microsoft, Windows_, sizeof(_Server_) + sizeof(Copyright_2009));
                                 free(Windows_);
                                Windows_ = NULL;
                               system(Microsoft);
                             return (EXIT_SUCCESS);
                                      }