• Шифрование DNS Трафика с Помощью DNSCrypt
  • Изменение Временных Меток Файла (Access, Modify, Change)
  • Очистить или Удалить Историю Входов в Linux
  • Очистить Историю Команд в BASH
  • Изменение Прав Доступа к Файлам и Папка в Linux — Основы Chmod
  • Запуск Команд на Удаленном Linux Сервере через SSH
  • 7 Советов — Настройка Истории Команд в Bash

Шифрование DNS Трафика с Помощью DNSCrypt

Данное руководство описывает процесс установки и настройки DNSCrypt в Linux Mint, Ubuntu, Debian и подобных им дистрибутивах.

DNSCrypt Proxy — это утилита для безопасной связи между клиентом и DNS сервером.

Она шифрует DNS запросы по протоколу DNSCrypt и передает их вышестоящему серверу, по умолчанию OpenDNS.

Разрешение зависимостей

Установите пакеты, необходимые для компиляции DNSCrypt.

$ sudo apt-get install build-essential

Скачайте и разархивируйте последнюю версию библиотеки libsodium :

$ wget http://download.libsodium.org/libsodium/releases/libsodium-0.4.2.tar.gz -O — | tar -xz

Установите библиотеку :
$ cd libsodium-0.4.2/
$ ./configure && make
$ sudo make install
$ sudo ldconfig
$ cd ..
$ rm -rf libsodium*

Установка DNSCrypt Proxy

Скачайте и разархивируйте последнюю версию DNSCrypt Proxy :

$ wget http://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-proxy-1.3.3.tar.gz -O — | tar -xz

Установите DNSCrypt Proxy :
$ cd dnscrypt-proxy-1.3.3/
$ ./configure && make
$ sudo make install
$ cd ..
$ rm -rf dnscrypt-proxy*

Запустите DNSCrypt с помощью следующей команды:
$ sudo /usr/local/sbin/dnscrypt-proxy —daemonize —pidfile=/run/dnscrypt-proxy.pid —edns-payload-size=4096

Настройте Network Manager для работы с DNSCrypt :

  • Откройте Сетевые Подключения (Network Connections).
  • Выберите Ваше активное подключение к Интернету.
  • Нажмите «Изменить».
  • Во вкладке «Настройка IPv4», выберите метод «Automatic (DHCP) addresses only» и пропишите DNS сервер «127.0.0.1».
  • Нажмите «Сохранить».
  • Нажмите «Закрыть».

Перезапустите Network Manager :
$ sudo restart network-manager

Финальный тест

Перейдите по ссылке http://www.opendns.com/welcome для проверки вашего соединения.

Вас должен поприветствовать OpenDNS.

Запуск DNSCrypt Proxy при Загрузки Системы

Как только все заработало как надо, необходимо добавить dnscrypt-proxy в автозагрузку, чтобы он автоматически запускался каждый раз при старте системы.

Для этого откройте файл /etc/rc.local :
$ sudo vi /etc/rc.local
Вставьте следующую стоку перед строкой содержащей exit 0.
exec /usr/local/sbin/dnscrypt-proxy —daemonize —pidfile=/run/dnscrypt-proxy.pid —edns-payload-size=4096

Дополнительная информация о DNSCrypt

Изменение Временных Меток Файла (Access, Modify, Change)

Файлы в Linux имеют 3 типа временных меток: время доступа (англ. access time, сокр. atime), время модификации (англ. modification time, сокр. mtime) и время изменения (англ. change time, сокр. ctime).

Однажды может возникнуть необходимость подделать временные меткикакого-либо файла.

Время доступа (atime), как и время модификации (mtime) могут быть легко изменены с помощью команды touch, но для подделки метки времени изменения (ctime) стандартного решения не существует.

Тем не менее, в качестве обходного пути, можно установить системное время в то значение на которое вы хотите изменить ctime файла, затем использовать команду touch на этом файле и потом откатить системное время обратно.

Из приведенной ниже статьи вы узнаете, как сохраняя анонимность изменять временные метки файла.

Узнать Временные Метки Файла

Чтобы получить информацию о текущий временных метках файла воспользуетесь командой stat :

$ stat file.txt
  File: file.txt
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d	Inode: 2501536     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     admin)   Gid: ( 1000/     admin)

Access: 2015-02-19 11:43:08.503408793 +0200
Modify: 2015-02-19 11:43:08.503408793 +0200
Change: 2015-02-19 11:43:08.503408793 +0200

Разница Между Временами «Доступа», «Модификации» и «Изменения»

