Giter VIP home page Giter VIP logo

mesalock-distro's Introduction

MesaLock Linux: A Memory-Safe Linux Distribution

GitHub Release Build Status Docker Pulls Chat on Matrix IRC: #rocket on chat.freenode.net

MesaLock Linux is a general purpose Linux distribution which aims to provide a safe and secure user space environment. To eliminate high-severe vulnerabilities caused by memory corruption, the whole user space applications are rewritten in memory-safe programming languages like Rust and Go. This extremely reduces attack surfaces of an operating system exposed in the wild, leaving the remaining attack surfaces auditable and restricted. Therefore, MesaLock Linux can substantially improve the security of the Linux ecosystem. Additionally, thanks to the Linux kernel, MesaLock Linux supports a broad hardware environment, making it deployable in many places. Two main usage scenarios of MesaLock Linux are for containers and security-sensitive embedded devices. With the growth of the ecosystem, MesaLock Linux would also be adopted in the server environment in the future.

To get better functionality along with strong security guarantees, MesaLock Linux follows the following rules-of-thumb for hybrid memory-safe architecture design proposed by the Rust SGX SDK project.

  1. Unsafe components must not taint safe components, especially for public APIs and data structures.
  2. Unsafe components should be as small as possible and decoupled from safe components.
  3. Unsafe components should be explicitly marked during deployment and ready to upgrade.

Quick Start

You can quickly experience MesaLock Linux in the container environment using Docker.

$ docker run -it mesalocklinux/mesalock-linux

Building

Currently, MesaLock Linux is provided in two versions: live ISO and rootfs. The live ISO image can be used to create a bootable live USB, or boot in a virtual machine. The rootfs (i.e., root file system) can be used as a minimal root image for a container.

Requirements

Clone MesaLock repository

Clone mesalock-distro and packages repositories.

$ mkdir mesalock-linux && cd mesalock-linux
$ git clone https://github.com/mesalock-linux/mesalock-distro.git
$ git clone https://github.com/mesalock-linux/packages.git
$ cd mesalock-distro

Build in Docker

We provide a Dockerfile for building MesaLock Linux with all dependencies installed. You can build the docker image first and then in the container build environment you can build packages, live ISO, and rootfs.

$ docker build --rm -t mesalocklinux/build-mesalock-linux -f Dockerfile.build .
$ docker run -v $(dirname $(pwd)):/mesalock-linux -w /mesalock-linux/mesalock-distro \
    -it mesalocklinux/build-mesalock-linux /bin/bash

The image of build environment is also provided from Docker Hub. You can pull and run the container with the repo name mesalocklinux/build-mesalock-linux.

Build on Ubuntu

You can also build on Ubuntu machine. Please install these build dependencies first:

# install packages
$ apt-get update && \
  apt-get install -q -y --no-install-recommends \
           curl \
           git \
           build-essential \
           cmake \
           wget \
           bc \
           gawk \
           parallel \
           pigz \
           cpio \
           xorriso \
           fakeroot \
           syslinux-utils \
           uuid-dev \
           libmpc-dev \
           libisl-dev \
           libz-dev \
	   python-pip \
	   python-setuptools \
           software-properties-common

# install build dependencies for pypy
$ apt-get install -q -y --no-install-recommends \
        pypy \
        gcc \
        make \
        libffi-dev \
        pkg-config \
        zlib1g-dev \
        libbz2-dev \
        libsqlite3-dev \
        libncurses5-dev \
        libexpat1-dev \
        libssl-dev \
        libgdbm-dev \
        tk-dev \
        libgc-dev \
        python-cffi \
        liblzma-dev \
        libncursesw5-dev

# install wheel and sphinx
$ pip install wheel
$ pip install sphinx

# install Go
$ add-apt-repository -y ppa:gophers/archive && \
  apt-get update && \
  apt-get install -q -y --no-install-recommends \
           golang-1.9-go

# install Rust
$ curl https://sh.rustup.rs -sSf | sh -s -- -y
$ rustup install nightly-2018-05-30 # we need this because some packages still depend on nightly
$ rustup default 1.27.2

