os:lpic-1:102
Различия
Показаны различия между двумя версиями страницы.
os:lpic-1:102 [23.09.2022 17:02] – [107.2 Automate system administration tasks by scheduling jobs] viacheslav | os:lpic-1:102 [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== LPIC-1 Exam 102 ====== | ||
+ | Exam Objectives Version: Version 4.0 | ||
+ | |||
+ | Exam Codes: 102-400 | ||
+ | |||
+ | About Objective Weights: Each objective is assigned a weighting value. The weights indicate the relative importance of each objective on the exam. Objectives with higher weights will be covered in the exam with more questions. | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | <WRAP round tip 80%> | ||
+ | Эта страница является кратким конспектом лекций Кирилла Семаева [[https:// | ||
+ | </ | ||
+ | ====== Topic 105: Shells, Scripting and Data Management ====== | ||
+ | ===== 105.1 Customize and use the shell environment ===== | ||
+ | <WRAP round box 75%> | ||
+ | Weight: 4 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Set environment variables (e.g. PATH) at login or when spawning a new shell | ||
+ | * Write Bash functions for frequently used sequences of commands | ||
+ | * Maintain skeleton directories for new user accounts | ||
+ | * Set command search path with the proper directory | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | The following is a partial list of the used files, terms and utilities: | ||
+ | |||
+ | * source | ||
+ | * / | ||
+ | * / | ||
+ | * env | ||
+ | * export | ||
+ | * set | ||
+ | * unset | ||
+ | * ~/ | ||
+ | * ~/ | ||
+ | * ~/.profile | ||
+ | * ~/.bashrc | ||
+ | * ~/ | ||
+ | * function | ||
+ | * alias | ||
+ | * lists | ||
+ | </ | ||
+ | * ''/ | ||
+ | * ''/ | ||
+ | * ''/ | ||
+ | * По порядку: | ||
+ | |||
+ | ''/ | ||
+ | |||
+ | https:// | ||
+ | |||
+ | <code bash> | ||
+ | # Псевдонимы - аналоги команд с разными ключами | ||
+ | alias ls='ls --color=auto' | ||
+ | # Функция - код, вызываемый короткой комадой | ||
+ | function whattime() { | ||
+ | echo " | ||
+ | } | ||
+ | </ | ||
+ | Изменения файла '' | ||
+ | |||
+ | https:// | ||
+ | |||
+ | Добавление аргументов к функции (про позиционные параметры $1, $2 и т. д. $0 - имя функции)\\ | ||
+ | https:// | ||
+ | |||
+ | <code bash> | ||
+ | # вывести все переменные и функции | ||
+ | set | ||
+ | # вывести переменные среды | ||
+ | env | ||
+ | # Обычные переменные существуют только в рамках текущей сессии | ||
+ | weather=" | ||
+ | # Сделать из обычной переменной переменную среды (действует в текущей и в дочерних сессиях) | ||
+ | export weather | ||
+ | # Убрать переменную | ||
+ | unset weather | ||
+ | # Чтобы переменная работала постоянно, | ||
+ | |||
+ | # PATH - места, где система ищет исполняемые файлы, чтобы не указывать полного имени при запуске. | ||
+ | # Добавить папку: | ||
+ | PATH=$PATH:/ | ||
+ | </ | ||
+ | https:// | ||
+ | ===== 105.2 Customize or write simple scripts ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 4 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Use standard sh syntax (loops, tests) | ||
+ | * Use command substitution | ||
+ | * Test return values for success or failure or other information provided by a command | ||
+ | * Perform conditional mailing to the superuser | ||
+ | * Correctly select the script interpreter through the shebang (#!) line | ||
+ | * Manage the location, ownership, execution and suid-rights of scripts | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * for | ||
+ | * while | ||
+ | * test | ||
+ | * if | ||
+ | * read | ||
+ | * seq | ||
+ | * exec | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | <code bash> | ||
+ | test 5 -gt 2 | ||
+ | [ 5 -gt 2 ] # как вариант | ||
+ | echo $? | ||
+ | 1 # нет, 5 не больше 2 | ||
+ | |||
+ | [ " | ||
+ | test -x file.txt # есть ли права на выполнение | ||
+ | [ -e /home/user ] # существует ли домашний каталог user | ||
+ | </ | ||
+ | |||
+ | Подстановка команд работает по принципу функций, | ||
+ | <code bash> | ||
+ | X = $(ls -a) | ||
+ | # или | ||
+ | X = `ls -a` | ||
+ | </ | ||
+ | |||
+ | Условия и циклы | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | echo "How are you?" | ||
+ | read VALUE | ||
+ | if [ $VALUE = " | ||
+ | then | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | fi | ||
+ | |||
+ | # Цикл FOR | ||
+ | for x in 1 3 7 | ||
+ | # for x in `seq 3 8` | ||
+ | do | ||
+ | echo $x | ||
+ | done | ||
+ | |||
+ | # Цикл WHILE | ||
+ | x=1 | ||
+ | while [ $x -le 5 ] | ||
+ | do | ||
+ | echo $x | ||
+ | x=$(($x+1)) | ||
+ | done | ||
+ | |||
+ | echo "Type everything or type STOP to stop" | ||
+ | x=" | ||
+ | while [ $x != " | ||
+ | do | ||
+ | read x | ||
+ | echo $x | ||
+ | done | ||
+ | |||
+ | </ | ||
+ | ===== 105.3 SQL data management ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 2 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Use of basic SQL commands | ||
+ | * Perform basic data manipulation | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * insert | ||
+ | * update | ||
+ | * select | ||
+ | * delete | ||
+ | * from | ||
+ | * where | ||
+ | * group by | ||
+ | * order by | ||
+ | * join | ||
+ | </ | ||
+ | |||
+ | <code sql> | ||
+ | -- Создать БД | ||
+ | CREATE DATABASE cars; | ||
+ | -- Переключиться на эту базу | ||
+ | USE cars; | ||
+ | -- Создать таблицы new и used со столбцами с соотв. типами данных | ||
+ | CREATE TABLE new (brand VARCHAR(10), | ||
+ | CREATE TABLE used (brand VARCHAR(10), | ||
+ | -- Показать имеющиеся таблицы в БД | ||
+ | SHOW TABLES; | ||
+ | -- Свойства таблицы new | ||
+ | DESCRIBE new; | ||
+ | |||
+ | -- Импорт из файла | ||
+ | -- Файл (разделитель TAB): | ||
+ | Ford Focus 2011 500000 | ||
+ | Lada Granta | ||
+ | Hyundai Getz | ||
+ | -- Включить возможность импорта с локальной машины от рута | ||
+ | mysql --local-infile=1 -u root | ||
+ | -- Выбрать базу | ||
+ | USE cars; | ||
+ | -- Импорт | ||
+ | LOAD DATA LOCAL INFILE " | ||
+ | -- Посмотреть данные таблицы | ||
+ | SELECT * FROM new; | ||
+ | -- Вставить строку в таблицу (здесь без цены, вместо неё будет NULL) | ||
+ | INSERT INTO new (brand, model, year) VALUES (' | ||
+ | -- Выбор | ||
+ | SELECT model FROM new; | ||
+ | SELECT * FROM new WHERE brand=" | ||
+ | -- Удалить строки, | ||
+ | DELETE FROM new WHERE model=' | ||
+ | -- Редактировать: | ||
+ | UPDATE new SET model=' | ||
+ | -- Объединение: | ||
+ | SELECT * FROM new JOIN used ON new.brand = used.brand | ||
+ | -- Сортировка по цене | ||
+ | SELECT * FROM new ORDER BY price; | ||
+ | -- Группировка | ||
+ | SELECT * FROM new GROUP BY brand; | ||
+ | </ | ||
+ | ====== Topic 106: User Interfaces and Desktops ====== | ||
+ | ===== 106.1 Install and configure X11 ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 2 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Verify that the video card and monitor are supported by an X server | ||
+ | * Awareness of the X font server | ||
+ | * Basic understanding and knowledge of the X Window configuration file | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * / | ||
+ | * xhost | ||
+ | * DISPLAY | ||
+ | * xwininfo | ||
+ | * xdpyinfo | ||
+ | * X | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | X Window System - стандартная графическая подсистема для отрисовки и перемещения окон и взаимодействия с устройствами ввода, база для графических сред (KDE, Gnome и прочие). X11 позволяет подключаться к себе, т. е., выводить изображение на удалённый монитор, | ||
+ | |||
+ | <code bash> | ||
+ | sudo apt install xorg # установить X11 (в Ubuntu) | ||
+ | sudo X -configure # создать конфигурационный файл | ||
+ | cat / | ||
+ | startx # запустить X11 | ||
+ | exit # выйти | ||
+ | less xorg.conf.new # см. конфиг | ||
+ | # Section " | ||
+ | # Section " | ||
+ | # т. е., вместо пути были IP-адреса этого сервера | ||
+ | </ | ||
+ | Конфигурационный файл X11 лежит стандартно в ''/ | ||
+ | <code bash> | ||
+ | xwininfo # вывод информации об окне | ||
+ | xdpyinfo # вывод информации об X-сервере в целом | ||
+ | </ | ||
+ | |||
+ | Приложение " | ||
+ | |||
+ | <code bash> | ||
+ | # В GUI переменная монитора показывает, | ||
+ | echo $DISPLAY | ||
+ | :0 | ||
+ | # Если перейти в реальную консоль и запустить там startx и терминал (Ctrl+Alt+t), | ||
+ | echo $DISPLAY | ||
+ | :1.0 | ||
+ | # Если в этой консоли поменять значение $DISPLAY на 0, то запускаемые программы будут отображаться на нулевом дисплее | ||
+ | export DISPLAY=: | ||
+ | firefox # отобразится на нулевом дисплее. | ||
+ | # Если закрыть X11, то firefox на нулевом дисплее тоже схлопнется. | ||
+ | |||
+ | xhost +192.168.1.99 # разрешить удалённым приложениям использовать этот монитор | ||
+ | DISPLAY=192.168.1.88: | ||
+ | |||
+ | </ | ||
+ | ===== 106.2 Setup a display manager ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 1 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Basic configuration of LightDM | ||
+ | * Turn the display manager on or off | ||
+ | * Change the display manager greeting | ||
+ | * Awareness of XDM, KDM and GDM | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * lightdm | ||
+ | * / | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | Display manager - это окно входа в систему (не оболочка). | ||
+ | <code bash> | ||
+ | # Установить | ||
+ | apt install gdm # kdm xdm | ||
+ | # Настройки хранятся в | ||
+ | cat / | ||
+ | / | ||
+ | # Можно отредактировать файл default-display-manager непосредственно, | ||
+ | dpkg-reconfigure kdm # можно написать любой установленный, | ||
+ | |||
+ | # Отключить, | ||
+ | vi / | ||
+ | vi / | ||
+ | # с xdm по-другому | ||
+ | sudo update-rc.d -f xdm remove | ||
+ | </ | ||
+ | ===== 106.3 Accessibility ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 1 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Basic knowledge of keyboard accessibility settings (AccessX) | ||
+ | * Basic knowledge of visual settings and themes | ||
+ | * Basic knowledge of assistive technology (ATs) | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * Sticky/ | ||
+ | * Slow/ | ||
+ | * Mouse Keys | ||
+ | * High Contrast/ | ||
+ | * Screen Reader | ||
+ | * Braille Display | ||
+ | * Screen Magnifier | ||
+ | * On-Screen Keyboard | ||
+ | * Gestures (used at login, for example GDM) | ||
+ | * Orca | ||
+ | * GOK | ||
+ | * emacspeak | ||
+ | </ | ||
+ | |||
+ | ====== Topic 107: Administrative Tasks ====== | ||
+ | ===== 107.1 Manage user and group accounts and related system files ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 5 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Add, modify and remove users and groups | ||
+ | * Manage user/group info in password/ | ||
+ | * Create and manage special purpose and limited accounts | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * /etc/passwd | ||
+ | * /etc/shadow | ||
+ | * /etc/group | ||
+ | * /etc/skel/ | ||
+ | * chage | ||
+ | * getent | ||
+ | * groupadd | ||
+ | * groupdel | ||
+ | * groupmod | ||
+ | * passwd | ||
+ | * useradd | ||
+ | * userdel | ||
+ | * usermod | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | Стандартные файлы: | ||
+ | * ''/ | ||
+ | * ''/ | ||
+ | |||
+ | Пароль группы - редко используемая возможность, | ||
+ | |||
+ | Стандартные файлы плохи тем, что к ним имеют доступ все, и пароли, | ||
+ | * ''/ | ||
+ | * ''/ | ||
+ | |||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | <code bash> | ||
+ | chage -l username # посмотреть свойства учётки username | ||
+ | chage -E 2020-08-05 username # учётка истекает 5 авг 2020 | ||
+ | chage -E -1 username # снять ограничение срока действия учётки | ||
+ | |||
+ | getent passwd username # вывод строки с username из /etc/passwd | ||
+ | </ | ||
+ | ===== 107.2 Automate system administration tasks by scheduling jobs ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 4 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Manage cron and at jobs | ||
+ | * Configure user access to cron and at services | ||
+ | * Configure anacron | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * crontab | ||
+ | * at | ||
+ | * atq | ||
+ | * atrm | ||
+ | * anacron | ||
+ | * / | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | <code bash> | ||
+ | # Пользовательский cron | ||
+ | crontab -e | ||
+ | # вывести | ||
+ | crontab -l | ||
+ | # Пользовательский крон хранится как файл / | ||
+ | </ | ||
+ | ''/ | ||
+ | ''/ | ||
+ | Если пользователь есть в обоих списках, | ||
+ | |||
+ | ==== anacron ==== | ||
+ | ''/ | ||
+ | <code bash> | ||
+ | # интервал (дни), задержка запуска (мин), имя, команда | ||
+ | 1 | ||
+ | @monthly 15 | ||
+ | </ | ||
+ | Самый мелкий интервал - 1 день. '' | ||
+ | |||
+ | В каталогах ''/ | ||
+ | ==== at ==== | ||
+ | Планировщик разовых задач. Стандартно в комплект не входит, | ||
+ | <code bash> | ||
+ | at 15:00 # в 15 ч | ||
+ | at now +20 minute # через 20 мин | ||
+ | at 21:30 03/15/2020 # в 21:30 15 марта 2020 | ||
+ | at 21:30 tomorrow # в 21:30 завтра | ||
+ | # после нажатия на Enter нужно ввести путь к файлу | ||
+ | |||
+ | atq # вывести список существующих задач | ||
+ | |||
+ | atrm 1 # удалить задачу №1 | ||
+ | </ | ||
+ | У at также есть возможность создать файлы ''/ | ||
+ | |||
+ | ===== 107.3 Localisation and internationalisation ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 3 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Configure locale settings and environment variables | ||
+ | * Configure timezone settings and environment variables | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * LC_* | ||
+ | * LC_ALL | ||
+ | * LANG | ||
+ | * TZ | ||
+ | * / | ||
+ | * tzselect | ||
+ | * timedatectl | ||
+ | * date | ||
+ | * iconv | ||
+ | * UTF-8 | ||
+ | * ISO-8859 | ||
+ | * ASCII | ||
+ | * Unicode | ||
+ | </ | ||
+ | </ | ||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | |||
+ | Некоторые кодировки: | ||
+ | ASCII - 128 основных символов\\ | ||
+ | ISO-8859 - большинство латинских символов\\ | ||
+ | Windows-1251 - кириллические символы\\ | ||
+ | UTF-8 - юникод | ||
+ | |||
+ | iconv - конвертер кодировок | ||
+ | |||
+ | <code bash> | ||
+ | iconv --list # вывод всех поддерживаемых кодировок | ||
+ | iconv -f UTF-8 -t ASCII /etc/fstab | ||
+ | </ | ||
+ | |||
+ | ==== Дата, часовой пояс ==== | ||
+ | <code bash> | ||
+ | # установить время 21 мая 1995 г, 19:45 | ||
+ | sudo date 052119451995 | ||
+ | # выбор часового пояса | ||
+ | tzselect | ||
+ | # посмотреть текущий часовой пояс | ||
+ | cat / | ||
+ | # список зон | ||
+ | ls / | ||
+ | # Если сделать символическую ссылку из / | ||
+ | # то это также установит соответственный часовой пояс | ||
+ | sudo ln -sf / | ||
+ | # декодировать файл зоны для просмотра в человеческом виде | ||
+ | zdump / | ||
+ | # ещё один способ (Ubuntu) | ||
+ | sudo dpkg-reconfigure tzdata | ||
+ | </ | ||
+ | |||
+ | ====== Topic 108: Essential System Services ====== | ||
+ | ===== 108.1 Maintain system time ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 3 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Set the system date and time | ||
+ | * Set the hardware clock to the correct time in UTC | ||
+ | * Configure the correct timezone | ||
+ | * Basic NTP configuration | ||
+ | * Knowledge of using the pool.ntp.org service | ||
+ | * Awareness of the ntpq command | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * date | ||
+ | * hwclock | ||
+ | * ntpd | ||
+ | * ntpdate | ||
+ | * pool.ntp.org | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | // | ||
+ | Команда '' | ||
+ | |||
+ | После двукратного " | ||
+ | <code bash> | ||
+ | # Задать аппаратное время | ||
+ | sudo hwclock --set --date=" | ||
+ | # Синхронизировать аппаратные часы с системными | ||
+ | sudo hwclock -w | ||
+ | # Использовать локальное время вместо UTC (в / | ||
+ | sudo hwclock --localtime -w | ||
+ | # Вернуть UTC | ||
+ | sudo hwclock -u -w | ||
+ | </ | ||
+ | |||
+ | ==== NTP ==== | ||
+ | https:// | ||
+ | https:// | ||
+ | <code bash> | ||
+ | # Синхронизировать часы с пулом | ||
+ | sudo ntpdate 2.ru.pool.ntp.org | ||
+ | # Раньше нужно было создавать задачу в кроне для синхронизации часов командой ntpdate, | ||
+ | # сейчас можно использовать демон ntpd (он может быть и сервером точного времени). | ||
+ | sudo apt install ntp | ||
+ | vi / | ||
+ | sudo systemctl restart ntp | ||
+ | ntpq -pn # статистика | ||
+ | </ | ||
+ | После установки ntpd команда ntpdate работать уже не будет, выдавая сообщение "the NTP socket is in use". | ||
+ | |||
+ | |||
+ | ===== 108.2 System logging ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 3 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Configuration of the syslog daemon | ||
+ | * Understanding of standard facilities, priorities and actions | ||
+ | * Configuration of logrotate | ||
+ | * Awareness of rsyslog and syslog-ng | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * syslog.conf | ||
+ | * syslogd | ||
+ | * klogd | ||
+ | * /var/log/ | ||
+ | * logger | ||
+ | * logrotate | ||
+ | * / | ||
+ | * / | ||
+ | * journalctl | ||
+ | * / | ||
+ | * / | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | Формат конфигурации syslog - " | ||
+ | <file bash / | ||
+ | # Критические события ядра | ||
+ | kern.crit / | ||
+ | # все информационные события (и более серьёзные), | ||
+ | *.info; | ||
+ | # " | ||
+ | # Часть журналов может потеряться при внезапном отказе системы, | ||
+ | mail.* -/ | ||
+ | # Все пользователи получат сообщение о чрезвычайном событии | ||
+ | *.emerg * | ||
+ | # Отправлять пользовательские логи на удалённый сервер | ||
+ | user.* @192.168.1.77 | ||
+ | </ | ||
+ | После изменений нужно перезапустить/ | ||
+ | |||
+ | Чтобы сервер мог принимать логи с удалёной машины, | ||
+ | |||
+ | <code bash> | ||
+ | # Создать событие | ||
+ | logger -p user.warn " | ||
+ | </ | ||
+ | |||
+ | ==== Ротация логов ==== | ||
+ | klogd - демон записи логов ядра (в современных системах логи ядра пишутся по-другому). Перехватывает все сообщения, | ||
+ | <code bash> | ||
+ | # klogd в урезанном виде в современных системах входит в состав busybox-syslogd | ||
+ | apt install busybox-syslogd | ||
+ | # сообщения ядра выгрузить в файл | ||
+ | klogd -o -f kernel.log | ||
+ | </ | ||
+ | |||
+ | logrotate - очистка/ | ||
+ | <file bash / | ||
+ | / | ||
+ | { | ||
+ | rotate 4 # хранить 4 файла | ||
+ | weekly # ротация еженедельно | ||
+ | missingok # В случае отсутствия файла журнала перейти к обработке следующего, | ||
+ | notifempty # нет ротации, | ||
+ | compress # сжимать | ||
+ | delaycompress # сжимать не сразу, а 2-й архив (здесь - недельной давности) | ||
+ | sharedscripts # выполнять скрипт 1 раз, даже если логов несколько (например, | ||
+ | postrotate # скрипт после ротации | ||
+ | [ -x / | ||
+ | endscript # конец скрипта | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== journald ==== | ||
+ | Система журналирования systemd, используемая в большинстве современных ОС Linux.\\ | ||
+ | Хранение данных в файлах ''/ | ||
+ | |||
+ | Уровни событий: | ||
+ | 0 - EMERG\\ | ||
+ | 1 - ALERT\\ | ||
+ | 2 - CRIT\\ | ||
+ | 3 - ERR\\ | ||
+ | 4 - WARNING\\ | ||
+ | 5 - NOTICE\\ | ||
+ | 6 - INFO\\ | ||
+ | 7 - DEBUG | ||
+ | |||
+ | Файл настроек - ''/ | ||
+ | <code bash> | ||
+ | journalctl -b # показать все события с момента загрузки | ||
+ | journalctl --since 15:30 --until 15:35:15 # показать за интервал | ||
+ | journalctl --since yesterday --until now | ||
+ | journalctl -u networking.service # события службы сети | ||
+ | journalctl -k # события ядра | ||
+ | journalctl -p err -b # только ошибки с момента загрузки | ||
+ | journalctl -n 20 # последние 20 | ||
+ | journalctl -f # в реальном времени | ||
+ | journalctl --disk-usage # сколько места занимает на диске | ||
+ | journalctl --vacuum-size=5G # занимать максимально 5 ГБ | ||
+ | journalctl --vacuum-time=1years # хранить максимум 1 год | ||
+ | |||
+ | systemd-journal-remote --url https:// | ||
+ | systemd-journal-upload --url https:// | ||
+ | </ | ||
+ | |||
+ | ==== rsyslog ==== | ||
+ | Быстрый сервис обработки логов, принимающий информацию из разных источников и отдающий по разным путям назначения. По сравнению с syslog у rsyslog есть мощная фильтрация и поддержка протокола TCP. Конфигурация - ''/ | ||
+ | |||
+ | ==== syslog-ng ==== | ||
+ | Ещё одна мощная альтернатива syslog, может работать как централизованный сервер сбора логов, но также и как локальный демон. На Убунте, | ||
+ | <code bash> | ||
+ | apt install syslog-ng | ||
+ | |||
+ | # файл конфигурации | ||
+ | vi / | ||
+ | </ | ||
+ | https:// | ||
+ | https:// | ||
+ | ===== 108.3 Mail Transfer Agent (MTA) basics ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 3 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Create e-mail aliases | ||
+ | * Configure e-mail forwarding | ||
+ | * Knowledge of commonly available MTA programs (postfix, sendmail, qmail, exim) (no configuration) | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * ~/.forward | ||
+ | * sendmail emulation layer commands | ||
+ | * newaliases | ||
+ | |||
+ | * mailq | ||
+ | * postfix | ||
+ | * sendmail | ||
+ | * exim | ||
+ | * qmail | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | * sendmail - один из старейших почтовых серверов, | ||
+ | * qmail - более безопасный аналог sendmail | ||
+ | * exim - рассчитан на постоянное подключение к интернету, | ||
+ | * postfix - легковесный и простой в настройке | ||
+ | Все используют более-менее один и тот же синтаксис sendmail. | ||
+ | <code bash> | ||
+ | # mailutils - утилиты для работы с почтой | ||
+ | sudo apt install mailutils | ||
+ | |||
+ | # / | ||
+ | postmaster: root | ||
+ | # применение изменений псевдонимов | ||
+ | sudo newaliases | ||
+ | |||
+ | # написать письмо постмастеру | ||
+ | mail postmaster | ||
+ | Cc: | ||
+ | Subject: Test 1 | ||
+ | Body text | ||
+ | Body text | ||
+ | # Ctrl+d, чтобы отправить письмо | ||
+ | |||
+ | # прочесть сообщение | ||
+ | mail # затем выбрать номер | ||
+ | d # удалить сообщение | ||
+ | q # выйти | ||
+ | </ | ||
+ | |||
+ | Файл '' | ||
+ | |||
+ | sendmail emulation layer commands - если написать '' | ||
+ | |||
+ | '' | ||
+ | ===== 108.4 Manage printers and printing ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 2 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Basic CUPS configuration (for local and remote printers) | ||
+ | * Manage user print queues | ||
+ | * Troubleshoot general printing problems | ||
+ | * Add and remove jobs from configured printer queues | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * CUPS configuration files, tools and utilities | ||
+ | * /etc/cups/ | ||
+ | * lpd legacy interface (lpr, lprm, lpq) | ||
+ | </ | ||
+ | |||
+ | На десктопах CUPS предустановлен, | ||
+ | <code bash> | ||
+ | apt install cups | ||
+ | systemctl start cups | ||
+ | systemctl enabled cups | ||
+ | </ | ||
+ | Веб-интерфейс изначально настроен на адрес localhost: | ||
+ | <code bash> | ||
+ | # Разрешить удалённый вход на веб-интерфейс | ||
+ | cupsctl --remote-any | ||
+ | echo " | ||
+ | systemctl restart cups | ||
+ | # Добавить админа (здесь: | ||
+ | usermod -aG lpadmin cupsadmin | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | [[https:// | ||
+ | ====== Topic 109: Networking Fundamentals ====== | ||
+ | ===== 109.1 Fundamentals of internet protocols ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 4 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Demonstrate an understanding of network masks and CIDR notation | ||
+ | * Knowledge of the differences between private and public “dotted quad” IP addresses | ||
+ | * Knowledge about common TCP and UDP ports and services (20, 21, 22, 23, 25, 53, 80, 110, 123, 139, 143, 161, 162, 389, 443, 465, 514, 636, 993, 995) | ||
+ | * Knowledge about the differences and major features of UDP, TCP and ICMP | ||
+ | * Knowledge of the major differences between IPv4 and IPv6 | ||
+ | * Knowledge of the basic features of IPv6 | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * / | ||
+ | * IPv4, IPv6 | ||
+ | * Subnetting | ||
+ | * TCP, UDP, ICMP | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== 109.2 Basic network configuration ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 4 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Manually and automatically configure network interfaces | ||
+ | * Basic TCP/IP host configuration | ||
+ | * Setting a default route | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * / | ||
+ | * /etc/hosts | ||
+ | * / | ||
+ | * ifconfig | ||
+ | * ifup | ||
+ | * ifdown | ||
+ | * ip | ||
+ | * route | ||
+ | * ping | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | ''/ | ||
+ | ''/ | ||
+ | |||
+ | ''/ | ||
+ | <code bash> | ||
+ | # Применить изменения в resolv.conf | ||
+ | sudo resolvconf -u | ||
+ | </ | ||
+ | |||
+ | ''/ | ||
+ | |||
+ | <code bash> | ||
+ | sudo ifdown eth0 # выкл сетевуху | ||
+ | sudo ifup eth0 # вкл сетевуху | ||
+ | # поменять IP-адрес (временно, | ||
+ | sudo ifconfig eth0 192.168.0.111 | ||
+ | sudo ifconfig eth0 netmask 255.255.0.0 # изменить маску подсети | ||
+ | sudo ifconfig eth0 hw ether < | ||
+ | |||
+ | route # список маршрутов | ||
+ | sudo route del default # удалить маршрут по умолчанию | ||
+ | sudo route add default gw 192.168.1.254 # прописать маршрут по умолчанию | ||
+ | |||
+ | ip addr # показать IP-адреса | ||
+ | sudo ip link set eth0 down # выкл | ||
+ | sudo ip link set eth0 up # вкл | ||
+ | sudo ip -4 address flush eth0 # удалить адрес IPv4 | ||
+ | sudo ip address add 192.168.1.10/ | ||
+ | </ | ||
+ | ===== 109.3 Basic network troubleshooting ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 4 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Manually and automatically configure network interfaces and routing tables to include adding, starting, stopping, restarting, deleting or reconfiguring network interfaces | ||
+ | * Change, view, or configure the routing table and correct an improperly set default route manually | ||
+ | * Debug problems associated with the network configuration | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * ifconfig | ||
+ | * ip | ||
+ | * ifup | ||
+ | * ifdown | ||
+ | * route | ||
+ | * host | ||
+ | * hostname | ||
+ | * dig | ||
+ | * netstat | ||
+ | * ping | ||
+ | * ping6 | ||
+ | * traceroute | ||
+ | * traceroute6 | ||
+ | * tracepath | ||
+ | * tracepath6 | ||
+ | * netcat | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | host - запрос напрямую на DNS-сервер\\ | ||
+ | dig - запрос на DNS-сервер (более подробно)\\ | ||
+ | traceroute, tracepath - отобразить маршрут до указанного адреса\\ | ||
+ | netstat - вывод информации о сети\\ | ||
+ | netcat (алиас - nc) - установка соединений | ||
+ | <code bash> | ||
+ | netstat -tu # TCP- и UDP-порты | ||
+ | netstat -ntu # без DNS-имён | ||
+ | netstat -ntup # + PID процессов | ||
+ | netstat -s # статистика пакетов | ||
+ | netstat -r # аналог команды route | ||
+ | |||
+ | nc -v www.yandex.ru 443 # подключиться к порту 443 (как telnet) | ||
+ | nc -lvp 50000 # слушать порт 50000 | ||
+ | nc -vnz -w 1 192.168.1.10 50-500 # просканировать порты с 50 по 500 | ||
+ | </ | ||
+ | ===== 109.4 Configure client side DNS ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 2 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Query remote DNS servers | ||
+ | * Configure local name resolution and use remote DNS servers | ||
+ | * Modify the order in which name resolution is done | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * /etc/hosts | ||
+ | * / | ||
+ | * / | ||
+ | * host | ||
+ | * dig | ||
+ | * getent | ||
+ | </ | ||
+ | getent - вывод значений из текстовых баз данных ( group, gshadow, hosts, netgroup, networks, passwd и т. д.) | ||
+ | <code bash> | ||
+ | getent hosts | ||
+ | getent hosts ya.ru | ||
+ | </ | ||
+ | ====== Topic 110: Security ====== | ||
+ | ===== 110.1 Perform security administration tasks ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 3 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Audit a system to find files with the suid/sgid bit set | ||
+ | * Set or change user passwords and password aging information | ||
+ | * Being able to use nmap and netstat to discover open ports on a system | ||
+ | * Set up limits on user logins, processes and memory usage | ||
+ | * Determine which users have logged in to the system or are currently logged in | ||
+ | * Basic sudo configuration and usage | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * find | ||
+ | * passwd | ||
+ | * fuser | ||
+ | * lsof | ||
+ | * nmap | ||
+ | * chage | ||
+ | * netstat | ||
+ | * sudo | ||
+ | * / | ||
+ | * su | ||
+ | * usermod | ||
+ | * ulimit | ||
+ | * who, w, last | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | ==== Поиск файлов с повышенными правами ==== | ||
+ | <code bash> | ||
+ | # поиск файлов с рутовым SUID | ||
+ | sudo find / -user root -perm -u+s # либо -perm +4000 | ||
+ | # поиск файлов с рутовым SGID | ||
+ | sudo find / -group root -perm -g+s # либо -perm +2000 | ||
+ | # поиск файлов с SUID или SGID | ||
+ | sudo find / -perm /u+s,g+s | ||
+ | # поиск файлов с SUID и SGID | ||
+ | sudo find / -perm -u+s,g+s | ||
+ | </ | ||
+ | |||
+ | ==== Ограничения учётки ==== | ||
+ | <code bash> | ||
+ | sudo usermod -L < | ||
+ | sudo usermod -U < | ||
+ | sudo mkhomedir_helper < | ||
+ | |||
+ | sudo chage -l < | ||
+ | sudo chage < | ||
+ | # / | ||
+ | |||
+ | ulimit -a # список ограничений (макс. кол-во процессов, | ||
+ | ulimit -f 0 # установить лимит размера файла в 0 (создать файл не получится) | ||
+ | # ulimit действует только в рамках текущей сессии | ||
+ | # / | ||
+ | </ | ||
+ | |||
+ | ==== Поиск открытых портов ==== | ||
+ | <code bash> | ||
+ | netstat -tuna | ||
+ | |||
+ | # apt install nmap -y | ||
+ | nmap 192.168.1.222 | ||
+ | |||
+ | # lsof - list of open files, но умеет показывать и открытые порты, довольно подробно | ||
+ | sudo lsof -i | ||
+ | # поиск файлов, | ||
+ | sudo lsof -c dnsmasq | ||
+ | # поиск процессов, | ||
+ | sudo lsof -i:53 | ||
+ | |||
+ | # fuser - поиск процессов, | ||
+ | fuser -v . # найти процессы в текущем каталоге | ||
+ | fuser -v 53/tcp # найти процессы, | ||
+ | </ | ||
+ | |||
+ | ==== su, sudo ==== | ||
+ | <code bash> | ||
+ | # переход в учётку root, набирая ЕГО пароль | ||
+ | su | ||
+ | # Чтобы постоянно не переходить | ||
+ | su -c 'vi / | ||
+ | # выполнение с повыш. привилегиями (если есть на это право), | ||
+ | sudo vi / | ||
+ | # права работать с sudo - в / | ||
+ | sudo visudo # безопасное редактирование / | ||
+ | # Вид строк | ||
+ | root ALL=(ALL: | ||
+ | # root может с любого узла=(от имени любого пользователя: | ||
+ | |||
+ | sudo -s # переход в режим root, как su, но домашний каталог (cd ~) остаётся пользовательским | ||
+ | # после su домашний каталог меняется на /root (хотя автоматического перехода туда не происходит) | ||
+ | </ | ||
+ | https:// | ||
+ | [[https:// | ||
+ | |||
+ | ==== Статус пользователей в системе ==== | ||
+ | <code bash> | ||
+ | # кто вошёл в систему | ||
+ | w # вариант 1 | ||
+ | | ||
+ | USER | ||
+ | user | ||
+ | who # вариант 2 | ||
+ | user | ||
+ | |||
+ | who -b # время загрузки системы | ||
+ | who -qH # логины тех, кто вошёл в систему | ||
+ | who -aH # вся информация | ||
+ | |||
+ | users # кто вошёл в систему одной строкой | ||
+ | last # список входов в систему | ||
+ | last reboot # список загрузок системы | ||
+ | sudo lastb # список неудачных входов в систему | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== 110.2 Setup host security ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 3 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Awareness of shadow passwords and how they work | ||
+ | * Turn off network services not in use | ||
+ | * Understand the role of TCP wrappers | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * / | ||
+ | * /etc/passwd | ||
+ | * /etc/shadow | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | <code bash> | ||
+ | # Если создать файл / | ||
+ | # Перед этим надо 10 раз подумать, | ||
+ | sudo touch / | ||
+ | |||
+ | nmap localhost # список сетевых служб | ||
+ | # Остановить службу | ||
+ | sudo / | ||
+ | sudo service stop ssh # или | ||
+ | sudo systemctl stop ssh # вариант с systemd | ||
+ | |||
+ | # выключить службу | ||
+ | sudo systemctl disable ssh | ||
+ | # до systemd нужно было смотреть runlevel в файле / | ||
+ | chkconfig --level 5 sshd off | ||
+ | </ | ||
+ | |||
+ | ===== Обработка сетевых запросов ===== | ||
+ | Суперсервер - процесс, | ||
+ | Конф. файл - ''/ | ||
+ | < | ||
+ | service-name - имя службы | ||
+ | socket-type - тип сокета, | ||
+ | protocol - TCP, UDP И т. д. | ||
+ | {wait/ | ||
+ | user - от чьего имени работает демон | ||
+ | server-program - путь к демону | ||
+ | server-program-arguments - аргументы | ||
+ | </ | ||
+ | В каталог ''/ | ||
+ | |||
+ | ''/ | ||
+ | ''/ | ||
+ | Логика та же, что и у cron.allow/ | ||
+ | ===== 110.3 Securing data with encryption ===== | ||
+ | <WRAP round box 100%> | ||
+ | Weight: 3 | ||
+ | |||
+ | Description: | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Key Knowledge Areas: | ||
+ | |||
+ | * Perform basic OpenSSH 2 client configuration and usage | ||
+ | * Understand the role of OpenSSH 2 server host keys | ||
+ | * Perform basic GnuPG configuration, | ||
+ | * Understand SSH port tunnels (including X11 tunnels) | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | Terms and Utilities: | ||
+ | |||
+ | * ssh | ||
+ | * ssh-keygen | ||
+ | * ssh-agent | ||
+ | * ssh-add | ||
+ | * ~/ | ||
+ | * ~/ | ||
+ | * / | ||
+ | * / | ||
+ | * ~/ | ||
+ | * ssh_known_hosts | ||
+ | * gpg | ||
+ | * ~/.gnupg/ | ||
+ | </ | ||
+ | </ | ||
+ | Шифрование с открытым ключом - генерируется 2 ключа: открытый (им данные шифруются, | ||
+ | |||
+ | При подключении к какому-либо серверу по ssh первый раз выдаётся вопрос, | ||
+ | |||
+ | Этот открытый ключ будет доверенным только для текущего пользователя. Чтобы добавить открытый ключ для системы в целом, нужно скопировать ключ в файл ''/ | ||
+ | |||
+ | RSA - криптоалгоритм с открытым ключом для подписи и шифрования.\\ | ||
+ | DSA - криптоалгоритм с открытым ключом только для подписи. | ||
+ | |||
+ | <code bash> | ||
+ | # подключиться по ssh с именем user | ||
+ | ssh user@192.168.1.9 | ||
+ | # создать пару ключей | ||
+ | ssh-keygen | ||
+ | # передать открытый ключ на удалённый сервер | ||
+ | ssh-copy-id -i .ssh/ | ||
+ | # Открытый ключ копируется в файл .ssh/ | ||
+ | # Если при создании ключей была задана парольная фраза, то при подключении будет спрашивать её, а не пароль | ||
+ | # Чтобы запомнить парольную фразу, нужен ssh-agent | ||
+ | ssh-agent bash # запустить bash от агента | ||
+ | ssh-add .ssh/id_rsa # добавить закрытый ключ в агент | ||
+ | # сгенерировать ключи для машины в целом (srv_rsa и srv_rsa.pub) | ||
+ | sudo ssh-keygen -f / | ||
+ | </ | ||
+ | |||
+ | ==== Туннели SSH ==== | ||
+ | <code bash> | ||
+ | # Подключение по localport через ssh_server на any_server: | ||
+ | ssh ssh_server -NL localport: | ||
+ | ssh 192.168.1.9 -NL 12345: | ||
+ | # Теперь, | ||
+ | |||
+ | # Возможность запускать приложения на удалённом сервере, | ||
+ | # На сервере должен быть GUI | ||
+ | ssh -X 192.168.1.9 | ||
+ | nautilus # Проводник сервера покажется локально | ||
+ | |||
+ | # копирование файла по ssh | ||
+ | scp file.txt admin@192.168.1.9:/ | ||
+ | </ | ||
+ | |||
+ | ==== Шифрование файлов ==== | ||
+ | <code bash> | ||
+ | gpg --gen-key | ||
+ | # после генерации в папке .gnupg образуются 2 ключа: secring.gpg и pubring.gpg | ||
+ | gpg --list-key # вывести список ключей | ||
+ | gpg --export < | ||
+ | scp gpg.pub admin@192.168.1.9:/ | ||
+ | # на удалённом сервере | ||
+ | gpg --import gpg.pub | ||
+ | gpg --out file.enc --recipient 'Petya Mokin' --encrypt file.txt | ||
+ | # Далее перекинуть file.enc на локальный сервер с закрытым ключом | ||
+ | # на локальном сервере | ||
+ | gpg --out file.txt --decrypt file.enc | ||
+ | </ | ||
+ | |||