Как старая поговорка идет - если у кого-то есть физический доступ к Вашим серверам, все ставки прочь!
То же относится к хостингу облака/виртуальной машины. Тем не менее существуют некоторые шаги смягчения, которые можно сделать в зависимости от типов данных, которые Вы хотите защитить. например.
Протест: Просто помните, что существуют способы извлечь Ваши незашифрованные данные из памяти вместо из файлов на диске. Существуют также способы напасть на файлы на диске.
Ах, переносимость сценария оболочки, веселье!
Ага, uname
и проверка $ SHELL
- самый простой способ (и единственный переносимый способ I можно придумать), чтобы сделать это.
Вы можете использовать facter
, который является частью Puppet (но может использоваться независимо, если у вас нет Puppet в вашей среде), чтобы получить основные сведения о целевой системе.
Например:
$ facter operatingsystem
CentOS
$ facter kernel kernelversion osfamily
kernel => Linux
kernelversion => 2.6.32
osfamily => RedHat
gem install facter
должно быть достаточно, чтобы установить его в любой системе с доступным Ruby, если он еще не входит в ваши системные пакеты.
Самый простой способ узнать, какой у вас дистрибутив, - это проверить / etc / issue
~$ cat /etc/issue
Debian GNU/Linux 6.0 \n \l
~$ cat /etc/issue
CentOS release 5.8 (Final)
Kernel \r on an \m
~$ cat /etc/issue
Ubuntu 12.04.2 LTS \n \l
Гораздо лучше писать переносимый код. Практически все достижимо, используя простой POSIX, и тогда вам не нужно будет беспокоиться о том, какие утилиты принимают какие параметры.
Функции оболочки всегда полезны, когда что-то полезное недоступно, например ls -A:
ls-A()
{
ls -f ${1+"$@"} | sort | sed '1,2d'
}
Of Конечно, это очень надумано, но намного лучше, чем поддержка нескольких наборов кода для каждой операционной системы, а также поддерживает ОС, о которых вы даже не думали;
case $OS in
GNU)
# some bashisms
;;
FreeBSD)
# some shisms
;;
*)
# Oops, don't know what to do!
;;
esac