Как имитировать /proc/sys/kernel/grsecurity/deny_new_usb без grsecurity?

Предположим, вы успешно настроили bcache, вы уже работаете над ним, поместили туда много важных данных, слишком больших, чтобы просто выполнить резервное копирование и начать заново, когда вы поняли, что вам лучше заменить устройство кэширования. Вот как это можно сделать. Это решение основано на испытаниях виртуальной машины.

Допустим, мы говорим об устройстве / dev / bcache0 , новое устройство кэш-памяти - / dev / sdf1 , а вспомогательное устройство - / dev / md1 . Все команды выполняются root.

  1. Убедитесь, что это устройство bcache0 ничем не используется.
  2. Выполнить в любом порядке
    1. Удалите устройство кэш-памяти, как написал Мартин фон Виттих, указав setUUID в / sys / block / bcache0 / bcache / detach . Если вы хотите переразбить кэширующее устройство, вам необходимо перезагрузить его, потому что bcache по-прежнему блокирует разделы, если вы не отмените его регистрацию.
    2. формат - новое устройство кэширования с помощью make-bcache -C / dev / sdf1 и запишите setUUID этого устройства.
  3. Зарегистрируйте наше поддерживающее устройство с новым набором кэша:

    echo [setUUID нового устройства кеширования]> / sys / block / bcache0 / bcache / attach

Нет необходимости перезагружаться.

4
29.01.2019, 17:24
1 ответ

Вот мой патч для ядра Linux версии 4.19.18:

From e5be5f1e696f5d41d992ac67d688c40045e81e95 Mon Sep 17 00:00:00 2001
From: Vitaly _Vi Shukela <vi0oss@gmail.com>
Date: Tue, 29 Jan 2019 21:01:08 +0300
Subject: [PATCH] Introduce dev.deny_new_usb sysctl flag

---
 drivers/usb/core/hub.c | 9 +++++++++
 kernel/sysctl.c        | 9 +++++++++
 2 files changed, 18 insertions(+)

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index cc62707c0251..fb4483b80bac 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -46,6 +46,9 @@
  * change to USB_STATE_NOTATTACHED even when the semaphore isn't held. */
 static DEFINE_SPINLOCK(device_state_lock);

+/* Skip handling of USB device plugging. Like /proc/sys/kernel/grsecurity/deny_new_usb. */
+int deny_new_usb __read_mostly = 0;
+
 /* workqueue to process hub events */
 static struct workqueue_struct *hub_wq;
 static void hub_event(struct work_struct *work);
@@ -4933,6 +4936,12 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
            goto done;
        return;
    }
+
+   if (deny_new_usb) {
+       printk(KERN_WARNING "Denying insertion of new USB device because of /proc/sys/dev/deny_new_usb is set to nonzero");
+       goto done;
+   }
+
    if (hub_is_superspeed(hub->hdev))
        unit_load = 150;
    else
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index f77df9f5fdb5..b0c14ad347c7 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -114,6 +114,8 @@ extern unsigned int sysctl_nr_open_min, sysctl_nr_open_max;
 extern int sysctl_nr_trim_pages;
 #endif

+extern int deny_new_usb;
+
 /* Constants used for minimum and  maximum */
 #ifdef CONFIG_LOCKUP_DETECTOR
 static int sixty = 60;
@@ -1905,6 +1907,13 @@ static struct ctl_table debug_table[] = {
 };

 static struct ctl_table dev_table[] = {
+   {
+      .procname   = "deny_new_usb",
+      .data       = &deny_new_usb,
+      .maxlen     = sizeof(int),
+      .mode       = 0644,
+      .proc_handler   = &proc_dointvec,
+   },
    { }
 };

-- 
2.20.1

Он основан на коде от Grsecurity. Он использует /proc/sys/dev/deny_new_usbвместо /proc/sys/kernel/grsecurity/deny_new_usb.

1
27.01.2020, 21:01

Теги

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