시스템에서 오래된 버전의 bash가 감지되었습니다! SDKman을 업데이트할 때

시스템에서 오래된 버전의 bash가 감지되었습니다! SDKman을 업데이트할 때

macOS에서 소프트웨어를 업데이트하려고 하는데 sdmanbash 오래된 버전 오류가 발생합니다.

rajkumar.natarajan$ sdk update   
    An outdated version of bash was detected on your system!
    We recommend upgrading to bash 4.x, you have:

    3.2.57(1)-release
    Need to use brute force to replace candidates...

그러나 bash 버전은 이미 최신 버전입니다.

rajkumar.natarajan$ which bash 
/usr/local/bin/bash   
rajkumar.natarajan$ bash --version   
GNU bash, version 5.0.11(1)-release (x86_64-apple-darwin16.7.0)
Copyright (C) 2019 Free Software Foundation, Inc.   
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.   
There is NO WARRANTY, to the extent permitted by law.

답변1

sdman당신이 보고 있는 버전은 /bin/bash3.2.57입니다. macos는 그보다 더 새로운 버전을 제공할 수 없기 때문입니다.

Apple이 운영 체제에 이전 버전의 Bash를 포함시키는 이유는 라이센스와 관련이 있습니다. 버전 4.0(3.2의 후속 버전)부터 Bash는 Apple이 지원하지 않는(원하는) GNU General Public License v3(GPLv3)을 사용합니다. 여기와 여기에서 이 문제에 대한 토론을 찾을 수 있습니다. GNU Bash 버전 3.2는 GPLv2를 채택한 마지막 버전이었고 Apple은 이를 승인하여 이를 고수했습니다.

원천

최신 버전의 bash를 설치했지만 /bin/bash아직 교체하지 않았습니다. 일부 레거시 스크립트/프로그램이 손상될 수 있으므로 이 작업을 수행하지 않는 것이 좋습니다(가능성은 낮지만 가능함).

내 조언은 경고를 무시하는 것입니다. bash v3.2는 일반적으로 다음 문제의 영향을 받기 때문에 경고합니다.쉘 쇼크그러나 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
  • 컴퓨터에서 시스템 무결성 보호를 활성화하거나 비활성화한 후에는 다시 시작해야 합니다.

답변2

다음 방법으로 최신 버전으로 강제 업데이트할 수 있습니다.

$ sdk selfupdate force

관련 정보