# setup PATH
$ export PATH="$HOME/.cargo/bin:/usr/lib/go-1.9/bin:$PATH"

Build packages, live ISO, and rootfs

After installing build dependencies, you can run following commands to build packages, live ISO, and rootfs.

  • First build all packages: ./mkpkg
  • Build the live ISO: ./mesalockiso
  • Build the container rootfs: ./mesalockrootfs
  • Build a specific package only: ./mkpkg <package_name>

The live ISO (mesalock-linux.iso) and rootfs (rootfs.tar.xz) can be found in the build directory.

Trying

MesaLock Linux can be run in real devices (e.g., boot from a Live USB), virtual machines, and docker containers.

Virtual machine

You can try MesaLock Linux with Live ISO or in a docker container. Here are steps to try MesaLock Linux in VirtualBox.

  1. Open VirtualBox and "New" a VM.
  2. In the VM settings, choose mesalock-linux.iso as "Optical Drive".
  3. Start the VM and explore MesaLock Linux.

Docker container

We provide a simple Dockerfile for MesaLock Linux. Here are steps to try MesaLock Linux in a docker container.

  1. Build packages and rootfs: ./mkpkg && ./mesalockrootfs
  2. Build the docker image: docker build --rm -t mesalocklinux/mesalock-linux .
  3. Run the image and expeience MesaLock Linux: docker run --rm -it mesalocklinux/mesalock-linux

The latest rootfs image with all packages is pushed to Docker Hub. You can also directly run the image with the repo name mesalocklinux/mesalock-linux.

Demos

Hosting web servers

The mesalock-demo package provides several examples and will be installed under the /root/mesalock-demo directory. For instance, we made several web server demos written in Rocket, which is a web framework written in Rust. To try these demos in the VM, please follow these instructions.

  1. In the VM settings, select "NAT" for network adapter and use port forwarding function in the advanced settings to bind host and guest machines. Here we add a new rule to bind host IP (127.0.0.1:8080) with guest IP (10.0.2.15:8000).
  2. Start MesaLock Linux.
  3. Bring up all network devices. Here we use ip command:
```
$ ip link set lo up
$ ip link set eth0 up
```
  1. Setup IP address of the network devices.
```
$ ip address add 10.0.2.15/24 dev eth0
```
  1. Run a web server.
```
$ cd /root/mesalock-demo/rocket-hello-world && ./hello_world
# or
$ cd /root/mesalock-demo/rocket-tls && ./tls
```
  1. Finally, connect to the web server using a browser. In this example, type in http://127.0.0.1:8080 in the browser.

You can also try our demos in the docker image directly.

  1. Run the MesaLock docker and export port 8000 to 8000: docker run -it -p 8000:8000 mesalocklinux/mesalock-linux
  2. Run a web server in the /root/mesalock-demo/ directory.
  3. Visit the website in the browser.

Working on machine learning tasks

Rusty-machine is a general purpose machine learning library implemented entirely in Rust. We put several demo examples of machine learning tasks in the mesalock-demo package. You can find them in the /root/mesalock-demo/rusty-machine/ directory.

Packages

MesaLock Linux provides many packages with memory safety in mind. All user space applications are written in Rust and Go. Thanks to the open source community, they have created many useful and high-quality tools. The number of packages will increase as the time goes on.

  • brotli: compression tool written in Rust (dropbox/rust-brotli)
  • busybox: busybox tool set for testing only (busybox)
  • exa: replacement for ls written in Rust (ogham/exa)
  • fd-find: simple, fast and user-friendly alternative to find (sharkdp/fd)
  • filesystem: base filesystem layout (maintained by MesaLock Linux)
  • gcc-libs: GCC library, only libgcc_s.so is used (gcc)
  • giproute2: ip tool written in Go (maintained by MesaLock Linux)
  • glibc: the GNU C library (glibc)
  • init: init script (maintained by MesaLock Linux)
  • ion-shell: shell written in Rust (redox-os/ion)
  • linux: Linux kernel (linux)
  • mesalock-demo: some demo projects (maintained by MesaLock Linux)
  • mgetty: getty written in Rust (maintained by MesaLock Linux)
  • micro: modern and intuitive terminal-based text editor written in Go (zyedidia/micro)
  • minit: init written in Rust (maintained by MesaLock Linux)
  • ripgrep: ripgrep combines the usability of The Silver Searcher with the raw speed of grep, written in Rust (BurntSushi/ripgrep)
  • syslinux: bootloader (syslinux)
  • tokei: count your code, quickly, in Rust (Aaronepower/tokei)
  • tzdata: timezone data (tzdata)
  • uutils-coreutils: cross-platform Rust rewrite of the GNU coreutils (uutils/coreutils)
  • uutils-findutils: rust implementation of findutils (uutils/findutils)
  • xi-core: a modern editor with a backend written in Rust (google/xi-editor)
  • xi-term: a terminal frontend for Xi (xi-frontend/xi-term)
  • more packages in the MesaLock Linux Package project

