На bash scriptе на терминальном Ubuntu server 10.10 будет присутствовать пароль для подключения к терминальному Windows 2003, хотелось чтобы пользователи не могли прочитать пароль со скрипта и пытаться исполнять другие команды на сервере. Как зашифровать(скомпилировать) bash script? Пытался скомпилировать утилитой SHC от Ubuntu 8.04 (для новых версий нет) файл после компиляции не запускается.
А смысл? Для выполнения скрипт всё равно придётся как-то расшифровывать, и средства расшифровки будут у пользователя, иначе он не сможет запускать этот скрипт.Лучше установить права на файл со скриптом, чтобы запускать его могли только те, кому можно. Ещё лучше не упоминать пароль в тексте скрипта, а читать его из отдельного файла или со стандартного ввода.
Если же задача на самом деле формулируется так: «Пользователи могут использовать пароль, но не должны его знать.», то можно покопать в сторону suid/sudo.
> На 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е на терминальном 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е на терминальном Ubuntu server 10.10 будет присутствовать пароль
> для подключения к терминальному Windows 2003, хотелось чтобы пользователи не могли
> прочитать пароль со скрипта и пытаться исполнять другие команды на сервере.Переформулируй задачу, исключив анонимный доступ, получишь очевидное решение.
1. [Некоторые] пользователи Ubuntu должны иметь доступ к мастдаю
2. Им разрешено запускать некоторые программы на мастдаеРешение - LDAP/AD + group policy в винде + pam_ldap в Ubuntu. Всеми рулишь через LDAP/AD.
>> На 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 ничего нету (придётся самому думать)
Опять не работает. После компиляции с shc-3.8.7 запустился 1 или 2 раза, при последующих запусках пешет Operation not permitted Убито (как и с предыдущими версиями shc). Повторная сборка shc-3.8.7 и компиляция скрипта ничего не меняют. Придётся таки окунатся в С и мутить с шифрованием переменных команды скрипта (чобы не светились открытым тексом после компиляции).
Даже если вы зашифруете бинарник, то запуск его под strace выдаст все параметры system в открытом виде. На многих системах ps и /proc отдадут инфу о параметрах дочернего процесса rdesktop
Так что чем шифровать бинарь просто уберите r флаг с него.
> Даже если вы зашифруете бинарник, то запуск его под strace выдаст все
> параметры system в открытом виде. На многих системах ps и /proc
> отдадут инфу о параметрах дочернего процесса rdesktop
> Так что чем шифровать бинарь просто уберите r флаг с него.Спасибо за совет, но всё равно пользователь может читать параметры командной строки (через папку /proc, да и в системном мониоторе (там правда можно скрыть столбец параметров командной строки)), даже если сделать владельцем файла root-а, а права выставить 711(rwx--x--x). Может попробовать выставить запрет на чтение папки /proc ?
> Спасибо за совет, но всё равно пользователь может читать параметры командной строки
> (через папку /proc, да и в системном мониоторе (там правда
> можно скрыть столбец параметров командной строки)), даже если сделать владельцем файла
> root-а, а права выставить 711(rwx--x--x). Может попробовать выставить запрет на чтение
> папки /proc ?А разве rdesktop не подменяет пароль, указанный в коммандной строке на XXXXXXX?
> Может попробовать выставить запрет на чтение папки /proc ?GRSECURITY впаяй, там много полезного для таких случаев.
> Даже если вы зашифруете бинарник, то запуск его под straceЁптыть, а что делает strace, gcc и прочая DEV ботва на сервере?
А если юзер насуёт туда криптоанализаторов, john the рипперов, MD5 крякеров.
> Программа компилится, подключается,но в скомпилированном файле всё равно
> открытым текстом видна вся команда.Через массивы
#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);
}