В вашей системе обнаружена устаревшая версия bash! при обновлении sdkman

Вместо того, чтобы делать свой bash-скрипт suid root, запускайте bash-скрипт через sudo. В качестве дополнительного преимущества это также позволяет вам легко заблокировать, кто может запускать ваш скрипт от имени пользователя root, а также передаваемые аргументы. Вы могли бы, например, разрешить только:

phpuser ALL=(root) NOPASSWD: /usr/local/sbin/your-script [0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9]

затем убедитесь, что ваш PHP-скрипт всегда форматирует каждый октет IP-адреса как три цифры.

Если слишком сложно заставить PHP вызывать sudo (, чего быть не должно! )вы можете сделать так, чтобы скрипт сделал это сам, с чем-то вроде:

#!/bin/sh

[ "$(id -u)" -eq 0 ] || exec sudo -- "$0" "$@"
# rest of script here

(Я не совсем уверен, что iptables удовлетворит ведущие 0, если нет, вы можете их убрать ).

PS :Пожалуйста, указывайте ваши переменные в сценарии оболочки:

if validate_ip "$1"; then 
    /usr/sbin/iptables -I INPUT -s "$1" -j DROP
    # ⋮
4
02.11.2019, 23:20
1 ответ

sdman смотрит на /bin/bash, которая является версией 3.2.57, потому что macos не может поставляться с чем-то более новым, чем она.

The reason that Apple includes such an old version of Bash in its operating system has to do with licensing. Since version 4.0 (successor of 3.2), Bash uses the GNU General Public License v3 (GPLv3), which Apple does not (want to) support. You can find some discussions about this here and here. Version 3.2 of GNU Bash is the last version with GPLv2, which Apple accepts, and so it sticks with it.

источник

Вы установили современную версию bash, но не заменили ею /bin/bash. Я действительно не рекомендую делать это, так как это потенциально может привести к поломке некоторых устаревших скриптов/программ (маловероятно, но возможно ).

Я рекомендую игнорировать это предупреждение. Это предупреждает вас, потому что bash v3.2 обычно страдает от уязвимости shellshock , однако Apple исправила это в своей версии Bash v3.2.

Если вы не можете проигнорировать это предупреждение и действительно хотите рискнуть обновить свой /bin/bash, я бы переместил его в резервную папку и символически связал с ним ваш новый bash.

sudo mv /bin/bash /bin/bash.bak
sudo ln -s /usr/local/bin/bash /bin/bash

Но для этого вам нужно будет обойти SIP

Чтобы включить или отключить Защиту целостности системы, вы должны загрузить ОС восстановления и выполнить команду csrutil (1 )из Терминала.

  • Загрузите ОС восстановления, перезагрузив компьютер и удерживая клавиши Command и R при запуске.
  • Запустите Терминал из меню «Утилиты».
  • Введите следующую команду:
    $ csrutil disable
  • После включения или отключения защиты целостности системы на машине требуется перезагрузка.
10
27.01.2020, 20:49

Теги

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