Contributing

MesaLock Linux is a very young and at an early stage. Some important components are still missing or work-in-progress. Building safe and secure Linux distro relies on the whole community, and you are very welcome to contribute to the MesaLock Linux project.

You can get involved in various forms:

  • Try to use MesaLock Linux, report issue, enhancement suggestions, etc
  • Contribute to MesaLock Linux: optimize development process, improve documents, close issues, etc
  • Contribute to core packages of MesaLock Linux: improving minit, mgetty, giproute2, etc
  • Write applications using memory safe programming languages like Rust/Go, and join the the MesaLock Linux packages
  • Audit source code of the MesaLock Linux projects and related packages

You are welcome to send pull requests and report issues on GitHub. Note that the MesaLock Linux project follows the Git flow development model.

Community

If you are interested in the MesaLock Linux project, please find us on the #mesalock-linux or #mesalock-linux-cn (in Chinese) IRC channels at the freenode server and the bridged room on Matrix. If you're not familiar with IRC, we recommend chatting through Matrix via Riot or via the Kiwi web IRC client.

List of our IRC channels:

Maintainer

Steering Committee

  • Tao Wei
  • Yulong Zhang

License

MesaLock Linux is provided under the BSD license.

mesalock-distro's People

Contributors

mssun avatar rofrol avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mesalock-distro's Issues

./mkpkg micro error

./mkpkg micro
fatal: unable to access 'https://go.googlesource.com/net/': Failed to connect to go.googlesource.com port 443: Connection timed out
Failed to clone 'cmd/micro/vendor/golang.org/x/net' a second time, aborting
package github.com/zyedidia/micro/cmd/micro: exit status 1

Polish README.md (badges, grammar checks, organization, etc)

We need to polish the readme file. Now it's lengthy. Here are some thoughts:

  • add badge stating the current release number
  • add badge on the IRC channel
  • go through the whole readme file and check grammars and sentences
  • consider the organization of the readme, and re-organize the outline
  • lists all IRC channels
  • state the git flow developing process

Project Documentation

I've experimented with this project. It looks very well thought out and quite intriguing. I'd like to read more about the design philosophy, architecture, objectives, candidate applications, etc. Have you published a paper which describe the project? Sorry for asking this here.

Is there a plan for add mini GUI to mesalock-linux ?

hi,

Is there a plan for add mini GUI to mesalock-linux ?

For some reason , or demo purpose for people who first time touch mesalock-linux , a GUI interface will be more acceptable for them .

Do we have a road map ?

thanks.

Is this project active?

Hi all.

I want to help, but I want to know if this project is active. Is this project active?

Travis CI integration

Have a basic CI integration.

  • For every package commit, the CI should try to compile the package and make sure there is no compilation issue.
  • For every changes on the mesalock-distro project, rebuild the whole system to check the integration issue.

build/out/minit.tar.xz is missed

$ ./mesalockiso
[+] mesalockiso: installing bootloader and kernel
[+] mesalockiso: installing rootfs
tar (child): build/out/minit.tar.xz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

=======

I am build mesalock-linux on ubuntu 17.04 , and follow the instructions step by step in readme file .

thanks in advance

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.