Blockieren Sie das Hochladen von privaten Schlüsseln, Archiven, großen Dateien und nicht nur in Gitlab CE

Git-Hooks sind ein Tool, mit dem Sie Ihr Repository in Ordnung halten können. Sie können automatische Regeln für die Verarbeitung Ihrer Commits einrichten.



Sie alle kennen sich wahrscheinlich mit Pre-Commit aus - überprüfen Sie Ihren Code vor dem Commit . Es kann jedoch nicht alles vor dem Festschreiben überprüft werden. Einige Einschränkungen möchten global in Gitlab verwendet werden.



Für alle, die verwirrt sind über Pre-Commit- und Pre-Receive-Hooks, beschreibt dieser Beitrag die Unterschiede zwischen ihnen in "Was sind Git-Hooks?"



Wenn Sie über Gitlab Enterprise Edition verfügen, können Sie die im Beitrag beschriebenen Hooks über die WEB-Oberfläche konfigurieren.



Aber was ist, wenn Sie Gitlab Community (Core) Edition haben?



In diesem Artikel werden 5 Pre-Receive-Hooks beschrieben, die auf dem Gitlab Community (Core) Edition-Server ausgeführt werden:



  • block_confidentials.sh - Blockieren des Sendens von privaten Schlüsseln und AWS-Token
  • block_file_extensions.sh - Blockieren sendender Archive (Regex konfigurierbar)
  • check-large-files.sh - Blockieren des Sendens großer Dateien (Größe konfigurierbar)
  • ablehnen-not-allowlist-email.sh - Blockieren von Commits mit E-Mail nicht aus der Zulassungsliste (Die Liste der E-Mail-Domänen ist konfigurierbar)
  • require-issue.sh - Blockieren von Commits ohne ein Problem im Titel (Die Problemliste ist konfigurierbar)


Die meisten Hooks stammen aus dem Plattform-Beispiel- Repository im Pre-Receive-Hooks- Verzeichnis (gilt für GitHub Enterprise).



Sie können den gesamten Quellcode der Server-Hooks auf Github anzeigen .



Installation auf Gitlab



  • Sie müssen ein Verzeichnis erstellen /opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/
  • Kopieren Sie Hooks in dieses Verzeichnis
  • Vergessen Sie nicht, die Startrechte für Hooks festzulegen (chmod + x Hook-Datei).


Blockieren des Sendens von privaten Schlüsseln und AWS-Token



block_confidentials.sh regex_list, .



# Define list of REGEX to be searched and blocked
regex_list=(
  # block any private key file
  '(\-){5}BEGIN\s?(RSA|OPENSSH|DSA|EC|PGP)?\s?PRIVATE KEY\s?(BLOCK)?(\-){5}.*'
  # block AWS API Keys
  'AKIA[0-9A-Z]{16}'
  # block AWS Secret Access Key (TODO: adjust to not find validd Git SHA1s; false positives)
  # '([^A-Za-z0-9/+=])?([A-Za-z0-9/+=]{40})([^A-Za-z0-9/+=])?'
  # block confidential content
  'CONFIDENTIAL'
)


, git push .







block_file_extensions.sh case *.zip|*.gz|*.tgz, , .



zip , git push .







check-large-files.sh maxsize, , .



1 , git push .





email allow



reject-not-allowlist-email.sh email-, .



declare -a DOMAIN_ARRAY=("group1.com" "group2.com")


git , .



git config user.email user1@group3.com


, git push .





issue



Majilesh.



require-issue.sh commit_format, .



commit_format="(JIRA|PROJECTKEY|MULE|ECOM|SAP|XLR-[1-9]+Merge)"


, , commit_format git push .





.



Telegram- Gitlab




All Articles