Введение
Я постоянно читаю кучу статей на тему настройки linux серверов как в русскоязычном интернете, так и англоязычном. В статьях обычно в равной мере встречаются команды с sudo и без. Для тех, кто не знает, что это такое и о чем идет речь, кратко поясню.
С помощью sudo можно авторизовываться на сервере под обычным пользователем и выполнять команды с правами root, просто введя его пароль. То есть вы запускаете одну конкретную команду с правами root. Например, вот так в debian или ubuntu:
# sudo apt-get update
Или так в centos:
# sudo yum update
Дальше вводите пароль root и команда начинает исполняться.
Пакетные менеджеры
Пакетные менеджеры (ПМ) в Linux отвечают за установку, обновление и удаление приложений. Принцип их работы – загрузка программных пакетов из собственных сетевых репозитариев. Данные утилиты работают только с правами суперпользователя. Для различных дистрибутивов Linux существуют свои версии ПМ.
-
apt
ПМ для Debian, Ubuntu и Mint. Чтобы установить приложение, введите:
sudo apt install имя_пакета
Чтобы удалить приложение:
sudo apt remove имя_пакета
-
dnf / yum
Два самых распространённых ПМ для операционных систем Red Hat, Fedora и CentOS. Чтобы установить приложение, введите:
sudo dnf install имя_пакета
Чтобы удалить:
sudo dnf remove имя_пакета
-
pacman
Пакетный менеджер дистрибутивов Arch и Manjaro. Чтобы установить приложение, введите:
sudo pacman -S имя_пакета
Чтобы удалить приложение:
sudo pacman -R имя_пакета
Управление сетью
-
(Internet Protocol). Утилита выводит полный список параметров для настройки работы с сетью. Среди них:
- link — сетевое устройство;
- address — IP-адрес сетевого устройства;
- monitor — мониторинг устройства;
- route — маршрутизация;
-
tunnel — туннелированные.
Каждый из выводимых объектов можно изменять при помощи дополнительных команд: add, change, del, save и т.д.
-
Команда проверяет наличие и качество интернет-подключения.
-
nethogs -i
-
traceroute
Утилита отслеживания интернет-подключения, отслеживая маршруты следования пакетов данных в сетях TCP/IP. Более совершенный инструмент для отслеживания проблем с подключением к Сети, чем упомянутая выше команда ping. Запускается только с правами суперпользователя.
Вводная информация
Для начала давайте создадим пользователей над которым будем ставить эксперименты (подробно про создание пользователей можно почитать тут – Пользователи в Linux — добавление, изменение, удаление):
useradd hc -m -G wheel passwd hc
1 2 |
useradd hc-m-Gwheel passwd hc |
Сразу поместим нашего пользователя hc в группу wheel. Традиционно, в эту группу помещаются пользователи, которые будут иметь административный доступ. Это повелось еще с тех пор, когда основным инструментом для делегирования прав была команда
. Если интересуют подробности – поищите сами.
useradd user1 -m passwd user1
1 2 |
useradd user1-m passwd user1 |
Второй пользователь нужен нам для разнообразия.
Файл конфигурации /etc/sudoers и visudo
Все настройки хранятся в файле
. Файл этот не совсем обычный, даже под рутом просто так его отредактировать не получиться, т.к. запись в файл запрещена. Для работы с этим файлом есть специальная утилита
. Смысл такого ограничения вот в чем. Любая ошибка делает
неработоспособным, стоит ошибиться или описаться и получаете кучу проблем. Вы можете совсем лишиться доступа к административным функциям и придется пользоваться recovery mode для восстановления доступа. Это если у вас есть физический доступ к серверу. А если это VPS?
Что бы такое не происходило
при запуске блокирует файл
и для редактирования открывает копию. При сохранении происходит проверка синтаксиса и если допущена ошибка – выдаст об этом предупреждение.
visudo: >>> /etc/sudoers: syntax error near line 28 <<< What now?
1 2 |
visudo>>>etcsudoerssyntax error near line28<<< What now? |
В ответ введите:
– откроет снова файл для исправления ошибки;
– не сохранять изменения;
– сохранит файл не смотря на ошибки (так лучше не делать);
ВАЖНО! В некоторых “инструкция” которые можно найти предлагают делать следующее – сначала root разрешает запись в файл
, что то типа:
chmod +w /etc/sudoers
1 | chmod+wetcsudoers |
потом просто редактируем файл и снимаем запись
. Ни когда так не делайте! Чаше всего так советуют из нежелания пользоваться редактором vi, который запускается по умолчанию через
. Если вам не нравиться
, его можно спокойно заменить на любой другой. Для этого в консоли выполните, например:
EDITOR=nano visudo
1 | EDITOR=nano visudo |
В этом случае запуститься редактор nano вместо vi.
Меняем редактор visudo
Если же хотите, назначить редактор на постоянную основу, переопределите значение EDITOR. Я обычно это делаю через пользовательский конфиг оболочки – для bash это
. Добавьте в файл следующую строку:
export EDITOR=nano
1 | export EDITOR=nano |
Зайдите в сессию заново, выполните для проверки:
# env | grep EDIT EDITOR=nano
1 2 |
root@hc~# env | grep EDIT EDITOR=nano |
Если не хотите менять системный редактор, а задать только для visudo, добавьте в sudoers след. строки:
# Сбрасываем переменных окружения окружения Defaults env_reset # Устанавливаем nano редактором по умолчанию и запрещаем использовать EDITOR/VISUAL из окружения Defaults editor=/usr/bin/nano, !env_editor
1 2 3 4 |
# Сбрасываем переменных окружения окружения Defaults env_reset # Устанавливаем nano редактором по умолчанию и запрещаем использовать EDITOR/VISUAL из окружения Defaults editor=usrbinnano,!env_editor |
Как узнать, какие sudo полномочия имеются у пользователя
Мы только что узнали, что у определённого пользователя могут быть ограниченные полномочия на выполнение команд с sudo. Как узнать, какие именно команды может выполнить пользователь или как проверить, сработали ли наши настройки в файле /etc/sudoers?
Для вывода всех разрешённых команд или для проверки определённой команды, используется опция -l. Но если не указать опцию -U с именем интересующего пользователя, то будут выведены данные для пользователя по умолчанию (root).
Пример проверки прав sudo для пользователя admin:
sudo -l -U admin
Пример вывода:
Matching Defaults entries for admin on HackWare: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin User admin may run the following commands on HackWare: (root : ALL) /home/admin/backup.sh, /usr/bin/apt
Строка «User admin may run the following commands on HackWare» означает «пользователь admin может запускать следующие команды на HackWare».
Также можно узнать, является ли та или иная команда заблокированной или разрешённой для выполнения пользователем с sudo следующим образом:
sudo -l -U ПОЛЬЗОВАТЕЛЬ КОМАНДА
Если команда запрещена, то ничего не будет выведено:
sudo -l -U admin rm
Если команда разрешена, то будет выведен полный путь до файла:
sudo -l -U admin apt /usr/bin/apt
Добавление пользователя в Sudoers
По умолчанию в большинстве дистрибутивов Linux предоставление доступа к sudo так же просто, как добавление пользователя в группу sudo, определенную в . Члены этой группы смогут запускать любую команду от имени пользователя root. Название группы может отличаться от рассылки к рассылке.
В дистрибутивах на основе RedHat, таких как CentOS и Fedora, имя группы sudo . Чтобы добавить пользователя в группу, выполните:
В Debian, Ubuntu и их производных членам группы предоставляется доступ sudo:
Учетная запись суперпользователя в Ubuntu по умолчанию отключен по соображениям безопасности и пользователям рекомендуется выполнить системную задачу администрирования с использованием Sudo. Первоначальный пользователь, созданный установщиком Ubuntu, уже является членом группы sudo, поэтому, если вы работаете в Ubuntu, есть вероятность, что пользователь, вошедший в систему, уже получил права sudo.
Если вы хотите разрешить определенному пользователю запускать только определенные программы как sudo, вместо добавления пользователя в группу sudo добавьте пользователей в файл.
Например, чтобы позволить пользователю запускать только команду sudo, введите:
и добавьте следующую строку:
В большинстве систем команда открывает файл в текстовом редакторе vim. Если у вас нет опыта работы с vim, проверьте нашу статью о том, как сохранить файл и выйти из редактора vim .
Вы также можете разрешить пользователям запускать команды sudo без ввода пароля :
Настройка
Система: Linux Ubuntu 16.04, ALT Linux.
Необходимый конфигурационный файл лежит по адресу /etc/sudoers
Первое и самое важное, чему меня научил год непрерывной работы с Linux, нужно сделать резервную копию
sudo cp /etc/sudoers /etc/sudoers_copy
Отлично, мы оберегли себя от больших проблем. Если, не дай бог, файл будет запорот и программа sudo перестанет работать, мы просто зайдем под рута через su и вернем старую настройку.
Теперь про сам файл. Открываем его.
sudo nano /etc/sudoers
Листаем в самый низ и дописываем правило.
kirill ALL = NOPASSWD: /opt/lampp/lampp start
Сначала идет имя пользователя, для которого устанавливается правило. Затем домен, в нашем случае ALL — все домены. После равно, с помощью незамысловатого слова NOPASSWD просим не спрашивать пароль для команды, которая стоит после двоеточия.
Внимание, важно! Чтобы файл с настройками работал после нашего внедрения, в конец, сразу после правила нужно добавить один символ переноса строки(одну пустую строку). Иначе при попытке использовать sudo будет выдаваться предупреждение о том, что невозможно корректно считать файл с конфигурацией
Аналогичным образом можно добавить сколько угодно команд. Не забывайте оставлять после каждой пустую строку.
Зачем нужен sudo?
Основной аргумент за использование sudo при работе в консоли, который я слышал — так безопаснее. В чем именно безопасность, лично я не понимаю. Возможно в том, что вы страхуете себя от ошибки ввода и лишний раз смотрите на исполняемую команду перед вводом пароля root. Какая еще может быть безопасность, мне не ясно.
Лично я захожу на сервера по ssh для выполнения административных действий. И только для этого. Мне всегда там нужны полные права. Я не очень понимаю, зачем мне каждый раз использовать sudo. Поэтому я всегда авторизуюсь под root и начинаю делать то, зачем подключился к консоли. Если права доступа там не разграничены через sudo, то сразу делаю:
# sudo su -
и начинаю выполнять поставленные задачи.
Могу понять, зачем нужно sudo, если linux ваша рабочая станция и вы за ней ежедневно работаете. Тогда удобно работать под обычным пользователем, а sudo использовать, чтобы повысить свои права для конкретной команды. На сервере я не вижу в этом смысла, если к нему подключаюсь только я.
Так же оправдано использование sudo при работе на сервере команды администраторов. Для каждого создается своя учетка, добавляется в sudo, настраиваются те или иные права, включается логирование команд через sudo.
В разных дистрибутивах разное отношение к sudo. Например, если в минимальной конфигурации Centos вы введете в консоли команду sudo, то увидите следующее.
# -bash: sudo: command not found
Команды sudo нет в минимальной установке, ее нужно установить:
# yum install sudo
Дополнение по centos 7. Сейчас специально поставил чистую систему, в ней sudo было. А если взять стандартный образ контейнера lxc с centos 7, то там sudo нет, хотя в контейнере ubuntu есть. Мне почему-то казалось, что в centos раньше тоже не было, но могу ошибаться.
А в debian или ubuntu у вас по-умолчанию после установки сервера разрешено подключение по ssh только для обычного пользователя. С помощью sudo можно начинать последующую настройку сервера после подключения.
Получение прав суперпользователя для выполнения нескольких команд
Иногда возникает необходимость выполнить подряд несколько команд с правами администратора. В этом случае можно временно стать суперпользователем одной из следующих команд:
После этого вы перейдёте в режим суперпользователя (с ограничениями, наложенными через настройки sudo), о чём говорит символ # в конце приглашения командной строки. Данные команды по действию похожа на su , однако: – sudo -s – не меняет домашний каталог на /root, домашним остается домашний каталог пользователя вызвавшего sudo -s, что обычно очень удобно. – sudo -i – сменит так же и домашний каталог на /root.
Для выхода обратно в режим обычного пользователя наберите exit или просто нажмите Ctrl + D .
Повышение пользовательских прав командой sudo
Существует более современный способ повышения пользовательских прав с помощью команды sudo (substitute user and do — подменить пользователя и выполнить).
Sudo является программой системного администрирования, дающей возможность выполнять команды от имени root. Если для выполнения команды su все пользователи должны были знать пароль root, что само по себе небезопасно, то sudo его не требует. В sudo нужен пароль самого пользователя.
Sudo работает следующим образом, перед командой которую необходимо выполнить, нужно добавить sudo, например:
От имени root: yum install -y wget При помощи sudo: sudo yum install -y wget
Sudo определяет пользователя сверяясь с настройками находящимися в файле /etc/sudoers, если пользователь внесен в sudoers, то команда выполняется. Если выполнить команду sudo от имени пользователя не внесенного в sudoers, то можно увидеть такую картину:
$ sudo yum install -y wget password for test: test is not in the sudoers file. This incident will be reported.
При попытке выполнить команду sudo, от имени пользователя test, выдается ответ что такого пользователя в файле sudoers не обнаружено. О событии создается запись в лог файле, также высылается электронное письмо root-пользователю с уведомлением о случившемся.
From [email protected] Sat Feb 11 20:19:12 2017 Return-Path: <[email protected]> X-Original-To: root Delivered-To: [email protected] Received: by test2.localdomain (Postfix, from userid 0) id CD2AF8051BC; Sat, 11 Feb 2017 20:19:12 +0300 (MSK) To: [email protected] From: [email protected] Auto-Submitted: auto-generated Subject: *** SECURITY information for test2 *** Message-Id: <[email protected]> Date: Sat, 11 Feb 2017 20:19:12 +0300 (MSK) test2 : Feb 11 20:19:12 : test : user NOT in sudoers ; TTY=pts/0 ; PWD=/home/test ; USER=root ; COMMAND=/bin/yum install wget
Для того чтобы пользователь мог выполнять sudo, его надо внести в файл sudoers. Сделать это можно двумя способами.
Первый способ — внесение имени пользователя непосредственно в сам файл /etc/sudoers. Для изменения файла sudoers, требуется обладать правами root.
nano /etc/sudoers Находим строку: root ALL=(ALL) ALL Добавляем под нее имя пользователя, которому будет разрешен доступ к sudo: root ALL=(ALL) ALL test ALL=(ALL) ALL Сохраняем и выходим.
После того как пользователь будет внесен в список допущенных к использованию, он может выполнять команду sudo.
Вторым способом разрешить пользователям выполнять команду sudo, является внесение пользователя в группу wheel, точно так же как в случае с командой su.
Вносим пользователя в группу wheel: usermod -a -G wheel techlist_1 Проверяем: id techlist_1 uid=1001(techlist_1) gid=1004(techlist_1) группы=1004(techlist_1),10(wheel) Перезагружаем систему: reboot
После перезагрузки системы, пользователь внесенный в группу wheel, сможет выполнять sudo.
Для того чтобы полностью сменить окружение пользователя на окружение root, используется команда sudo -i, что равносильно использованию команды su —
$ sudo -i password for test: #
Возвращение в свое пользовательское окружение, происходит при помощи команды exit.
Каждый раз при использовании sudo, требуется ввод пароля пользователя. При вводе пароля, происходит обновление временной метки, что позволяет выполнять sudo без ввода пароля на протяжении некоторого времени. По умолчанию ввод пароля не требуется на протяжении пяти минут, после чего пароль опять будет затребован. Временной промежуток можно изменить при помощи опции timeout в файле sudoers. Существует возможность отключения ввода пароля.
Отключить ввод пароля для пользователей принадлежащих к группе wheel:
Открываем для внесения изменений: nano /etc/sudoers Находим строку: # %wheel ALL=(ALL) NOPASSWD: ALL Раскомментировать строку: %wheel ALL=(ALL) NOPASSWD: ALL Сохраняем изменения и выходим.
Отключить ввод пароля для пользователей добавленных вручную:
Открываем для внесения изменений: nano /etc/sudoers Находим строку с нужным пользователем: test ALL=(ALL) ALL Изменяем ее: test ALL=(ALL) NOPASSWD: ALL Сохраняем изменения и выходим.
Sudo гибкая в настройке и позволяет настроить множество различных параметров. Грамотный администратор знающий sudo может творить настоящие чудеса с пользователями.
Для просмотра руководства по настройке sudo, выполняется команда:
Посмотреть руководство sudo: man sudoers Выйти из руководства: q Посмотреть список дополнительных опций команды: sudo -h
Как работает сеть?
Перед тем, как перейти к самим командам, давайте немного разберёмся в теории работы сети. Это нужно, чтобы вы не просто выполнили какие-то непонятные команды, а поняли всю суть того, что мы будем делать и как выполняется настройка локальной сети Ubuntu.
Компьютеры обмениваются между собой информацией с помощью пакетов. Все данные в сети интернет передаются с помощью пакетов небольшого размера. Если не углубляться в подробности, то каждый пакет содержит адрес отправителя, адрес получателя и сами данные. Эти адреса есть не что иное, как привычные нам IP-адреса. Кроме IP, у компьютера есть физический адрес, который используется для общения между компьютерами в локальной сети. Это MAC-адрес? и задается он производителем сетевой карты.
Как только компьютер подключился к сети, независимо от того проводное это соединение или беспроводное, он может общаться только с компьютерами в локальной сети и только по физическим адресам. Для того, чтобы получить доступ в Глобальную сеть, машине в ней нужно получить IP-адрес. Для этого используется протокол DHCP. Если кратко: наш компьютер спрашивает все компьютеры в локальной сети, кто здесь DHCP-сервер, DHCP ему отвечает и выдаёт IP-адрес. Таким же образом компьютер узнаёт IP маршрутизатора, через который он может получить доступ к Сети, а затем пытается найти DNS-серверы или узнать стандартные у маршрутизатора. С теорией разобрались, перейдем к практике.
Вход под суперпользователем
Чтобы войти под пользователем root можно переключиться в одну из виртуальных консолей, например, с помощью сочетания клавиш Ctrl+Alt+F1 и затем ввести логин root и пароль root пользователя.
Вы получите полноценное окружение root с возможностью выполнять все действия, но такой способ очень непрактичный, так как вы теряете все преимущества использования графического интерфейса.
Можно поступить полностью противоположным путем, ввести логин root и его пароль в графическом менеджере входа, чтобы окружение рабочего стола работало от имени root, и мы получаем все права root linux, но такой вариант крайне не рекомендованный, и очень опасный, вы можете случайно повредить всю систему. Поэтому этот способ был отключен во многих менеджерах входа.
Конфигурационный файл sudo
Программа sudo считывает конфигурацию из файла /etc/sudoers. Если в файле /etc/sudoers раскомментировать директиву
includedir /etc/sudoers.d
то дополнительно настройки будут считываться из всех файлов в директории /etc/sudoers.d.
Не рекомендуется напрямую править файл /etc/sudoers, рекомендуется использовать команду
visudo
которая откроет файл для редактирования. Кроме прочих функций, данная программа проверит синтаксис, и если в нём присутствует ошибка, то файл не будет сохранён.
При запуске visudo по умолчанию будет открыт файл /etc/sudoers. С помощью опции -f можно указать расположение файла в другом месте, например в /etc/sudoers.d.
Использование
Давайте теперь рассмотрим использование sudo на конкретных примерах.
Активируем запись log-файла для sudo
Добавляем в конфигурационный файл след. строку:
Defaults logfile=/var/log/sudo.log
1 | Defaults logfile=varlogsudo.log |
Теперь в этот файл будет писаться информация случаях некорректного использования
.
Разрешим пользователям группы wheel полный административный доступ.
Откройте конфигурационный файл и найдите строку:
# %wheel ALL=(ALL) ALL
1 | # %wheel ALL=(ALL) ALL |
уберите символ
, чтобы раскомментировать строку и сохраните файл. Если вдруг такой строки вы не нашли, то просто добавьте ее.
Для проверки зайдите на сервер пользователем hc и выполните
~% sudo -s password for hc: /home/hc#
1 2 3 |
hc@hc~%sudo-s sudopassword forhc root@hchomehc# |
Введя еще раз пароль от пользователя hc вы получите доступ к консоли с правами root.
Для сравнения залогиньтесь как user1 – получите что-то похожее:
~% sudo -s password for user1: user1 is not in the sudoers file. This incident will be reported.
1 2 3 |
user1@hc~%sudo-s sudopassword foruser1 user1 isnotinthe sudoers file.Thisincident will be reported. |
Посмотрим log-файл
, увидим информацию, что user1 пытался использовать sudo, не имея на это прав:
Jul 28 16:00:55 : user1 : user NOT in sudoers ; TTY=pts/2 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/bash
1 2 |
Jul28160055user1user NOTinsudoers;TTY=pts2;PWD=homeuser1; USER=root;COMMAND=binbash |
Убираем запрос пароля при запуске команд через sudo
Для той же группы wheel:
%wheel ALL=(ALL) NOPASSWD: ALL
1 | %wheel ALL=(ALL)NOPASSWDALL |
А ТЕПЕРЬ ВНИМАНИЕ! Ни когда не даем пользователю полного доступа, как в предыдущем примере и тем более, без ввода пароля, как описано в этом! Всегда давайте ровно столько, сколько надо!
Примеры безопасного делегирования прав
Разрешим user1 пользоваться yum (для Debian/Ubuntu заменить yum на apt-get), добавим строчку:
%user1 ALL=/usr/bin/yum
1 | %user1 ALL=usrbinyum |
Теперь user1 может выполнить:
sudo yum install ineedthisprogram
1 | sudo yum install ineedthisprogram |
и установить ту программу которая ему нужна. Если же выполнить без добавления sudo:
yum install htop Loaded plugins: fastestmirror You need to be root to perform this command.
1 2 3 |
yum install htop Loaded pluginsfastestmirror You need tobe root toperform thiscommand. |
Создадим группу yumusers и добавим туда user1:
# groupadd yumusers # usermod user1 -aG yumusers
1 2 |
# groupadd yumusers # usermod user1 -aG yumusers |
Изменим строчку в
следующим образом:
%yumusers ALL=/usr/bin/yum
1 | %yumusers ALL=usrbinyum |
Теперь все пользователи этой группы смогут пользоваться yum, а нового пользователя достаточно добавить в группу, не прописывая в конфиг.
Формат записей выделения прав
Давайте поподробнее разберем, что же значат все эти ALL. Структура строки следующая:
=()
1 | пользователь|группахост=(кемможетстать)чтоможетсделать |
Т.е. запись:
%user1 ALL=(root) /usr/bin/yum, /user/bin/mount
1 | %user1 ALL=(root)usrbinyum,userbinmount |
означает – пользователь user1, на любом хосте, может от имени root запустить yum и mount, т.е. установить программу или примонтировать раздел.
Алиасы в sudo
В реальности, вряд ли вы ограничитесь только одной командой для одного пользователя. Скорее всего вам будет нужно выдать целый список доступов. Можно конечно каждый раз перечислять все через запятую, а можно и задать алиас. Что он из себя представляет:
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
1 | Cmnd_Alias NETWORKING=sbinroute,sbinifconfig,binping,sbindhclient,usrbinnet,sbiniptables,usrbinrfcomm,usrbinwvdial,sbiniwconfig,sbinmii-tool |
и теперь вы можете написать:
%user1 ALL=(root) Cmnd_Alias
1 | %user1 ALL=(root)Cmnd_Alias |
В
уже созданы несколько алиасов на наиболее распространенные группы команд, их достаточно раскомментировать и можно использовать.
Навигация
-
Осуществляет поиск в файловой системе, файлах и папках. Для результатов поиска можно выполнять дополнительные команды.
-
Отображает на экране текущий каталог.
-
Команда полной очистки окна терминала удаляет все ранее выведенные сообщения.
-
Показывает ранее введённые пользователем команды. Перемещаться по списку введённых команд можно, нажимая на клавиатуре «Вверх» и «Вниз».
-
Быстрый поиск файлов по базе данных updatedb для шаблонов имён файлов. Эта БД работает со снимком файловой системы, что многократно ускоряет процесс поиска. Но тут есть и существенный минус. Точность поиска зависит от того, насколько актуальны данные о файловой системе в текущей версии снимка.
-
Утилиты для просмотра сжатых файлов. С помощью zcat можно найти увидеть список сжатых файлов, zless выводит их списком постранично с возможностью листать вперёд и назад, а zmore — только вперёд.
-
;
Точка с запятой — ещё один оператор для последовательного запуска нескольких команд в одной строке. Если нужно, чтобы команды выполнялись параллельно, используйте оператор так:
(команда_№1 &); (команда_№2 &); (команда_№3 &)
Устанавливаем SSH-ключи
Git установлен, профиль на GitHub создан. Осталось добавить SSH-ключ и можно приступать к работе с проектом.
Что такое SSH-ключ и зачем он нужен?
Чтобы работать со своего компьютера с GitHub, иметь доступ к проектам, хранящимся на сервисе, выполнять команды в консоли без постоянного подтверждения пароля, нужно пройти авторизацию у сервера. В этом помогают SSH-ключи.
Каждый SSH-ключ содержит пару: открытый (публичный) и закрытый (приватный) ключ. Открытый ключ отправляется на сервер, его можно не прятать от всех и не переживать, что кто-то его увидит и украдёт. Он бесполезен без своей пары — закрытого ключа. А вот закрытый ключ — секретная часть. Доступ к нему должен быть только у вас.
Вы отправляете какую-то информацию на сервер, где хранится ваш публичный ключ, сервер понимает, что вы это вы, то есть идентифицирует именно вас, и даёт вам какой-то ответ. И только вы можете расшифровать этот ответ, потому что только у вас есть подходящий закрытый ключ. Получается что-то вроде связки логин-пароль только намного безопасней. Ваш пароль кто-то может узнать или подобрать, а чтобы получить ваш приватный SSH-ключ, злоумышленнику придётся взломать ваш компьютер.
Чтобы пройти авторизацию по SSH-ключу, его надо сгенерировать или найти уже ранее созданный ключ на своём компьютере.
Сначала проверим, есть ли уже на компьютере ключ. По умолчанию SSH-ключи хранятся в каталоге , поэтому нужно проверить содержимое этого каталога.
- Открываем консоль.
-
Вводим , чтобы перейти в нужный каталог.
Переходим в нужную директорию.
-
Используем , чтобы увидеть список всех файлов в каталоге.
Открываем список файлов в директории.
Ищем пару файлов с названиями вида и . Обычно имя — , , или . Файл с расширением — ваш публичный ключ, а второй — ваш приватный, секретный ключ.
Если таких файлов или даже каталога у вас нет, вы можете их сгенерировать. Для этого делаем следующее.- Открываем консоль и вводим команду:
ssh-keygen -t rsa -b 4096 -C ""
Указываем тот адрес электронной почты, который вводили при регистрации на GitHub.
Генерируем ключ.
- Далее нужно указать расположение файла для сохранения ключа. Если вы не введёте путь до файла и просто нажмёте Enter, ключ сохранится в файле, указанном в скобках.
-
Теперь нужно установить пароль к вашему ключу и дважды ввести его. Если вы не хотите вводить пароль каждый раз, когда используете ключ, пропустите этот шаг, нажав «Enter», и ничего не вводите.
Указываем расположение ключа и вводим пароль.
- Открываем консоль и вводим команду:
-
Добавляем ключ в (сгенерированный или уже существующий). Проверяем доступность ключа командой и добавляем с помощью , где указываем верный путь до файла с ключом и его имя.
Добавляем ключ в shh-agent. Несколько важных примечаний:
- Если вы захотите переименовать ключ, могут возникнуть проблемы. Их можно решить, добавив в связь ключа с доменом.
- Если у вас Windows и вы пользуетесь программой Cmder, возможны проблемы с командой . Может появиться такое сообщение об ошибке:
«eval не является внутренней или внешней командой, исполняемой программой или пакетным файлом».В Сmder для запуска можно использовать команду .
Если проблема осталась, рекомендуем работать в Git Bash.
- Если у вас macOS Sierra версии 10.12.2 и выше, нужно изменить ваш файл, чтобы автоматически загрузить ключи в и хранить пароли.
Host * AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_rsa
Вы можете добавить свой приватный ключ в и сохранить пароль к нему с помощью команды . Если у вашего ключа другое имя, не забудьте заменить в команде на правильное название.
- Если у вас Linux, может понадобится переназначить для ~/.ssh права доступа командой
- После того как создан ключ, его нужно добавить на GitHub. Для этого копируем его содержимое с помощью одной из следующих команд:
- Если вы на Windows
- Для пользователей macOS
- На Linux используйте , чтобы установить необходимый для копирования пакет , а затем введите
Можно пойти другим путём, открыть файл прямо в папке и просто скопировать содержимое оттуда.
-
Переходим на страницу для работы с ключами в вашем профиле на GitHub.
Страница с настройками ключей в вашем профиле.
Нажимаем кнопку New SSH key (новый SSH-ключ). Вводим имя ключа (можно придумать абсолютно любое) в поле Title (название), а в Key (ключ) вставляем сам ключ из буфера обмена. Теперь нажимаем Add SSH key (добавить SSH-ключ).
Добавляем в свой профиль SSH-ключ.
Если всё сделано верно, в списке появится новый ключ.
Успешно добавленный ключ.
Теперь, наконец-то, мы можем начать работу с самим проектом.
Справочная информация / документация
-
man
(Manual). Показывает инструкцию к программам и командам Linux. Чтобы получить руководство для программы, наберите:
man имя_программы
Для инструкции по команде, введите:
man имя_команды
-
whatis имя_программы
-
Показывает полный путь к исполняемому файлу и другим файлам программы. Пример:
whereis имя_программы
Также даёт информацию о связанной с программой справочной информации.
-
Показывает к какому типу относится файл. Особенность Linux в том, что рабочие файлы могут и не иметь расширения. Поэтому у пользователя могут возникнуть проблемы с идентификацией файлов, которые снимает эта команда.
-
имя_программы --help
-
Команда показывает действительный идентификатор пользователя (UID).
-
Показывает варианты автозавершения команды. Нажатие клавиши табуляция после определённой команды или их последовательности выводит подсказку с вариантами возможного продолжения команды.
-
Ctrl + R
Это сочетание клавиш помогает запустить обратный поиск по всем параметрам, связанным с указанной командой. Достаточно лишь указать ключевое слово для поиска. Есть серьёзный минус – за раз можно увидеть только 1 результат. Выйти из режима реверсивного поиска поможет комбинация Ctrl + C.
Как сохранить ввод и вывод команд с sudo
Можно не только просматривать команды, которые выполнялись с sudo, но и сохранять ввод и вывод этих команд. Использование параметров log_input и log_output включает запуск команды sudo в псевдо tty и ведёт журнал всего ввода и вывода, отправленного на экран:
Defaults log_input, log_output
По умолчанию данные сохраняются в директорию /var/log/sudo-io и, если имеется порядковый номер сеанса, то они сохраняются в директорию seq Вы можете настроить директорию хранения, структуру папок и имена файлов параметрами iolog_dir и iolog_file. По умолчанию данные будут сохраняться в структуре папок начиная с 00/00/01 и далее:
cd /var/log/sudo-io/ ls -l cd 00/00/01 ls -l cat log