• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Статья Свой GitHub или поднимаем Git сервер на Raspberry Pi за полчаса

git.jpg


Думаю, все уже наслышаны, что Microsoft занимается покупкой GitHub. , но наиболее вероятно, что будет официальным к 2019 году. Всеобщее онлайн мнение кажется очень тревожным и это справедливо. Даже если мы будем игнорировать Microsoft, всё равно будет элемент тревоги. От того, что "новые хозяева" отнимают себе то (GitHub), что мы любим. Когда то он (Microsoft) был многообещающим, в начале "новой и лучшей эпохи". Но теперь...

Давайте не будем заострять внимание на том, что может стать с GitHub. При самом популярном Git веб-интерфейсе, GitHub не один такой. Есть ещё GitLab, конкурент GitHub с полностью открытым исходным кодом. Сообщается о рекордном числе новых хранилищ, создающихся после того, как было официальное подтверждение выкупа GitHub компанией Microsoft. Но даже на GitLab, хотя безусловно стоит проверить в эти неопределенные времена, может быть больше, чем это необходимо.

Давайте будем реалистами. Большинству программных проектов, над которым работают хакеры, не нужны даже половина функций, предложенных GitHub и GitLab. Если у вас есть просто частный проект, вы хотите сохранить изменения или вы работаете с небольшой группой совместно в обстановке хакспейсов, вам не нужно ничего, что уже не предоставляется ядром программного обеспечения Git.

Давайте рассмотрим, как быстро и легко вы можете настроить частные сервера Git для вас и ваших коллег, без необходимости беспокоиться о Microsoft (или еще ком-то), имеющего планы на ваш код.

Немного о дистанционном управлении
Первое, что нужно понять, что Git не использует строго традиционных серверный клиент. В Git у вас есть то, что известно как дистанционное управление, когда код копируется куда-то откуда-то. Большинство из нас знакомы с доступом к URL-адресу дистанционно (переходя на GitHub или ещё куда-то), но это может быть так же легко, как перейти в другой каталог в локальной системе или каталог на другом компьютере, который распределяется по сети. Это может даже быть точкой монтирования USB флэш-диска, который вы могли бы затем физически переместить на другие машины и держать их синхронизированными в модернизированной версии классического « ».

Так что, настойка Git-сервера может быть такой же простой, как доступ к каталогу на другом компьютере. Дистанционно в вашем местном Git репозитории. Хотя это безусловно будет работать. Общепринятым является использование SSH, как протокола связи между вашим локальным компьютером и удаленным репозиторием. Это даёт вам все преимущества SSH (сжатие, безопасность и т.д.), но в то же время легко в настройке и широко совместимо с различными операционными системами.

Git поверх SSH

Я буду делать это на уже предустановленной ОС Raspbian, работающей на Raspberry Pi, а какой Linux вы выбрали и даже устройство - не имеет значения. Вы можете так же легко сделать это на старом компьютере, который валяется у вас в куче хлама. Системные требования для выполнения этой задачи настолько малы, что это действительно отличное приложение для Pi.
Общая идея здесь заключается в том, что мы собираемся создать определенного пользователя для Git и сделать так, чтобы никто больше не имел какой-либо доступ к оболочке. Мы хотим, чтобы учетная запись могла использовать SSH, но мы не давать ей возможность делать что-либо в системе. Любой, кто использует Git сервер, будет при необходимости иметь доступ к этой учетной записи. Как это так происходит? Git содержит свою собственную минималистическую оболочку, называемую git-shell.

Затем мы подготовим место для наших Git репозиториев Git, создав базовый пустой репозиторий и убедившись, что он работает как ожидалось на клиентской машине. Это даст вам идею как быстро вы можете выстроить простую распределенную систему управления для себя или для небольшой группы, используя то, что включено в основной пакет Git.

Подготовка учетной записи пользователя

1.png


Думаю, что у вас уже на Raspberry Pi установлен пакет git и создан пользователь «git» с помощью команд:

Код:
sudo apt-get install git
sudo adduser git

Следующий шаг заключается в том, чтобы посмотреть, включена ли git-shell оболочка на вашей системе, и если нет (вероятно нет) - добавить её в список допустимых вариантов.

Код:
pi@whoami:/ $ cd etc
pi@whoami:/etc $ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

