exec
Пример:
Переменная окружения
#shell #utils
Пример:
$ exec $SHELL
Переменная окружения
$SHELL имеет значение текущей оболочки по-умолчанию (ее путь), в моем случае это /bin/bash. Что делает exec? Он заменяет текущий процесс на новый, то есть заменяет текущий /bin/bash на новый /bin/bash. Таким образом, вы остаетесь в той же оболочке, но все предыдущие настройки и процессы текущей оболочки будут сброшены. Это может быть полезно для обновления или сброса окружения без необходимости открывать новый терминал. Например, мы изменили какие-то файлы окружения пользователя, допустим это /etc/bash.bashrc, чтобы не открывать новый терминал, можно просто запустить команду сброса/запуска нового /bin/bash после изменений.#shell #utils
pushd / popd / dirs
Показывают всю красоту стека и его логику, например:
~/main/notes ~/main ~
~/main ~
#utils
Показывают всю красоту стека и его логику, например:
$ pushd ~/main
$ pushd ~/main/notes
$ dirs
~/main/notes ~/main ~
$ popd
~/main ~
#utils
Когда пользователь удаляет файл в Linux, сам файл не удаляется полностью. Вместо этого лишь удаляется его запись в индексе файловой системы, и пространство, которое он занимал, помечается как доступное для записи. Фактическое содержимое файла остается на месте и может быть легко восстановлено, пока на это место не будет записана новая информация. Чтобы этого избежать можно перезаписать область памяти нулями или случайными числами.
Можно использовать shred для HDD дисков (для SSD это не актуально), он перезапишет содержимое файла случайными числами перед удалением. И если восстановить файл, то его невозможно будет прочитать. Важно заметить, что перезапись файлов удлиняет интервал удаления файла, делает этот процесс более медленным.
Добавить нули перед удалением файла, перезаписать 4 раза:
Можно посмотреть как это работает:
В выводе будет абракадабра (это получит хакер, который восстановит секретный файл с диска).
Можно еще добавить alias для этого:
Уничтожить весь диск:
shred не работает с каталогами, для них можно использовать wipe:
shred не эффективен для файловых систем AIX, JFS, XFS, Ext3 и NFS из-за определенных особенностей и способа их работы.
#utils #security
Можно использовать shred для HDD дисков (для SSD это не актуально), он перезапишет содержимое файла случайными числами перед удалением. И если восстановить файл, то его невозможно будет прочитать. Важно заметить, что перезапись файлов удлиняет интервал удаления файла, делает этот процесс более медленным.
Добавить нули перед удалением файла, перезаписать 4 раза:
$ shred -uzn 4 file-with-secrets.txt
Можно посмотреть как это работает:
$ echo "hello world" > my-new-file.txt
$ shred -n 4 my-new-file.txt
$ cat my-new-file.txt
В выводе будет абракадабра (это получит хакер, который восстановит секретный файл с диска).
Можно еще добавить alias для этого:
alias rmf='shred -uzn 4'
Уничтожить весь диск:
$ shred /dev/<device>
shred не работает с каталогами, для них можно использовать wipe:
$ wipe -rf <dir>
shred не эффективен для файловых систем AIX, JFS, XFS, Ext3 и NFS из-за определенных особенностей и способа их работы.
#utils #security
Что такое ГОСТ?
Это государственный стандарт. Криптографические алгоритмы, разработанные в СССР и используемые для защиты информации. Они включают в себя алгоритмы шифрования, хеширования, электронной подписи и другие методы защиты данных. ГОСТ алгоритмы были широко использованы в России и других странах бывшего Советского Союза, и многие из них все еще остаются популярными в сфере информационной безопасности.
Если касаться криптографии, то военные не любят пользоваться импортными методиками, для них лучше ГОСТ шифрование, сертифицированное (криптопро и подобное).
Некоторые из наиболее известных ГОСТ алгоритмов, которые могут быть использованы с помощью OpenSSL, включают в себя:
Если нет ГОСТ шифров, необходимо собрать openssl с поддержкой данных шифров.
#utils #security
Это государственный стандарт. Криптографические алгоритмы, разработанные в СССР и используемые для защиты информации. Они включают в себя алгоритмы шифрования, хеширования, электронной подписи и другие методы защиты данных. ГОСТ алгоритмы были широко использованы в России и других странах бывшего Советского Союза, и многие из них все еще остаются популярными в сфере информационной безопасности.
Если касаться криптографии, то военные не любят пользоваться импортными методиками, для них лучше ГОСТ шифрование, сертифицированное (криптопро и подобное).
Некоторые из наиболее известных ГОСТ алгоритмов, которые могут быть использованы с помощью OpenSSL, включают в себя:
* ГОСТ 28147-89 (Magma)
* ГОСТ Р 34.10-2012 (GOST R 34.10-2012)
* ГОСТ Р 34.11-2012 (GOST R 34.11-2012)
$ openssl ciphers -v | grep GOST
Если нет ГОСТ шифров, необходимо собрать openssl с поддержкой данных шифров.
#utils #security
Немного про man, как осуществлять поиск по ключевым словам, как пользоваться
1. Главные пользовательские команды
2. Системные вызовы
3. Библиотека функции С
4. Устройства и сетевые интерфейсы
5. Формат файла
6. Игры
7. Смешанные файлы
8. Стандартные операции ядра Linux
Для создания man используется определенный синтаксис, язык. Маны хранятся обычно в сжатом виде
Поиск по ключевому слову, примеры:
Поиск. Искать во всех man, которые касаются системных вызовах по ключевому слову change.
Если мануалов мало, можно осуществить обновление базы данных, подтянуть новое:
#utils
1. Главные пользовательские команды
2. Системные вызовы
3. Библиотека функции С
4. Устройства и сетевые интерфейсы
5. Формат файла
6. Игры
7. Смешанные файлы
8. Стандартные операции ядра Linux
Для создания man используется определенный синтаксис, язык. Маны хранятся обычно в сжатом виде
.gz по пути /usr/share/man/*
Для того чтобы узнать какой man предоставляет утилита:$ whatis stdout
Поиск по ключевому слову, примеры:
$ man -k unistd
$ man -K PRIx32
$ man -wK PRIx32
$ man -k '[a-z]' | grep '(3)'
$ man -f open
$ man 0 stdio.h
$ man 3 stdio
Поиск. Искать во всех man, которые касаются системных вызовах по ключевому слову change.
$ man -k [a-z] | grep '(2)' | grep 'change'
Если мануалов мало, можно осуществить обновление базы данных, подтянуть новое:
$ mandb
#utils
Существует масса пакетов, которые тянут за собой зависимости, они называются Recommends. Например, в пакете
#debian #utils
neofetch есть рекомендации без которых пакет и так отлично работает. Не хотелось бы засорять систему. Как сделать так, чтобы не ставились рекомендованные пакеты?$ apt-get install neofetch --no-install-recommends
#debian #utils
eatmydata
В мейнтейнерской среде часто используется инструмент eatmydata для ускорения установки пакетов и выполнения операций. Этот инструмент позволяет временно отключить синхронизацию данных на диске, что может значительно ускорить выполнение операций ввода-вывода. eatmydata обходит использование системных вызовов, связанных с синхронизацией данных на диске, таких как fsync(), fdatasync() и msync(). Он также может обходить вызовы, связанные с блокировками файлов, такие как flock().
Однако, следует помнить, что использование eatmydata может повлечь за собой потерю данных в случае аварийного отключения компьютера или других проблем. Поэтому его использование следует рассматривать с осторожностью и только в тех случаях, когда ускорение работы действительно необходимо.
#debian #utils
В мейнтейнерской среде часто используется инструмент eatmydata для ускорения установки пакетов и выполнения операций. Этот инструмент позволяет временно отключить синхронизацию данных на диске, что может значительно ускорить выполнение операций ввода-вывода. eatmydata обходит использование системных вызовов, связанных с синхронизацией данных на диске, таких как fsync(), fdatasync() и msync(). Он также может обходить вызовы, связанные с блокировками файлов, такие как flock().
Однако, следует помнить, что использование eatmydata может повлечь за собой потерю данных в случае аварийного отключения компьютера или других проблем. Поэтому его использование следует рассматривать с осторожностью и только в тех случаях, когда ускорение работы действительно необходимо.
$ apt-get install eatmydata
$ eatmydata apt-get install <a lot of packages>
#debian #utils
exec и tee
С помощью exec можно делать замену дескрипторов/процессов.
tee читает из своего stdin и пишет в stdout например, сценарий
Затем выполнить:
Разбор. Здесь два процесса, первый наш исполняемый
Часто с tee командами возникает (freeze shell) tee останавливает появления приглашения PS1, который ожидает EOF в своем stdin, в качестве обходного пути можно сделать
Перенаправить stdout и stderr в
Перенаправить stdout в
Перенаправить stderr в
Для заметки:
Другой пример, сценарий
Трюки без exec, а с tee:
#shell #utils
С помощью exec можно делать замену дескрипторов/процессов.
tee читает из своего stdin и пишет в stdout например, сценарий
script.sh:#!/bin/bash
exec 2> >(tee file.log)
sleep .1
>&1 echo "hello 1"
>&2 echo "hello 2"
Затем выполнить:
$ ./script.sh
Разбор. Здесь два процесса, первый наш исполняемый
script.sh, а второй это tee. У первого процесса stderr (2 файловый дескриптор) смотрит в pipe, у второго процесса stdin (1 файловый дескриптор) смотрит тоже в этот pipe, то есть весь stderr сценария будет перенаправляться в tee, который будет записывать это в файл file.log.Часто с tee командами возникает (freeze shell) tee останавливает появления приглашения PS1, который ожидает EOF в своем stdin, в качестве обходного пути можно сделать
sleep .1 как в примере выше.Перенаправить stdout и stderr в
file.txt:exec &> >(tee file.txt)
Перенаправить stdout в
file.txt:exec 1> >(tee file.txt)
Перенаправить stderr в
file.txt:exec 2> >(tee file.txt)
Для заметки:
&> и >& одинаковы
2>&1 перенаправляет stderr в stdout
>/dev/null перенаправляет только stdout
Другой пример, сценарий
main.sh:#!/bin/bash
>&1 echo "hello 1"
>&2 echo "hello 2"
Трюки без exec, а с tee:
$ ./main.sh 2>&1 | tee logs/file.log
$ ./main.sh 2> >(tee logs/stderr.log)
#shell #utils
Как перевести скрипт в бинарный формат (ELF)?
Создадим сценарий:
Установка:
Перевести скрипт в ELF файл:
hello
Удостовериться, что наш сценарий-программа действительно ELF:
#utils #security
Создадим сценарий:
$ echo -e '#!/bin/sh\necho hello\nexit 0' > hello.sh
Установка:
$ apt-get install -y shc
Перевести скрипт в ELF файл:
$ shc -f hello.sh
$ ./hello.sh.x
hello
Удостовериться, что наш сценарий-программа действительно ELF:
$ file hello.sh.x
hello.sh.x: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0d5954d51e07ffc91fce25485256ef210af3dbcc, for GNU/Linux 3.2.0, strippedhello.sh.x аналогичен a.out файлу, получился ELF. shc отличный инструмент, чтобы скрыть скрипт в бинарном файле.#utils #security