Временная метка Когда она обновляется?
atime Время доступа к файлу обновляется когда вы открываете файл либо когда он используется для других операций, например таких как: grep, cat, head и т.д.
mtime Время модификации файла обновляется когда вы изменяете его содержимое либо сохраняете файл.
ctime Время изменения файла обновляется когда меняются его атрибуты, такие как владелец файла, права, либо он перемещается на другую файловую систему. Также это время обновляется и при изменения времени модификации файла.

Изменение Времени «Доступа» и «Модификации» Файла

Изменить время доступа к файлу (atime) :

$ touch -a --date="1988-02-15" file.txt
$ touch -a --date="1988-02-15 01:00" file.txt
$ touch -a --date="1988-02-15 01:00:17.547775198 +0300" file.txt

Изменить время модификации файла (ctime) :

$ touch -m --date="2020-01-20" file.txt
$ touch -m --date="2020-01-20 23:05" file.txt
$ touch -m --date="2020-01-20 23:05:43.443117094 +0400" file.txt

Подделка Времени «Изменения» Файла

Как я уже говори ранее, не существует стандартного решения для подделки времени изменения файла (ctime).

Тем не менее, это можно сделать если сначала поменять системное время на то, на которое вы хотите поменять ctime, затем использовать команду touch на файле и потом откатить системное время обратно.

Изменение системного времени может привести к неожиданным последствиям. Используйте приведенные ниже команды только на свой страх и риск.

Сохраните текущую дату и время в переменную NOW :

$ NOW=$(date)

Установите поддельное системное время (необходим root) :

$ date --set "2030-08-15 21:30:11"

Используйте команду touch на файле для изменения всех временных меток на поддельные :

$ touch file.txt

Откатите время назад (необходим root) :

$ date --set "$NOW"

Для увеличения скорости выполнения модификаций и как следствие уменьшения риска возможных последствий, вы можете выполнит приведенные выше команды следующим образом :

$ NOW=$(date) && date -s "2030-08-15 21:30:11" && touch file.txt && date -s "$NOW"

Заметаем Следы 😉

Чтобы замести следы не забудьте очистить значение переменной, а также почистить логи и историю.
Очистите значение переменной NOW :

$ unset NOW

Из файла /var/log/messages удалите строки с информацией об изменении системного времени (необходим root) :

Feb 24 06:32:46 centos7 systemd: Time has been changed
Aug 15 14:30:11 centos7 systemd: Time has been changed

Очистите историю входов в Linux (необходим root) :

$ echo > /var/log/wtmp
$ echo > /var/log/btmp
$ echo > /var/log/lastlog

Очистите историю текущей сессии :

$ history -r

Очистить или Удалить Историю Входов в Linux

В Linux системах есть три стандартные команды, которые показывают информацию о последних подключавшихся пользователях : last, lastb, и lastlog.

Вывод этих команд включает : логин, время последнего подключения, IP адрес, порт и т.д.

И иногда, чтобы сохранить анонимность, возникает необходимость очистить историю последних подключений.

Команда Журнал логов Описание
last /var/log/wtmp История успешных входов/выходов
lastb /var/log/btmp История неудавшихся попыток входа
lastlog /var/log/lastlog Список последних подключавшихся пользователей

Удаление Информации о Последних Подключениях

Для удаления всей информации о последних подключавшихся пользователях необходимо очистить журналы с логами :

# echo > /var/log/wtmp
# echo > /var/log/btmp
# echo > /var/log/lastlog

Очистить Историю Команд в BASH

Полностью удалить историю Bash

Выполните следующую команду для полного удаления всей истории Bash :
$ history -cw

Опции Описание
-c Очистить файл истории
-w Внести команды текущей сессии в файл с историей

Удалить определенную строку из истории Bash

Наберите следующую команду для удаления конкретной строки (например с номером 352) из файла с историей Bash :
$ history -dw 352

Опция Описание
-d Удалить строку с указанным номером из истории

Очистить историю команд текущей сессии

Выполните для удаления истории команд только текущей сессии :
$ history -r

Опция Описание
-r Прочитать файл с текущие историей и добавить его содержимое к списку истории команд

Не сохранять команду в истории Bash

Выполнить команду не занося ее в историю Bash :
$ <пробел>команда
Поставьте пробел перед любой командой и она не будет сохранена в истории Bash.

Не сохранять все команды текущей сессии в истории Bash

Отключение HISTFILE приводит к тому, что пока Вы не выйдите из текущей сессии, любые команды которые Вы будете выполнять не будут сохраняться в файле с историей bash_history :
$ unset HISTFILE

Изменение Прав Доступа к Файлам и Папка в Linux — Основы Chmod

Команда сhmod (change mode) служит для изменения прав доступа к файлам и папкам.

Синтаксис

Команды chmod имеет следующий синтаксис :
$ chmod [options] permissions file[s]

Опции :

  • -R, —recursive; изменять файлы и директории рекурсивно
  • -f, —silent, —quiet; не выводить сообщения об ошибках

