Нужна аутентификация при помощи запуска ОС [закрыта]

Возможно ли установить аутентификацию при загрузке? Если аутентификация завершилась неудачно, устройство перезапустится. Аутентификация может быть похожей на идентификатор системы, например. Mac ID.

1
задан 25 July 2017 в 11:54

2 ответа

смотря что вы подразумеваете под загрузки, но скорее всего, что вы хотите, может быть сделано путем добавления пользовательских вступления в команду systemd. https://www.freedesktop.org/wiki/Software/systemd/ - systemd в вики. https://wiki.archlinux.org/index.php/systemd#Writing_unit_files - запись арч Вики о systemd.

удалось создать сервис, который делает что-то близко к тому, что вы просили, добавляя раствор.

Примечания: я реализовал и протестировал этот процесс в Ubuntu Mate от 17.04. Он должен работать в 16.04 и выше, но там могут быть проблемы в старых версиях. Также стоит отметить, что systemd в не была использована в очень старые версии Ubuntu либо.

создаем bash-скрипт, который будет выполнять наш двиг проверить проверьте, числится ли конкретный USB-устройство подключено.

в первую очередь, нам нужно создать bash-скрипт, чтобы выполнить наши "авт" проверить. Вот пример сценария, чтобы выполнить проверку, основанную на подключенное USB устройство ID:

#!/bin/bash # test usb auth script CHECKID="0461:4de3" READID=$( lsusb -d "$CHECKID" | awk '{print $6}' ) wait printf "Required: ${CHECKID} \nObtained: ${READID}\n" if [ "$CHECKID" == "$READID" ] then echo "Usb-auth check passed!" else echo "Usb-auth check failed!" echo 'Calling for shutdown...' shutdown 0 fi

[F9] и содержит предопределенный идентификатор изготовителя устройства и само устройство. [F10] для переменной получите в результате выполнения команды, содержащейся внутри на [F11], в этом случае будет lsusb -d "$CHECKID" | awk '{print $6}'. [от f13] будем стараться, чтобы найти устройство с идентификатором, сохраненным в переменной $CHECKID, в то время как awk '{print $6}' анализирует результат, чтобы сохранить единственное слово, число 6 в результате строки. Например lsusb -d "0461:4de3" в моей системе выдает такое: Bus 002 Device 003: ID 0461:4de3 Primax Electronics, Ltd и 6-е слово в этом выводе-это именно идентификатор устройства. [f17 в] позвони раскажи скрипт, чтобы ждать, пока какой-либо из предыдущих команд, ребенка сделали, прежде чем перейти к сравнению. printf включен исключительно для ведения журнала отладки\. [зг19], где фактическая проверка выполняется. В сравнивает [20 фунтов] с [клавиши f21], и если они равны, мы прошли проверку, в противном случае мы не и отключения будет выполняться.

шаг за шагом процесс:

Примечания: перейдите к /usr/local/bin, имея права root (если вы используете\Наутилус Каха, вы можете открыть /usr/local, щелкните правой кнопкой мыши на "бин" папку и использовать "открыть от имени администратора"). Эта папка используется для поиска общесистемные пользовательские скрипты. Местные пользовательские скрипты могут быть созданы в /home/[user]/bin. Создайте пустой файл и откройте его в вашем любимом текстовом редакторе. Заполнить его с вашим проверяем скрипт, в качестве примера я буду использовать проверьте устройство USB сверху:

#!/bin/bash # test usb auth script CHECKID="0461:4de3" READID=$( lsusb -d "$CHECKID" | awk '{print $6}' ) wait printf "Required: ${CHECKID} \nObtained: ${READID}\n" if [ "$CHECKID" == "$READID" ] then echo "Usb-auth check passed!" else echo "Usb-auth check failed!" echo 'Calling for shutdown...' #shutdown 0 fi

я использовал "#" закомментировать фактическое Завершение вызова, чтобы предотвратить отключение во время установки и испытаний. Для простоты примера, будем считать, что скрипт называется [f25 привод датчика] и полный путь /usr/local/bin/usb-auth. Я буду использовать его в будущем действия, поэтому убедитесь в том, чтобы изменить их, если вы используете другое имя файла или путь.