Код:
pi@whoami:/etc $ which git-shell /usr/bin/git-shell

Код:
pi@whoami:/etc $ echo /usr/bin/git-shell | sudo tee -a /etc/shells /usr/bin/git-shell
/usr/bin/git-shell

Код:
pi@whoami:/etc $ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/git-shell

Код:
pi@whoami:/etc $ sudo chsh git -s /usr/bin/git-shell
chsh: Warning: /usr/bin/git-shell is not executable

Строка /usr/bin/git-shell говорит о том, что на самом деле это изменения оболочки по умолчанию для пользователя. Если вы попытаетесь войти в систему как «git» сейчас, вы будете допущены с ошибкой. Пока так и должно быть.

Кроме того у нас уже есть проблема. Так как пользователь «git» больше не может войти в систему, мы не можем использовать эту учетную запись для любого из следующих шагов. Чтобы сделать проще на себя, вы должны добавить свою собственную учетную запись к группе «git». И как вы вскоре увидите, что готовый сервер так немного легче поддерживать.

Команда для добавления пользователя в существующую группу «git» будет выглядеть следующим образом:

Код:
sudo usermod -a -G git ВАШЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ
Место для базирования

Вы можете просто написать ваши репозитории в домашнем каталоге пользователя «git». Но по соображениям безопасности учетной записи, которая не может делать ничего, не имеет смысла ложить что-нибудь в своём домашнем каталоге.

Чтобы сделать всё проще на себя, следует создать каталог в глобально доступном месте, например в / , выбрать и изменить его разрешения так, чтобы группа «git» имела полный доступ. Таким образом, любая учетная запись в системе, которая находится в группе «git», будет иметь возможность добавлять новые репозитории на сервере.

Код:
pi@whoami:/ $ cd /opt

pi@whoami:/opt $ sudo mkdir git

pi@whoami:/opt $ sudo chgrp git ./git/

Код:
pi@whoami:/opt $ ls -l
total 8
drwxr-xr-x 2 root git  4096 Jun 28 17:21 git
drwxr-xr-x 7 root root 4096 Jul  5  2017 vc

Код:
pi@whoami:/opt $ sudo chmod 775 ./git/

pi@whoami:/opt $ ls -l
total 8
drwxrwxr-x 2 root git  4096 Jun 28 17:21 git
drwxr-xr-x 7 root root 4096 Jul  5  2017 vc

Если вы хотите пропустить этот шаг, имейте в виду - вы будет вынуждены использовать sudo для добавления дополнительных репозиториев на сервер. Если это одноразовые box, то это не является проблемой, но если вы хотите открыть это для нескольких других людей, полезно иметь более детальный контроль над разрешениями.

В любом случае, как только у вас есть каталог, созданный там, где вы хотите хранить ваши репозитории, пришло время для создания пустого репозитория для использования. Создание нового каталога и запуск одной командой Git в нем - это просто.

Код:
pi@whoami:/opt $ cd git

pi@whoami:/opt/git $ sudo mkdir example.git

pi@whoami:/opt/git $ cd example.git

pi@whoami:/opt/git/example.git $ cd ..

pi@whoami:/opt/git $ sudo chown -R git ./example.git/

pi@whoami:/opt/git $ cd example.git/

Код:
pi@whoami:/opt/git/example.git $ sudo git init --bare
Initialized empty Git repository in /opt/git/example.git/

pi@whoami:/opt/git/example.git $ ls
branches  config  description  HEAD  hooks  info  objects  refs

Уделите особое внимание команде sudo chown -R git ./example.git/. Вам нужно убедиться, что владелец репозитория - только что созданный пользователь «git», иначе вы получите ошибки при попытке поместить код на сервер с ваших клиентов.

Первый запуск

2.png


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

hadlogo.png


Код:
root@kali:~# mkdir example

root@kali:~# cd example

root@kali:~/example# cp ~/hadlogo.png ./
(hadlogo.png - это изображение выше, как пример)

root@kali:~/example# git init
Инициализирован пустой репозиторий Git в /root/example/.git/

root@kali:~/example# git add .