Показать текущие права на файл / директорию можно с помощью команды ls :
$ ls -l MyFile.txt
-rw-r—r— 1 john admin 0 2012-12-02 04:30 MyFile.txt
$ ls -ld MyDir
drwxr-xr-x 2 john admin 4096 2012-12-02 04:29 MyDir
или используя команду stat :
$ stat -c ‘%A %a %n’ MyFile.txt
-rw-r—r— 644 MyFile.txt
$ stat -c ‘%A %a %n’ MyDir
drwxr-xr-x 755 MyDir

Классы доступа

Классы доступа используются для того, чтобы определить какому пользователю назначаются права. Если класс доступа не указан, то по умолчанию используется класс “all”. Классы доступа представлены одной или несколькими из ниже перечисленных букв :

Класс Class Описание
u user владелец файла (папки)
g group пользователи, которые являются членами группы к которой принадлежит файл (папка)
o others пользователи, которые не являются ни владельцем файла (папки), ни входят в группу файла (папки)
a all все три перечисленных выше класса, то же самое что ugo

Операторы

Программа chmod использует оператор для того, чтобы указать каким образом будут применены права доступа к файлам или папкам. Приняты следующие операторы :

Оператор Описание
+ добавить указанные права доступа к указанному классу
убрать указанные права доступа из указанного класса
= присвоить указанные права доступа

Права доступа

Права доступа указывают какие полномочия следует предоставить или забрать у указанного класса. Существуют три основных вида прав доступа, которые соответствуют базовым полномочиям :

Права доступа Name Описание
r read права на чтение содержимого файла или директорию (просматривать файлы и поддиректории в папке)
w write права на запись в файл или директорию (создавать файлы и поддиректории в папке)
x execute права на исполнение файла в качестве программы/скрипта либо права на вход в директорию (просмотр дерева каталога)
X special execute права на вход в директорию и права на исполнение файла, в случае, если хотя бы одному классу уже назначено право на исполнение (для любого из user, group или other)

[X] сам по себе не является правом доступа, но тем не менее, может использоваться вместо x. Он на самом деле полезен только в случае использования оператора ‘+’ в сочетании с опцией -R, для того чтобы предоставить группе или остальным пользователям права доступа к дереву каталога, не давая прав на исполнение обычных файлов (например текстовых), что случится при применении команды ‘chmod -R a+rx’. Таким образом вместо нее можно использовать ‘X’, и соответственно выполнить ‘chmod -R a+rX’.

Числовые права доступа

Возможно использование прав доступа как в символьной, так и в числовой форме.

Числовая форма для прав доступа :

  • Первая цифра используется для обозначения user (пользователь)
  • Вторая цифра используется для обозначения group (группа)
  • Третья цифра используется для обозначения others (остальные)
# Права Описание
7 rwx чтение, запись, исполнение
6 rw- чтение, запись
5 r-x чтение, запись
4 r— чтение
3 -wx запись, исполнение
2 -w- запись
1 —x исполнение
0 нет прав

10 Простых Примеров :

1. Добавить всем права на чтение файла :
$ chmod a+r file
2. Забрать права на исполнение файла у всех :
$ chmod a-x file
3. Добавить всем права на чтение и запись :
$ chmod a+rw file
4. Установить права на чтение и запись для владельца и забрать права у всех остальных :
$ chmod u=rw,go= file
5. Для директории и всего ее содержимого добавить права на запись для владельца, и забрать права на запись для всех остальных :
$ chmod -R u+w,go-w directory
6. Забрать у всех все права :
$ chmod file
7. Дать всем права на права на чтение, запись и выполнение файла :
$ chmod 777 file
8. Задать права на чтение и запись без права на исполнение для владельца и группы, а все остальным дать право только на чтение :
$ chmod 664 file
9. Назначить права ‘-rwx’ для владельцев директорий, добавить права ‘rw’ для владельцев файлов, ‘—‘ для всех остальных :
$ chmod -R u+rwX,g-rwx,o-rwx directory
10. Забрать у всех права на исполнение файлов в директории и поддиректориях, но в то же время, разрешить всем просматривать содержимое директорий :
$ chmod -R a-x+X directory

Запуск Команд на Удаленном Linux Сервере через SSH

В этой заметке Вы найдете различные примеры того, как выполнять команды на удаленном Linux сервере и получать результат локально.

Данная информация будет очень полезна, если Вы пишете Bash скрипт, который будет запускаться с локальной машины и выполнять какие-либо команды на удаленном сервере.

Вы узнаете, как :

  • выполнить команду на удаленном Linux сервере;
  • запустить множество команд через SSH;
  • выполнить локальный скрипт на удаленном Linux сервере без его копирования.