2. Дайте ваш исполнительный разрешения скрипта. Вы можете сделать это, выполнив команду sudo chmod +x [file], в моем случае это будет: sudo chmod +x /usr/local/bin/usb-auth

2. Дайте ваш исполнительный разрешения скрипта.

список USB устройств, подключенных к вашей системе, Вы можете использовать команду lsusb. Подключите устройство USB, командной запустить, отключить устройство, запустить lsusb еще раз, проверьте, какое устройство сейчас отсутствует, замените CHECKID переменная в скрипте для вашего устройства. вот часть моего вывода этой команды:

lsusb Bus 002 Device 006: ID 0480:b206 Toshiba America Inc Bus 002 Device 005: ID 8086:0189 Intel Corp. Bus 002 Device 004: ID 0b38:0010 Gear Head 107-Key Keyboard Bus 002 Device 003: ID 0461:4de3 Primax Electronics, Ltd

устройства 003 в данном случае-это моя мышь, и он будет использоваться в нашей регистрации, так что нам понадобится идентификатор "0461:4de3". После того как мы получили его, мы можем хранить его в наш скрипт в качестве основания для проверки, в этой строке: CHECKID="0461:4de3"

0461:4de3 убедитесь, что отключения вызов закомментирован во время испытаний. Просто введите имя вашего скрипта в терминале и он должен автоматически поднять его, потому что мы размещали его в `/usr/местные/Бен/`. проверять с устройства, подключенного:

ethuil~$ usb-auth Required: 0461:4de3 Obtained: 0461:4de3 Check passed!

отключите устройство, проверьте еще раз:

ethuil~$ usb-auth Required: 0461:4de3 Obtained: Check failed! Executing shutdown...

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

[и D40]создание systemd в сервис, чтобы вызвать сценарий bash[!и D40] [dрайвер d41]5. Создать служебный файл и найти его в /etc/systemd в/системы/. Вы опять же нужны права root для этого. Создать пустой файл с расширением [f32 из], я буду называть мой auth-usb.service. Откройте его в текстовом редакторе и наполните его контентом такой: [!dрайвер d41] [Unit] Description=usb-auth bash script After=network-online.target [Install] WantedBy=sysinit.target [Service] ExecStart=/bin/bash /usr/local/bin/usb-auth Type=oneshot RemainAfterExit=yes

пробивание этой части:

Description - это то, что вы увидите в журналах systemd или консоли во время запуска системы, когда systemd не будет пытаться запустить эту службу.

After - это свойство определяет, после чего нам необходимо запустить наш скрипт. В этом примере мы имеем сеть-онлайн".мишень", что означает, что наш скрипт будет запущен только после того, как сеть будет онлайн. Эта часть может быть важно, если ваш скрипт использует части системы влияет на другие сервисы, например сетевого подключения, в данном примере. Вы можете перечислить все основные целевые услуги с помощью команды:[d43 см.][!d43 см.] [f36 в] Если вы ищете конкретную услугу, чтобы быть, когда вы запускаете ваш скрипт, вы можете вывести список всех служб с помощью команды: [fунции f37]

WantedBy - это важная составляющая, которая позволит определить, в какой момент наша служба будет называться. Обычно пользовательские скрипты будут использовать "WantedBy=Multi-потребителя.цель" и запустить после того, как система запущена и полностью рабочая. В нашем случае мы будем использовать "sysinit.цель" заставить ее работать во время инициализации системы. Если вы хотите запустить скрипт в разное время, вы можете использовать такой же [f39 расстройства], как и прежде, в списке возможных значений. В моем примере я буду придерживаться "sysinit.мишень".

Подробнее о [блок] и [установить] детали: https://www.freedesktop.org/wiki/Software/systemd/