Код:
root@kali:~/example# git commit -am "Add HaD logo"
[master (корневой коммит) 08b4c99] Add HaD logo
Committer: root <root@localhost.localdomain>
Ваше имя или электронная почта настроены автоматически на основании вашего
имени пользователя и имени машины. Пожалуйста, проверьте, что они
определены правильно.
Вы можете отключить это уведомление установив их напрямую. Запустите следующую
команду и следуйте инструкциям вашего текстового редактора, для
редактирования вашего файла конфигурации:

    git config --global --edit

После этого, изменить авторство этой коммита можно будет с помощью команды:

    git commit --amend --reset-author

1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hadlogo.png

Код:
root@kali:~/example# git remote add origin git@whoami:/opt/git/example.git

Код:
root@kali:~/example# git push -u origin master
git@whoami's password:
Enumerating objects: 3, готово.
Подсчет объектов: 100% (3/3), готово.
Delta compression using up to 2 threads.
Сжатие объектов: 100% (2/2), готово.
Запись объектов: 100% (3/3), 7.22 KiB | 7.22 MiB/s, готово.
Total 3 (delta 0), reused 0 (delta 0)
To git@whoami:/opt/git/example.git
* [new branch]                  master -> master
Branch master set up to track remote branch master from origin.

Удаленное уведомленив в git подтвердит, что имя пользователя и имя хоста от нашей серверной системы. Если у вас есть настройки DNS для разрешения имен в сети, вы могли бы здесь просто использовать IP-адрес. Конечно, путь должен выглядеть знакомо, как тот, где мы создали пример хранилища ранее.

Если ошибок нет, вы сейчас в системе и всё работает. Вы можете клонировать git репозиторий с другого компьютера, изменять и копировать содержимое на ваше усмотрение. Новые репозитории должны быть добавлены вручную, прежде чем код можно было изменить. Но за пределами рабочий процесс является таким же, как тот, к которому вы привыкли.

Простой старт

Это все, что нужно для создания собственного Git-сервера. Если вы находитесь в защищенной сети и сервер предназначен только для одного человека, можно пропустить замену и создание новой оболочки пользователя. Просто сделать чистый репозиторий в вашем домашнем каталоге и использовать учетные данные обычной SSH. И наоборот, если вы хотите открыть его для группы доверенных сотрудников, следующим логическим шагом будет установки аутентификации по публичному ключу SSH, и добавление своих ключей в системе.

Но что делать, если вы хотите что-то немного ближе схожее с GitHub? Как это так происходит, что есть несколько пакетов, которые могут предоставить аналогичный опыт на резидентном сервере? Можно даже построить GitLab, который вы сможете запускать совершенно приватно, например через Tor.
Теперь, когда мы научились основам, будем обращать взор на некоторые из этих более продвинутых вариантов резидентной Git в ближайшем будущем.

Спасибо за внимание.
 

Vertigo

Lex mea est Vulgate Linux
Gold Team
15.02.2017
1 318
3 997
BIT
1
Просто дерзкая магия какая-то,с предугадыванием шагов и заботой о будущем.
@ghost ,вот если когда-нибудь всё же изобретут машину времени,я сразу скажу,кто быстрее неё))
Статья-огонь, спасибо.Как всегда, читается на одном дыхании.
 

ghost

Grey Team
12.05.2016
1 636
3 286
BIT
0
Просто дерзкая магия какая-то,с предугадыванием шагов и заботой о будущем.
@ghost ,вот если когда-нибудь всё же изобретут машину времени,я сразу скажу,кто быстрее неё))
Статья-огонь, спасибо.Как всегда, читается на одном дыхании.
Vertigo, спасибо.
Вот и можно делать gitcodeby с теми же доступами: grey, red, gold. И там хранить "вкусняшки".
Вы говорите о git.codeby.net? Мне бы тоже хотелось стать свидетелем столь значимых событий. Ведь на Codeby всё возможно...
 

Сергей Попов

Кодебай
30.12.2015
4 691
6 584
BIT
291
Вы говорите о git.codeby.net? Мне бы тоже хотелось стать свидетелем столь значимых событий. Ведь на Codeby всё возможно...
Хорошая идея. Я бы даже сказал отличная! Мы готовы финансировать создание проекта. Кто возьмется ?
 
  • Нравится
Реакции: ghost

ghost