Выполнение Команд на Удаленном Linux Сервере

$ ssh [user]@[server] ‘[command]’

Узнать uptime удаленного сервера

$ ssh root@192.168.1.1 ‘uptime’

Перезагрузить удаленный сервер

$ ssh root@192.168.1.1 ‘reboot’

Запуск Нескольких Команд через SSH

СПОСОБ 1 :

$ ssh [user]@[server] ‘[command 1]; [command 2]; [command 3]’

Узнать Uptime и Disk Usage

$ ssh root@192.168.1.1 ‘uptime; df -h’

СПОСОБ 2 :

$ ssh [user]@[server] ‘[command 1] | [command 2] | [command 3]’

Узнать Memory Usage и Load Average

$ ssh root@192.168.1.1 ‘free -m | cat /proc/loadavg’

СПОСОБ 3 :

$ ssh [user]@[server] << EOF
command 1
command 2
command 3
EOF

Показать Версию Ядра, информацию о CPU и кол-во RAM

$ ssh root@192.168.1.1 << EOF
uname -a
grep «model name» /proc/cpuinfo
grep MemTotal /proc/meminfo
EOF

Выполнение Локального Скрипта на Удаленном Linux Сервере

$ ssh [user]@[server] ‘bash -s’ < [local_script]

Запустить Локальный Скрипт ‘local_script.sh’ на Удаленной Машине

$ ssh root@192.168.1.1 ‘bash -s’ < local_script.sh

7 Советов — Настройка Истории Команд в Bash

Настройка истории команд в Bash осуществляется путем добавления переменных окружения в файл ~/.bashrc.

Чтобы изменеия в ~/.bashrc вступили в силу, выполните :

source ~/.bashrc

1. Добавляем Отображение Даты и Времени в Bash History

Иногда очень полезно узнать время, когда какая-либо команда была выполнена.

Установите HISTTIMEFORMAT, чтобы сохранять время выполнения каждой команды.

Для этого добавьте следующую строку в файл ~/.bashrc :

export HISTTIMEFORMAT="%h %d %H:%M:%S "

Теперь, набрав history, Вы получите следующий вывод :

113  Jun 08 16:31:06 sudo ifconfig
114  Jun 08 16:31:10 top
115  Jun 08 16:31:19 ping 8.8.8.8
116  Jun 08 16:31:22 history

2. Увеличиваем Размер Хранимой Истории

Увеличьте HISTSIZE — количество команд, которые необходимо запоминать в списке истории (стандартное значение — 500).

export HISTSIZE=10000

Увеличьте HISTFILESIZE — максимальное количество строк, содержащееся в файле истории (стандартное значение — 500).

export HISTFILESIZE=10000

3. Добавляем Команды Bash в Файл с Историей

Bash перезаписывает файл .bash_history?

Чтобы добавлять новые команды в файл с историей, а не переписывать его каждый раз, добавьте следующую строку в ~/.bashrc :

shopt -s histappend

4. Мгновенно Сохранять Историю Команд

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

Если сессия внезапно оборвется Вы потеряете текущую историю команд.

Используйте переменную $PROMPT_COMMAND, чтобы сохранять команды сразу после выполнения :

Добавьте следующую строку в файл ~/.bashrc, если переменная $PROMPT_COMMAND не была задана ранее :

PROMPT_COMMAND='history -a'

Добавьте следующую строку, если переменная $PROMPT_COMMAND уже была задана :

PROMPT_COMMAND='$PROMPT_COMMAND; history -a'

5. Контролируйте Bash History

HISTCONTROL — представляет из себя список опций, разделенных двоеточиями.

Они контролируют каким образом список команд сохраняется в истории.

Опция Описание
ignorespace не сохранять строки начинающиеся с символа <пробел>
ignoredups не сохранять строки, совпадающие с последней выполненной командой
ignoreboth использовать обе опции ‘ignorespace’ и ‘ignoredups’
erasedups удалять ВСЕ дубликаты команд с истории

Пример :

export HISTCONTROL=ignorespace:erasedups

6. Игнорировать Определенные Команды

HISTIGNORE — список шаблонов через двоеточие, используемых для принятия решения о сохранении строк с командами в списке истории.

Не сохранять команды ls, ps и history :

export HISTIGNORE="ls:ps:history"

Не сохранять команды начинающиеся с s :

export HISTIGNORE="s*"

7. Одна Команда — Одна Запись в Истории

Сохранять все строки многострочной команды в одной записи списка истории :

shopt -s cmdhist

Изменить Имя Файла с Историй Команд

Используйте HISTFILE для изменения имени файла, в котором сохраняется история команд. Стандартное значение ~/.bash_history.

export HISTFILE=~/.custom_file