ExecStart - это где мы расскажем, что мы хотим, чтобы наши службы должны быть запущены. "/бин/баш" будет выполнять баш переводчик, и "/usr/местные/Бен/с USB-авт" передается как параметр, чтобы сообщить его местоположение скрипта. Если вы планируете использовать не баш скрипт, но фактическое сделал программу, вы можете указать путь к программе вместо "/бин/баш *". Type=oneshot - это типа нашим сервисом. RemainAfterExit=yes - эта часть говорит, что система будет рассматривать нашу службу активными даже после того, как все его называют процессы выйдет.

[размером d57]Подробнее о различных типах и [сервис] состав: https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type= [!размером d57]

5. Создать служебный файл и найти его в /etc/systemd в/системы/ теперь, когда мы создали наш /etc/systemd/system/auth-usb.service и [пулемет f44] файлы, мы можем дать нашим сервисом, выполнив команду [f45 с]:

ethuil~$ systemctl enable auth-usb.service Created symlink /etc/systemd/system/sysinit.target.wants/auth-usb.service → /etc/systemd/system/auth-usb.service. [d63, как]Подробнее о systemctl команда: https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type= 7. Проверьте, если наша служба работает. Выполнить команду systemctl restart auth-usb.service запустить нашу служебная проверка.[dиода d17][!dиода d17] после того как вы сделали это, проверьте журналы, чтобы увидеть, если он работает по назначению, используя команду journalctl -u auth-usb. В моем случае: [!d63, как] ethuil~$ systemctl restart auth-usb.service ethuil~$ journalctl -u auth-usb -- Logs begin at Tue 2017-07-25 19:15:23 EEST, end at Tue 2017-07-25 19:15:52 EEST. -- Jul 25 19:15:49 ethuil-300E5Z systemd[1]: Starting usb-auth bash script... Jul 25 19:15:49 ethuil-300E5Z bash[1262]: Required: 0461:4de3 Jul 25 19:15:49 ethuil-300E5Z bash[1262]: Obtained: 0461:4de3 Jul 25 19:15:49 ethuil-300E5Z bash[1262]: Check passed! Jul 25 19:15:52 ethuil-300E5Z systemd[1]: Started usb-auth bash script.

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

7. Проверьте, если наша служба работает. пояснений. Просто перезагрузите ПК и запустите journalctl -u auth-usb, чтобы увидеть, если служба запускается как надо. Если что-то не работает при запуске как при полностью работающей системе, это, как вы можете проверить это путем перезагрузки и проверки журналов. Вы также можете запустить journalctl -t systemd, чтобы увидеть, в какой момент запуска Системы Ваша служба начинается, и посмотреть, если вам нужно, чтобы изменить это.

9. Раскомментировать команду "завершение работы" в ваш сценарий. Раскомментировать часть вашего сценария, который должен выполняться, если проверка провалилась и перезагрузите систему, чтобы увидеть, если скрипт работает. Это окончательно проверить, попробуйте запустить ПК с устройством, подключенным и без, чтобы увидеть, если он работает нормально. Убедитесь, что у вас есть способы получить доступ к скрипту, если Вы не сможете пройти проверку, например, внешних USB-накопитель с системой, с которого вы можете загрузить и изменить свой сценарий.

9. Раскомментируйте команды shutdown в скрипте в этот момент вы можете просто изменить весь процесс, чтобы соответствовать вашим потребностям. Сделать более сложный скрипт или создать полностью функциональную программу, а не делают это, чтобы проверить, какой USB-порт вы подключение устройства, делать что-то другое вместо выключения (например молчали протоколирования несанкционированных действий, а не просто закрытие) и т. д. В любом случае, что бы за рамки данного ответа. Я пытался заставить его работать с MAC-адресов, и это возможно сделать, но мои текущие настройки не имеет правильного и надежный способ проверить это правильно и стабильный, поэтому я не включил этот пример.

0
ответ дан 18 July 2018 в 09:43

смотря что вы подразумеваете под загрузки, но скорее всего, что вы хотите, может быть сделано путем добавления пользовательских вступления в команду systemd. https://www.freedesktop.org/wiki/Software/systemd/ - systemd в вики. https://wiki.archlinux.org/index.php/systemd#Writing_unit_files - запись арч Вики о systemd.

