mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Clean up html on the website.
- Fixes some html validation issues. - Fixes links on security basics blog post. - Adds rel=noopener to links with target=_blank and adds a check to htmlproofer. - Add favicon check to htmlproofer. Fixes #3286 Fixes #3284 PiperOrigin-RevId: 321892602
This commit is contained in:
+3
-7
@@ -117,9 +117,7 @@ for more information on filesystem bundles. `runsc` implements multiple commands
|
||||
that perform various functions such as starting, stopping, listing, and querying
|
||||
the status of containers.
|
||||
|
||||
### Sentry
|
||||
|
||||
<a name="sentry"></a> <!-- For deep linking. -->
|
||||
### Sentry {#sentry}
|
||||
|
||||
The Sentry is the largest component of gVisor. It can be thought of as a
|
||||
application kernel. The Sentry implements all the kernel functionality needed by
|
||||
@@ -136,9 +134,7 @@ calls it makes. For example, the Sentry is not able to open files directly; file
|
||||
system operations that extend beyond the sandbox (not internal `/proc` files,
|
||||
pipes, etc) are sent to the Gofer, described below.
|
||||
|
||||
### Gofer
|
||||
|
||||
<a name="gofer"></a> <!-- For deep linking. -->
|
||||
### Gofer {#gofer}
|
||||
|
||||
The Gofer is a standard host process which is started with each container and
|
||||
communicates with the Sentry via the [9P protocol][9p] over a socket or shared
|
||||
@@ -146,7 +142,7 @@ memory channel. The Sentry process is started in a restricted seccomp container
|
||||
without access to file system resources. The Gofer mediates all access to the
|
||||
these resources, providing an additional level of isolation.
|
||||
|
||||
### Application
|
||||
### Application {#application}
|
||||
|
||||
The application is a normal Linux binary provided to gVisor in an OCI runtime
|
||||
bundle. gVisor aims to provide an environment equivalent to Linux v4.4, so
|
||||
|
||||
@@ -10,4 +10,5 @@ RUN gem install \
|
||||
jekyll-relative-links:0.6.1 \
|
||||
jekyll-feed:0.13.0 \
|
||||
jekyll-sitemap:1.4.0
|
||||
COPY checks.rb /checks.rb
|
||||
CMD ["/usr/gem/gems/jekyll-4.0.0/exe/jekyll", "build", "-t", "-s", "/input", "-d", "/output"]
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
#!/usr/local/bin/ruby
|
||||
#
|
||||
# HTMLProofer checks for the gVisor website.
|
||||
#
|
||||
require 'html-proofer'
|
||||
|
||||
# NoOpenerCheck checks to make sure links with target=_blank include the
|
||||
# rel=noopener attribute.
|
||||
class NoOpenerCheck < ::HTMLProofer::Check
|
||||
def run
|
||||
@html.css('a').each do |node|
|
||||
link = create_element(node)
|
||||
line = node.line
|
||||
|
||||
rel = link.respond_to?(:rel) ? link.rel.split(' ') : []
|
||||
|
||||
if link.respond_to?(:target) && link.target == "_blank" && !rel.include?("noopener")
|
||||
return add_issue("You should set rel=noopener for links with target=_blank", line: line)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def main()
|
||||
options = {
|
||||
:check_html => true,
|
||||
:check_favicon => true,
|
||||
:disable_external => true,
|
||||
}
|
||||
|
||||
HTMLProofer.check_directories(ARGV, options).run
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
main
|
||||
end
|
||||
@@ -32,6 +32,9 @@ rbe_platform = native.platform
|
||||
rbe_toolchain = native.toolchain
|
||||
vdso_linker_option = "-fuse-ld=gold "
|
||||
|
||||
def short_path(path):
|
||||
return path
|
||||
|
||||
def proto_library(name, has_services = None, **kwargs):
|
||||
native.proto_library(
|
||||
name = name,
|
||||
|
||||
+2
-1
@@ -7,7 +7,7 @@ change for Google-internal and bazel-compatible rules.
|
||||
|
||||
load("//tools/go_stateify:defs.bzl", "go_stateify")
|
||||
load("//tools/go_marshal:defs.bzl", "go_marshal", "marshal_deps", "marshal_test_deps")
|
||||
load("//tools/bazeldefs:defs.bzl", _build_test = "build_test", _cc_binary = "cc_binary", _cc_flags_supplier = "cc_flags_supplier", _cc_grpc_library = "cc_grpc_library", _cc_library = "cc_library", _cc_proto_library = "cc_proto_library", _cc_test = "cc_test", _cc_toolchain = "cc_toolchain", _default_installer = "default_installer", _default_net_util = "default_net_util", _gazelle = "gazelle", _gbenchmark = "gbenchmark", _go_binary = "go_binary", _go_embed_data = "go_embed_data", _go_grpc_and_proto_libraries = "go_grpc_and_proto_libraries", _go_library = "go_library", _go_path = "go_path", _go_proto_library = "go_proto_library", _go_test = "go_test", _grpcpp = "grpcpp", _gtest = "gtest", _loopback = "loopback", _pkg_deb = "pkg_deb", _pkg_tar = "pkg_tar", _proto_library = "proto_library", _py_binary = "py_binary", _py_library = "py_library", _py_requirement = "py_requirement", _py_test = "py_test", _rbe_platform = "rbe_platform", _rbe_toolchain = "rbe_toolchain", _select_arch = "select_arch", _select_system = "select_system", _vdso_linker_option = "vdso_linker_option")
|
||||
load("//tools/bazeldefs:defs.bzl", _build_test = "build_test", _cc_binary = "cc_binary", _cc_flags_supplier = "cc_flags_supplier", _cc_grpc_library = "cc_grpc_library", _cc_library = "cc_library", _cc_proto_library = "cc_proto_library", _cc_test = "cc_test", _cc_toolchain = "cc_toolchain", _default_installer = "default_installer", _default_net_util = "default_net_util", _gazelle = "gazelle", _gbenchmark = "gbenchmark", _go_binary = "go_binary", _go_embed_data = "go_embed_data", _go_grpc_and_proto_libraries = "go_grpc_and_proto_libraries", _go_library = "go_library", _go_path = "go_path", _go_proto_library = "go_proto_library", _go_test = "go_test", _grpcpp = "grpcpp", _gtest = "gtest", _loopback = "loopback", _pkg_deb = "pkg_deb", _pkg_tar = "pkg_tar", _proto_library = "proto_library", _py_binary = "py_binary", _py_library = "py_library", _py_requirement = "py_requirement", _py_test = "py_test", _rbe_platform = "rbe_platform", _rbe_toolchain = "rbe_toolchain", _select_arch = "select_arch", _select_system = "select_system", _short_path = "short_path", _vdso_linker_option = "vdso_linker_option")
|
||||
load("//tools/bazeldefs:platforms.bzl", _default_platform = "default_platform", _platforms = "platforms")
|
||||
load("//tools/bazeldefs:tags.bzl", "go_suffixes")
|
||||
load("//tools/nogo:defs.bzl", "nogo_test")
|
||||
@@ -38,6 +38,7 @@ py_requirement = _py_requirement
|
||||
py_test = _py_test
|
||||
select_arch = _select_arch
|
||||
select_system = _select_system
|
||||
short_path = _short_path
|
||||
rbe_platform = _rbe_platform
|
||||
rbe_toolchain = _rbe_toolchain
|
||||
vdso_linker_option = _vdso_linker_option
|
||||
|
||||
+1
-3
@@ -55,9 +55,7 @@ genrule(
|
||||
"docker run -i --user $$(id -u):$$(id -g) " +
|
||||
"-v $$(readlink -m $$T/output/_site):/output " +
|
||||
"gvisor.dev/images/jekyll " +
|
||||
"/usr/gem/bin/htmlproofer " +
|
||||
"--disable-external " +
|
||||
"--check-html " +
|
||||
"ruby /checks.rb " +
|
||||
"/output && " +
|
||||
"cp $(location //website/cmd/server) $$T/output/server && " +
|
||||
"tar -zcf $@ -C $$T/output . && " +
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js" integrity="sha256-hYXbQJK4qdJiAeDVjjQ9G0D6A0xLnDQ4eJI9dkm7Fpk=" crossorigin="anonymous"></script>
|
||||
|
||||
{% if site.analytics %}
|
||||
<script type="application/javascript">
|
||||
<script>
|
||||
var doNotTrack = false;
|
||||
if (!doNotTrack) {
|
||||
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{::nomarkdown}
|
||||
{% assign fn = include.id | remove: " " | remove: "-" | downcase %}
|
||||
<figure><a href="{{ include.url }}"><svg id="{{ include.id }}" width=500 height=200 onload="render_{{ fn }}()"><title>{{ include.title }}</title></svg></a></figure>
|
||||
<script type="text/javascript">
|
||||
<script>
|
||||
function render_{{ fn }}() {
|
||||
d3.csv("{{ include.url }}", function(d, i, columns) {
|
||||
return d; // Transformed below.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="container">
|
||||
<div class="navbar-brand">
|
||||
<a href="/">
|
||||
<img src="/assets/logos/logo_solo_on_dark.svg" height="25px" class="d-inline-block align-top" style="margin-right: 10px;" alt="logo"/>
|
||||
<img src="/assets/logos/logo_solo_on_dark.svg" height="25" class="d-inline-block align-top" style="margin-right: 10px;" alt="logo" />
|
||||
gVisor
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -47,8 +47,8 @@ categories:
|
||||
<h1>{{ page.title }}</h1>
|
||||
{% if page.editpath %}
|
||||
<p>
|
||||
<a href="https://github.com/google/gvisor/edit/master/{{page.editpath}}" target="_blank"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
|
||||
<a href="https://github.com/google/gvisor/issues/new?title={{page.title | url_encode}}" target="_blank"><i class="fab fa-github fa-fw"></i> Create issue</a>
|
||||
<a href="https://github.com/google/gvisor/edit/master/{{page.editpath}}" target="_blank" rel="noopener"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
|
||||
<a href="https://github.com/google/gvisor/issues/new?title={{page.title | url_encode}}" target="_blank" rel="noopener"><i class="fab fa-github fa-fw"></i> Create issue</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
<div class="docs-content">
|
||||
|
||||
@@ -44,10 +44,10 @@ into it in the next section!
|
||||
|
||||
# Design Principles
|
||||
|
||||
gVisor was designed with some
|
||||
[common secure design principles](https://www.owasp.org/index.php/Security_by_Design_Principles)
|
||||
in mind: Defense-in-Depth, Principle of Least-Privilege, Attack Surface
|
||||
Reduction and Secure-by-Default[^1].
|
||||
gVisor was designed with some common
|
||||
[secure design](https://en.wikipedia.org/wiki/Secure_by_design) principles in
|
||||
mind: Defense-in-Depth, Principle of Least-Privilege, Attack Surface Reduction
|
||||
and Secure-by-Default[^1].
|
||||
|
||||
In general, Design Principles outline good engineering practices, but in the
|
||||
case of security, they also can be thought of as a set of tactics. In a
|
||||
@@ -282,16 +282,23 @@ stable.
|
||||
|
||||
## Notes
|
||||
|
||||
[^1]: [https://www.owasp.org/index.php/Security_by_Design_Principles](https://www.owasp.org/index.php/Security_by_Design_Principles)
|
||||
[^1]: [https://en.wikipedia.org/wiki/Secure_by_design](https://en.wikipedia.org/wiki/Secure_by_design)
|
||||
[^2]: [https://gvisor.dev/docs/architecture_guide](https://gvisor.dev/docs/architecture_guide/)
|
||||
[^3]: [https://github.com/google/gvisor/blob/master/pkg/sentry/syscalls/linux/linux64_amd64.go](https://github.com/google/gvisor/blob/master/pkg/sentry/syscalls/syscalls.go)
|
||||
[^4]: Internally that is, it doesn't call to the Host OS to implement them, in
|
||||
fact that is explicitly disallowed, more on that in the future.
|
||||
|
||||
<!-- mdformat off(mdformat formats this into multiple lines) -->
|
||||
[^4]: Internally that is, it doesn't call to the Host OS to implement them, in fact that is explicitly disallowed, more on that in the future.
|
||||
<!-- mdformat on -->
|
||||
|
||||
[^5]: [https://elixir.bootlin.com/linux/latest/source/arch/x86/entry/syscalls/syscall_64.tbl#L345](https://elixir.bootlin.com/linux/latest/source/arch/x86/entry/syscalls/syscall_64.tbl#L345)
|
||||
[^6]: [https://github.com/google/gvisor/tree/master/runsc/boot/filter](https://github.com/google/gvisor/tree/master/runsc/boot/filter)
|
||||
[^7]: [https://en.wikipedia.org/wiki/Dirty_COW](https://en.wikipedia.org/wiki/Dirty_COW)
|
||||
[^8]: [https://github.com/google/gvisor/blob/master/runsc/boot/config.go](https://github.com/google/gvisor/blob/master/runsc/boot/config.go)
|
||||
[^9]: [https://en.wikipedia.org/wiki/9P_(protocol)](https://en.wikipedia.org/wiki/9P_\(protocol\))
|
||||
|
||||
<!-- mdformat off(mdformat breaks this url by escaping the parenthesis) -->
|
||||
[^9]: [https://en.wikipedia.org/wiki/9P_(protocol)](https://en.wikipedia.org/wiki/9P_(protocol))
|
||||
<!-- mdformat on -->
|
||||
|
||||
[^10]: [https://gvisor.dev/docs/user_guide/networking/#network-passthrough](https://gvisor.dev/docs/user_guide/networking/#network-passthrough)
|
||||
[^11]: [https://github.com/google/gvisor/blob/c7e901f47a09eaac56bd4813227edff016fa6bff/pkg/sentry/platform/ptrace/subprocess.go#L390](https://github.com/google/gvisor/blob/c7e901f47a09eaac56bd4813227edff016fa6bff/pkg/sentry/platform/ptrace/subprocess.go#L390)
|
||||
[^12]: [https://github.com/google/gvisor/blob/c7e901f47a09eaac56bd4813227edff016fa6bff/pkg/sentry/platform/ring0/kernel_amd64.go#L182](https://github.com/google/gvisor/blob/c7e901f47a09eaac56bd4813227edff016fa6bff/pkg/sentry/platform/ring0/kernel_amd64.go#L182)
|
||||
|
||||
+3
-1
@@ -1,5 +1,7 @@
|
||||
"""Wrappers for website documentation."""
|
||||
|
||||
load("//tools:defs.bzl", "short_path")
|
||||
|
||||
# DocInfo is a provider which simple adds sufficient metadata to the source
|
||||
# files (and additional data files) so that a jeyll header can be constructed
|
||||
# dynamically. This is done the via BUILD system so that the plain
|
||||
@@ -29,7 +31,7 @@ def _doc_impl(ctx):
|
||||
category = ctx.attr.category,
|
||||
subcategory = ctx.attr.subcategory,
|
||||
weight = ctx.attr.weight,
|
||||
editpath = ctx.files.src[0].short_path,
|
||||
editpath = short_path(ctx.files.src[0].short_path),
|
||||
authors = ctx.attr.authors,
|
||||
),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user