Projekt open source Sandboxed API (SAPI) jest oparty na projekcie open source Google Sandbox2 i ma na celu ułatwienie tworzenia piaskownicy dla bibliotek C/C++.
Sandboxed API ma 3 główne zalety:
W przeciwieństwie do Sandbox2, w którym trzeba umieścić w piaskownicy całe programy lub zmienić kod źródłowy, aby można było umieścić w niej część programu, SAPI umożliwia umieszczanie w piaskownicy poszczególnych bibliotek C/C++. Dzięki SAPI program główny jest odizolowany od luk w zabezpieczeniach związanych z wykonywaniem kodu w bibliotece C/C++.
Nasze motto to: Sandbox raz, używaj w dowolnym miejscu. Biblioteki w piaskownicy z interfejsem Sandboxed API można łatwo ponownie wykorzystać, co eliminuje obciążenie w przypadku przyszłych projektów. Przed wprowadzeniem interfejsu Sandboxed API piaskownice dostępne do użytku w Google wymagały dodatkowych prac wdrożeniowych w przypadku każdej nowej instancji projektu, który miał być umieszczony w piaskownicy, nawet jeśli korzystał z tej samej biblioteki oprogramowania. Zasady Sandbox2 i inne ograniczenia stosowane w procesie w piaskownicy musiały być za każdym razem wdrażane od nowa, a mechanizmy wymiany danych między zaufanymi i niezaufanymi częściami kodu musiały być projektowane od zera.
Każda biblioteka SAPI korzysta ze ściśle określonych zasad bezpieczeństwa, w przeciwieństwie do typowego projektu w piaskownicy, w którym zasady bezpieczeństwa muszą obejmować wszystkie wywołania systemowe i zasoby wykorzystywane przez wszystkie używane biblioteki.
Projekt SAPI został zaprojektowany, opracowany i jest utrzymywany przez członków zespołu Google Sandbox. Korzysta też z naszej sprawdzonej w praktyce Sandbox2. Obecnie wiele projektów wewnętrznych korzysta z SAPI do izolowania zadań produkcyjnych.
Szybki start
Aby zacząć korzystać z interfejsu Sandboxed API, wykonaj te czynności:
- Zainstaluj wymagane zależności (zakładamy, że używasz systemu Debian 10 Buster):
$ echo "deb http://storage.googleapis.com/bazel-apt stable jdk1.8" |
sudo tee /etc/apt/sources.list.d/bazel.list $ wget -qO - https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install -qy build-essential linux-libc-dev bazel python3
python3-pip libclang-7-dev $ pip3 install clang - Sklonuj i uruchom kompilację:
$ git clone https://github.com/google/sandboxed-api && cd sandboxed-api $ bazel build …
- Wypróbuj jeden z tych przykładów:
$ bazel run //sandboxed_api/examples/stringop:main_stringop
Dostępna dokumentacja
Więcej informacji o interfejsie Sandboxed API znajdziesz tutaj:
Wyjaśnienie interfejsu Sandboxed API – opis interfejsu Sandboxed API (SAPI) i jego podstawowych koncepcji.
Wprowadzenie – zawiera wskazówki, które pomogą Ci utworzyć własną wersję interfejsu API w piaskownicy SAPI.
Build Rules (Reguły kompilacji) – wyjaśnia, jak używać reguły kompilacji sapi_library() do kompilowania biblioteki SAPI.
Zmienne – omówienie użycia typów SAPI, które są potrzebne podczas przekazywania wskaźników do prostych typów i bloków pamięci.
Transakcje – wyjaśnia, jak używać modułu transakcji SAPI do monitorowania wywołań funkcji.
Słowniczek
Sandbox2 | Projekt open source Google, który zapewnia warstwę piaskownicy w SAPI. |
Sandboxee | Plik binarny wykonywany w piaskownicy Sandbox2. Więcej informacji znajdziesz w dokumentacji Sandbox2. W kontekście SAPI jest to biblioteka C/C++ w piaskownicy. |
SAPI | Sandboxed API to projekt open source Google, który umożliwia tworzenie bibliotek w piaskownicy. |
Biblioteka SAPI | Biblioteka wygenerowana przez SAPI, zawierająca bibliotekę w piaskownicy, kod Sandbox2 i kod środowiska wykonawczego SAPI. |
Obiekt SAPI | Obiekt C++, który jest częścią kodu hosta i zapewnia interfejs do biblioteki w środowisku izolowanym za pomocą typów SAPI zamiast oryginalnych. |
Typy interfejsu SAPI | SAPI udostępnia specjalne typy potrzebne podczas przekazywania wskaźników do prostych typów i bloków pamięci. |
SAPI Transaction | Moduł służący do zarządzania stanem piaskownicy biblioteki w piaskownicy między uruchomieniami. |
RPC Stub | Stubs komunikacji RPC (Remote Procedure Call) opakowane w Sandbox2 i używane do przekazywania danych między obiektem SAPI a biblioteką w piaskownicy. |
Kod hosta | Kod, który korzysta z biblioteki w piaskownicy i zawiera obiekt SAPI. |
Współtworzenie interfejsu Sandboxed API
Jeśli chcesz pomóc w rozwoju projektu, przeczytaj plik CONTRIBUTING.md i prześlij nam prośby o scalenie.Możesz też zgłaszać błędy lub przesyłać prośby o dodanie funkcji.
Jeśli chcesz porozmawiać z deweloperami lub otrzymywać powiadomienia o ważnych aktualizacjach usługi, możesz dołączyć do naszej grupy Google: sandboxed-api-users.