удалось создать сервис, который делает что-то близко к тому, что вы просили, добавляя раствор.

Примечания: я реализовал и протестировал этот процесс в Ubuntu Mate от 17.04. Он должен работать в 16.04 и выше, но там могут быть проблемы в старых версиях. Также стоит отметить, что systemd в не была использована в очень старые версии Ubuntu либо.

создаем bash-скрипт, который будет выполнять наш двиг проверить проверьте, числится ли конкретный USB-устройство подключено.

в первую очередь, нам нужно создать bash-скрипт, чтобы выполнить наши "авт" проверить. Вот пример сценария, чтобы выполнить проверку, основанную на подключенное USB устройство ID:

#!/bin/bash # test usb auth script CHECKID="0461:4de3" READID=$( lsusb -d "$CHECKID" | awk '{print $6}' ) wait printf "Required: ${CHECKID} \nObtained: ${READID}\n" if [ "$CHECKID" == "$READID" ] then echo "Usb-auth check passed!" else echo "Usb-auth check failed!" echo 'Calling for shutdown...' shutdown 0 fi

[F9] и содержит предопределенный идентификатор изготовителя устройства и само устройство. [F10] для переменной получите в результате выполнения команды, содержащейся внутри на [F11], в этом случае будет lsusb -d "$CHECKID" | awk '{print $6}'. [от f13] будем стараться, чтобы найти устройство с идентификатором, сохраненным в переменной $CHECKID, в то время как awk '{print $6}' анализирует результат, чтобы сохранить единственное слово, число 6 в результате строки. Например lsusb -d "0461:4de3" в моей системе выдает такое: Bus 002 Device 003: ID 0461:4de3 Primax Electronics, Ltd и 6-е слово в этом выводе-это именно идентификатор устройства. [f17 в] позвони раскажи скрипт, чтобы ждать, пока какой-либо из предыдущих команд, ребенка сделали, прежде чем перейти к сравнению. printf включен исключительно для ведения журнала отладки\. [зг19], где фактическая проверка выполняется. В сравнивает [20 фунтов] с [клавиши f21], и если они равны, мы прошли проверку, в противном случае мы не и отключения будет выполняться.

шаг за шагом процесс:

Примечания: перейдите к /usr/local/bin, имея права root (если вы используете\Наутилус Каха, вы можете открыть /usr/local, щелкните правой кнопкой мыши на "бин" папку и использовать "открыть от имени администратора"). Эта папка используется для поиска общесистемные пользовательские скрипты. Местные пользовательские скрипты могут быть созданы в /home/[user]/bin. Создайте пустой файл и откройте его в вашем любимом текстовом редакторе. Заполнить его с вашим проверяем скрипт, в качестве примера я буду использовать проверьте устройство USB сверху:

#!/bin/bash # test usb auth script CHECKID="0461:4de3" READID=$( lsusb -d "$CHECKID" | awk '{print $6}' ) wait printf "Required: ${CHECKID} \nObtained: ${READID}\n" if [ "$CHECKID" == "$READID" ] then echo "Usb-auth check passed!" else echo "Usb-auth check failed!" echo 'Calling for shutdown...' #shutdown 0 fi

я использовал "#" закомментировать фактическое Завершение вызова, чтобы предотвратить отключение во время установки и испытаний. Для простоты примера, будем считать, что скрипт называется [f25 привод датчика] и полный путь /usr/local/bin/usb-auth. Я буду использовать его в будущем действия, поэтому убедитесь в том, чтобы изменить их, если вы используете другое имя файла или путь.

2. Дайте ваш исполнительный разрешения скрипта. Вы можете сделать это, выполнив команду sudo chmod +x [file], в моем случае это будет: sudo chmod +x /usr/local/bin/usb-auth

2. Дайте ваш исполнительный разрешения скрипта.

список USB устройств, подключенных к вашей системе, Вы можете использовать команду lsusb. Подключите устройство USB, командной запустить, отключить устройство, запустить lsusb еще раз, проверьте, какое устройство сейчас отсутствует, замените CHECKID переменная в скрипте для вашего устройства. вот часть моего вывода этой команды:

lsusb Bus 002 Device 006: ID 0480:b206 Toshiba America Inc Bus 002 Device 005: ID 8086:0189 Intel Corp. Bus 002 Device 004: ID 0b38:0010 Gear Head 107-Key Keyboard Bus 002 Device 003: ID 0461:4de3 Primax Electronics, Ltd

устройства 003 в данном случае-это моя мышь, и он будет использоваться в нашей регистрации, так что нам понадобится идентификатор "0461:4de3". После того как мы получили его, мы можем хранить его в наш скрипт в качестве основания для проверки, в этой строке: CHECKID="0461:4de3"

0461:4de3 убедитесь, что отключения вызов закомментирован во время испытаний. Просто введите имя вашего скрипта в терминале и он должен автоматически поднять его, потому что мы размещали его в `/usr/местные/Бен/`. проверять с устройства, подключенного:

ethuil~$ usb-auth Required: 0461:4de3 Obtained: 0461:4de3 Check passed!

отключите устройство, проверьте еще раз:

ethuil~$ usb-auth Required: 0461:4de3 Obtained: Check failed! Executing shutdown...

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

[и D40]создание systemd в сервис, чтобы вызвать сценарий bash[!и D40] [dрайвер d41]5. Создать служебный файл и найти его в /etc/systemd в/системы/. Вы опять же нужны права root для этого. Создать пустой файл с расширением [f32 из], я буду называть мой auth-usb.service. Откройте его в текстовом редакторе и наполните его контентом такой: [!dрайвер d41] [Unit] Description=usb-auth bash script After=network-online.target [Install] WantedBy=sysinit.target [Service] ExecStart=/bin/bash /usr/local/bin/usb-auth Type=oneshot RemainAfterExit=yes

пробивание этой части:

Description - это то, что вы увидите в журналах systemd или консоли во время запуска системы, когда systemd не будет пытаться запустить эту службу.

After - это свойство определяет, после чего нам необходимо запустить наш скрипт. В этом примере мы имеем сеть-онлайн".мишень", что означает, что наш скрипт будет запущен только после того, как сеть будет онлайн. Эта часть может быть важно, если ваш скрипт использует части системы влияет на другие сервисы, например сетевого подключения, в данном примере. Вы можете перечислить все основные целевые услуги с помощью команды:[d43 см.][!d43 см.] [f36 в] Если вы ищете конкретную услугу, чтобы быть, когда вы запускаете ваш скрипт, вы можете вывести список всех служб с помощью команды: [fунции f37]

WantedBy - это важная составляющая, которая позволит определить, в какой момент наша служба будет называться. Обычно пользовательские скрипты будут использовать "WantedBy=Multi-потребителя.цель" и запустить после того, как система запущена и полностью рабочая. В нашем случае мы будем использовать "sysinit.цель" заставить ее работать во время инициализации системы. Если вы хотите запустить скрипт в разное время, вы можете использовать такой же [f39 расстройства], как и прежде, в списке возможных значений. В моем примере я буду придерживаться "sysinit.мишень".

Подробнее о [блок] и [установить] детали: https://www.freedesktop.org/wiki/Software/systemd/

ExecStart - это где мы расскажем, что мы хотим, чтобы наши службы должны быть запущены. "/бин/баш" будет выполнять баш переводчик, и "/usr/местные/Бен/с USB-авт" передается как параметр, чтобы сообщить его местоположение скрипта. Если вы планируете использовать не баш скрипт, но фактическое сделал программу, вы можете указать путь к программе вместо "/бин/баш *". Type=oneshot - это типа нашим сервисом. RemainAfterExit=yes - эта часть говорит, что система будет рассматривать нашу службу активными даже после того, как все его называют процессы выйдет.

[размером d57]Подробнее о различных типах и [сервис] состав: https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type= [!размером d57]

5. Создать служебный файл и найти его в /etc/systemd в/системы/ теперь, когда мы создали наш /etc/systemd/system/auth-usb.service и [пулемет f44] файлы, мы можем дать нашим сервисом, выполнив команду [f45 с]:

ethuil~$ systemctl enable auth-usb.service Created symlink /etc/systemd/system/sysinit.target.wants/auth-usb.service → /etc/systemd/system/auth-usb.service. [d63, как]Подробнее о systemctl команда: https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type= 7. Проверьте, если наша служба работает. Выполнить команду systemctl restart auth-usb.service запустить нашу служебная проверка.[dиода d17][!dиода d17] после того как вы сделали это, проверьте журналы, чтобы увидеть, если он работает по назначению, используя команду journalctl -u auth-usb. В моем случае: [!d63, как] ethuil~$ systemctl restart auth-usb.service ethuil~$ journalctl -u auth-usb -- Logs begin at Tue 2017-07-25 19:15:23 EEST, end at Tue 2017-07-25 19:15:52 EEST. -- Jul 25 19:15:49 ethuil-300E5Z systemd[1]: Starting usb-auth bash script... Jul 25 19:15:49 ethuil-300E5Z bash[1262]: Required: 0461:4de3 Jul 25 19:15:49 ethuil-300E5Z bash[1262]: Obtained: 0461:4de3 Jul 25 19:15:49 ethuil-300E5Z bash[1262]: Check passed! Jul 25 19:15:52 ethuil-300E5Z systemd[1]: Started usb-auth bash script.

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

7. Проверьте, если наша служба работает. пояснений. Просто перезагрузите ПК и запустите journalctl -u auth-usb, чтобы увидеть, если служба запускается как надо. Если что-то не работает при запуске как при полностью работающей системе, это, как вы можете проверить это путем перезагрузки и проверки журналов. Вы также можете запустить journalctl -t systemd, чтобы увидеть, в какой момент запуска Системы Ваша служба начинается, и посмотреть, если вам нужно, чтобы изменить это.

9. Раскомментировать команду "завершение работы" в ваш сценарий. Раскомментировать часть вашего сценария, который должен выполняться, если проверка провалилась и перезагрузите систему, чтобы увидеть, если скрипт работает. Это окончательно проверить, попробуйте запустить ПК с устройством, подключенным и без, чтобы увидеть, если он работает нормально. Убедитесь, что у вас есть способы получить доступ к скрипту, если Вы не сможете пройти проверку, например, внешних USB-накопитель с системой, с которого вы можете загрузить и изменить свой сценарий.

9. Раскомментируйте команды shutdown в скрипте в этот момент вы можете просто изменить весь процесс, чтобы соответствовать вашим потребностям. Сделать более сложный скрипт или создать полностью функциональную программу, а не делают это, чтобы проверить, какой USB-порт вы подключение устройства, делать что-то другое вместо выключения (например молчали протоколирования несанкционированных действий, а не просто закрытие) и т. д. В любом случае, что бы за рамки данного ответа. Я пытался заставить его работать с MAC-адресов, и это возможно сделать, но мои текущие настройки не имеет правильного и надежный способ проверить это правильно и стабильный, поэтому я не включил этот пример.

0
ответ дан 24 July 2018 в 19:25
  • 1
    спасибо за ваш ответ sir, но на самом деле я хочу установить скрипт, который может проверять мой идентификатор компьютера системы, только если это устройство может загрузиться для проверки идентификатора mac id. Я хочу сохранить файл с идентификатором mac, если в этом файле используется идентификатор mac или что-то еще устройство загрузит любезную помощь в этом – Deepak Singh 26 July 2017 в 07:59
  • 2
    Я могу изменить скрипт для работы с идентификатором mac, но для этого мне потребуется дополнительная информация о вашей системе и сети. Можно создать скрипт, который вместо этого сравнивает идентификатор MAC. Если вы можете обновить свое сообщение информацией из ifconfig и ip addr. По mac id вы имеете в виду MAC-адрес сетевого устройства, правильно? Я также опасаюсь, что, если вам недостаточно информации, вам нужно больше узнать о сценариях bash. – Ethuil UI 26 July 2017 в 14:26

Другие вопросы по тегам:

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