Чтение и запись данных временно без использования файловой системы

Ужасный подход. Это почти так же плохо, как поддержка Dell лучшего ядра в мире.

Вот как это делается, чтобы сохранить рассудок:

  1. Установите unetbootin
  2. Сделайте USB FreeDOS загрузочным
  3. Поместите файл BIOS Dell на USB
  4. Загрузите FreeDOS в безопасном режиме
  5. Выполните файлы BIOS из C:\

О Dell, если бы не тот факт, что я получил этот ноутбук бесплатно, вы бы не получили ни одного из моих денег, и вы не получите больше, пока не поддержите идеальную ОС.

3
12.03.2019, 21:31
2 ответа

Для создания RAM-диска объемом 1 МБ с помощьюtmpfs:

mkdir /tmp/ramdisk
mount -t tmpfs -o size=1m myramdisk /tmp/ramdisk

Виртуальный диск ramfsне выполняет подкачку, но подкачку можно включать и выключать при использовании tmpfsВиртуального диска:swapoff -aи swapon -aсоответственно, если необходимо убедиться, что во время использование RAM-диска tmpfs. Размонтировать:

umount /tmp/ramdisk

Может я что-то упустил, но смысла в описании RAM-диска в /etc/fstabне вижу; но, если это необходимо, чего-то вроде следующего должно быть достаточно, чтобы RAM-диск был доступен только rootпользователю(mode=0700):

tmpfs /tmp/ramdisk tmpfs rw,mode=0700,size=1m
1
27.01.2020, 21:24

В дополнение к ответу @Christopher я хотел бы показать, как я интегрировал решение в свой Vagrantfile, чтобы заставить его работать с моим доступным предоставлением.

Пусть кто-нибудь наткнется на это.

Бродячий файл

Vagrant.configure("2") do |config|

    class AnsibleVaultPassword
        def to_s
            begin
                system 'stty -echo'
                print "Enter ansible vault password: "
                pass = STDIN.gets.chomp
                ensure
                system 'stty echo'
            end
            pass
        end
    end

    config.vm.box = "vendor/box-name"
    config.vm.box_version = ">=1.0"
    config.vm.box_url = "https://vagrant.example.com/vendor/box-name.json"
    config.vm.box_download_insecure = true

    config.vm.define "vendor-server-name"
    config.vm.provider "virtualbox" do |provider|
        provider.name = "vendor-server-name"
    end

    config.vm.network "private_network", ip: "192.168.0.42"

    config.vm.synced_folder ".", "/vagrant", type: "nfs"

    config.vm.provision "Provisioning the server `server-name` with the playbook `ansible`", type: "ansible_local" do |provisioner|
        provisioner.compatibility_mode = "2.0"
        provisioner.playbook = "/vagrant/ansible/ansible.yml"
        provisioner.inventory_path = "/vagrant/ansible/inv/integration/hosts"
        provisioner.limit = "localhost"
    end

    config.vm.provision "Requesting the ansible vault password", type: "shell" do |provisioner|
        provisioner.env = { "ansibleVaultPassword" => AnsibleVaultPassword.new }
        provisioner.inline = <<-END
            [[ ! -d "/mnt/ansible-tmp" ]] \
            && mkdir "/mnt/ansible-tmp"
            mountpoint -q "/mnt/ansible-tmp" \
            || mount -t tmpfs -o size=512 ansible-tmp "/mnt/ansible-tmp"
            /vagrant/env/ansible/scripts/vault-password.sh --save "${ansibleVaultPassword}"
        END
    end

    config.vm.provision "Provisioning the server `server-name` with the playbook `environment`", type: "ansible_local" do |provisioner|
        provisioner.compatibility_mode = "2.0"
        provisioner.playbook = "/vagrant/ansible/environment.yml"
        provisioner.raw_arguments = [ "--vault-id /vagrant/ansible/scripts/vault-password.sh" ]
        provisioner.inventory_path = "/vagrant/ansible/inv/integration/hosts"
        provisioner.limit = "localhost"
    end

    config.vm.provision "Provisioning the server `server-name` with the playbook `users`", type: "ansible_local" do |provisioner|
        provisioner.compatibility_mode = "2.0"
        provisioner.playbook = "/vagrant/ansible/users.yml"
        provisioner.raw_arguments = [ "--vault-id /vagrant/ansible/scripts/vault-password.sh" ]
        provisioner.inventory_path = "/vagrant/ansible/inv/integration/hosts"
        provisioner.limit = "localhost"
    end

    config.vm.provision "Deleting the ansible vault password", type: "shell" do |provisioner|
        provisioner.inline = <<-END
            /vagrant/env/ansible/scripts/vault-password.sh --delete
            mountpoint -q "/mnt/ansible-tmp" \
            && umount "/mnt/ansible-tmp"
            [[ -d "/mnt/ansible-tmp" ]] \
            && rm -r "/mnt/ansible-tmp"
        END
    end

end

/vagrant/ansible/scripts/vault -password.sh

#!/usr/bin/env bash

passwordFile="/mnt/ansible-tmp/vault-password"
case "${1}" in
    "-s" | "--save" )
        echo "${2}" > "${passwordFile}"
        ;;
    "-d" | "--delete" )
        unlink "${passwordFile}"
        ;;
    * )
        cat "${passwordFile}"
        ;;
esac

Пока это виртуальная машина Debian, я сначала запускаю playbook ansible, который добавляет репозиторий ansible из Ubuntu, а затем устанавливает последнюю ansible. Это необходимо, по крайней мере, для предоставления аргумента --vault-idвызову ansible-playbookVagrant. (На момент написания этого поста Debian Stretchпоставляется с ansible 2.2, который не поддерживает этот аргумент.)

Затем запрашивается пароль хранилища с классом AnsibleVaultPassword. После этого будет создан tmpfs, а пароль будет передан сценарию vault-password.shдля его сохранения на монтировании tmpfs.

После этого ansible будет запрашивать пароль через сценарий vault-password.shв каждом плейбуке, предоставляющем зашифрованные данные хранилища.

И в конце сначала удалится пароль, потом размонтируется монтирование tmpfs.

Я думаю, что это очень безопасное и надежное решение для предоставления пароля доступного хранилища через временное очищаемое хранилище памяти.Таким образом, работающая система может быть подготовлена, и перезагрузка больше не требуется.

1
27.01.2020, 21:24

Теги

Похожие вопросы