Grey Team
12.05.2016
1 636
3 286
BIT
0
там спонсировать вроде и нечего, gitlab community бесплатна
Под финансированием подразумевались, видимо, затраты на содержание штата сотрудников. Системный администратор - для наладки сети и поддержания субдомена в актуальном состоянии. Программист - для настройки веб-части (Ведь не хочется, чтобы всё было по шаблону. Хочется уникальный и запоминающийся дизайн). Это программа минимум. Ведь не все согласны тратить своё время и работать на голом энтузиазме...
 

MLNK

Mod. Ethical Hacking
Red Team
23.01.2018
560
706
BIT
1
Э
Под финансированием подразумевались, видимо, затраты на содержание штата сотрудников. Системный администратор - для наладки сети и поддержания субдомена в актуальном состоянии. Программист - для настройки веб-части (Ведь не хочется, чтобы всё было по шаблону. Хочется уникальный и запоминающийся дизайн). Это программа минимум. Ведь не все согласны тратить своё время и работать на голом энтузиазме...
Это да.
 

Sproot

Green Team
12.08.2017
188
90
BIT
1
отличная статья, взял на заметку, как раз искал способ организовать собственный гит для небольшой группы
правда искал не в том месте, надеялся что есть подобная cms-ка
кстати а может кто то действительно знает cms для совместной работы на программами?
 

MLNK

Mod. Ethical Hacking
Red Team
23.01.2018
560
706
BIT
1
отличная статья, взял на заметку, как раз искал способ организовать собственный гит для небольшой группы
правда искал не в том месте, надеялся что есть подобная cms-ка
кстати а может кто то действительно знает cms для совместной работы на программами?
? или также модешь на серваке поднять свою гитлаб, для небольшой группы будет достаточно бесплатного решения.
 
  • Нравится
Реакции: ghost

Sproot

Green Team
12.08.2017
188
90
BIT
1
? или также модешь на серваке поднять свою гитлаб, для небольшой группы будет достаточно бесплатного решения.
ну про bitbucket я знаю
хотелось найти готовый движок чтоб поставить на сервер или даже на хостинг
 

Sproot

Green Team
12.08.2017
188
90
BIT
1
любой движок надо будет настраивать. хотя может я не правильно понимаю что ты хочешь.
да настраивать это понятно придётся
для ясности:
имею ввиду движок как например wordpress и тп, чтоб можно было установить на хостинг или сервер и совместно небольшой группой работать в нём над кодом для программ
функционал мне большой не нужен и даже не обязательно связь с компом, достаточно веб-интерфейса
даже типа гугл документы прокатило бы, но хочется своё
 

MLNK

Mod. Ethical Hacking
Red Team
23.01.2018
560
706
BIT
1
да настраивать это понятно придётся
для ясности:
имею ввиду движок как например wordpress и тп, чтоб можно было установить на хостинг или сервер и совместно небольшой группой работать в нём над кодом для программ
функционал мне большой не нужен и даже не обязательно связь с компом, достаточно веб-интерфейса
даже типа гугл документы прокатило бы, но хочется своё
Ну как по мне так гитлаб больше всего подходит.
 

Sproot

Green Team
12.08.2017
188
90
BIT
1
T
ну или что-то проще
тут честно говоря не нашёл где можно скачать и установить себе или просто не шарю (я по английски не очень)

Ну как по мне так гитлаб больше всего подходит.
а вот это помоему самое оно, благодарю, если я правильно понял то установка
 

MLNK

Mod. Ethical Hacking
Red Team
23.01.2018
560
706
BIT
1
тут честно говоря не нашёл где можно скачать и установить себе или просто не шарю (я по английски не очень)


а вот это помоему самое оно, благодарю, если я правильно понял то установка
ну да, на ютубе куча видосов по этой теме посмотри.
 
  • Нравится
Реакции: Sproot

cherubot

Green Team
08.11.2017
40
19
BIT
0
Всем добрый день, можно и я свои 5 копеек вставлю. При активной разработке, в таком репозитории, sd карточка убьется очень быстро, у меня даже флешка умерла(( и это при 5-7 активных разработчиках. К rpi3 (ну та что на картинке) лучше подключить внешний hdd. И складировать все на нем. Но это мое личное мнение. Извините за критику.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!