다시 시작한 후 /opt/etc/profile 파일의 내용을 로드합니다.

다시 시작한 후 /opt/etc/profile 파일의 내용을 로드합니다.

OpenWrt 저장소가 연결된 BusyBox v1.19.4를 실행하는 ZyXEL NAS326 네트워크 드라이브가 있습니다. 재부팅할 때마다 시스템은 OpenWrt 바이너리 경로를 볼 수 없으며 명령 기록도 기억하지 않습니다. 명령을 실행 . /opt/etc/profile한 다음 재부팅하더라도 명령 기록이 없고 OpenWrt 바이너리에 대한 경로도 없습니다. 이 NAS의 기본 콘솔은 ash입니다. 콘솔에 항상 활성 명령 기록이 있고 경로에서 OpenWrt bianrium에 액세스할 수 있도록 시스템을 구성하려면 어떻게 해야 합니까?

답변1

따라서 먼저 busybox/ash가 기록을 저장하는지 여부는 컴파일 타임 옵션입니다. 즉, .ash_history적어도 하나의 명령을 실행한 후 홈 디렉터리에 파일이 없으면 할 수 있는 일이 많지 않습니다. 실제로 해당 기능을 갖고 있는 또 다른 쉘입니다. 나는 이것이 어쨌든 귀하의 사용 사례에 합리적일 수 있다고 말하고 싶습니다. "명령 기록을 원합니다"는 단지 "무언가를 수정하기 위해 이 셸을 여러 번 사용했습니다"라고 말하며 이는 이것이 ash실제로 최고의 대화형 셸이 아님을 의미합니다. 얇고 가벼워지기 위한 것이지 데스크탑 케이스를 완전히 대체하기 위한 것이 아닙니다!

그 다음에:

명령을 사용하여 /home/test.txt 파일을 생성 touch /home/test.txt하고 그 안에 12345 내용을 입력했습니다. 재부팅 후 파일이 사라집니다

홈 디렉토리가 영구적이지 않기 때문에 실제로 쉘 기록을 저장할 장소가 없습니다! (일반적으로 에 저장되지만 ~/.ash_history, 아시다시피 영구 저장소에 기록되지 않고 RAM 오버레이에 남아 있을 수 있으며 재부팅 시 저장할 수 없습니다.)

다행히도 대부분의 셸에서는 HISTFILE환경을 사용하여 다른 위치를 설정할 수 있습니다. Busybox는 이를 문서화하지 않지만 적어도 현재 버전의 코드에서는 변수를 존중합니다. 하지만 NAS에서 어떤 버전과 옵션이 실행되고 있는지는 아무도 모릅니다! (그러한 시스템에서는 zsh와 같이 덜 간소화된 쉘을 실행하고 싶을 수도 있다는 또 다른 신호입니다.)

콘솔에 항상 활성 명령 기록이 있고 경로에서 OpenWrt bianrium에 액세스할 수 있도록 시스템을 구성하려면 어떻게 해야 합니까?

/etc에 지속적으로 쓸 수도 없으므로 동의합니다. 그렇게 할 수 없으며, 어떻게 해야 할지 알아내기 전까지는 아마 할 수 없는 일이 될 것입니다. (재부팅 시 루트 파일 시스템이 동일한 공장 상태에 있다는 것을 항상 알고 있다면 소비자 장치의 신뢰성이 떨어지고 보안 취약점이 노출된 후 지속적으로 무단 액세스를 얻는 것이 더 어려워질 수 있습니다. 분명히 NAS는 그렇지 않습니다.~해야 한다터미널 서버가 되어보세요! )

이 openwrt 저장소가 어떻게 작동하는지 모르겠지만 자체 문서가 있을 것입니다. 이런 방식으로 설치된 소프트웨어는 /etc 대신 /opt/etc를 볼 가능성이 높으므로 사용자의 쉘을 변경할 수 있는 경우(사용 chsh) openwrt를 통해 /opt/bin에 뭔가 설치되어 있다면 적어도 구성할 수 있을 것입니다.

그 외에 당신이 할 수 있는 일은 SSH 서버(또는 로그인에 사용하는 모든 것)에서 두 가지 환경 변수(예: HISTFILE사용자가 액세스할 수 있는 위치를 가리킴)를 지정하고 그것이 지속되기를 바라는 것뿐입니다. 재부팅) 및 실행하려는 명령 - 그런 다음 다음과 같은 작업을 수행할 수 있습니다.

env 'HISTFILE=/path/to/persistent/storage/on/NAS/.zsh_history' \
    ssh \
      -o SendEnv=HISTFILE \
      -t \
      youruser@NAS_hostname_or_IP_address \
      /path/to/openwrt-installed/zsh/on/NAS/zsh

귀하의 컴퓨터에서 1. openwrt와 함께 설치된 "올바른" 쉘을 사용하고 있는지 확인하십시오. zsh이는 확실히 기록을 저장합니다. 2. 기록을 저장하기 위해 영구 경로를 사용합니다.


문제는 /etc/profile 파일 템플릿이 어디에서 왔는가입니다. 처음에는 PATH 섹션에 항목이 있었는데 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:${BASE_PATH}/sbin:/usr/local/zy-pkgs/bin:${BASE_PATH}/htp수정 후 다음과 같이 보였습니다. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:${BASE_PATH}/sbin:/usr/local/zy-pkgs/bin:${BASE_PATH}/htp:/opt/bin재부팅 후 모든 것이 이전 상태로 돌아갔습니다.

Zyxel이 운영 체제 이미지를 구축하는 방법을 확인해야 합니다. 기회를 잡은 건 바로 너야할 수 있다동일한 작업을 수행하고 필요한 수정을 하십시오!

이것마벨 데모(SoC(NAS의 기반이 되는 중앙 처리 장치)를 구축하는 회사인 Marvell은 전체 OpenEmbedded/Yocto 트리를 제공하여 통합업체(예: Zyxel)가 정확한 사용 사례에 맞는 Linux 배포판을 구축할 수 있다고 말합니다. Zyxel이 이를 사용하고, 필요한 레이어를 수정하고, 자체 소프트웨어를 추가하고, 이를 사용하여 이미지를 구축할 가능성은 거의 없습니다. 이제 Zyxel은 대중 시장 네트워킹 장비의 대규모 공급업체이므로 보안 사고로 인한 비용이 매우 높습니다. 위의 경우에 대해 아주 좋은 이유가 있습니다. 서명된 펌웨어만 부팅할 수 있도록 SecureBoot를 잠갔을 가능성이 높습니다. 이는 아마도 전혀 고칠 수 없는 문제일 것입니다. 적절한 암호화를 사용하면 하드웨어가 수정된 시스템과 수정되지 않은 시스템을 구별할 수 있습니다. 이미지.

따라서 수정된 /etc를 사용하여 이와 같은 이미지를 빌드하면 서명할 수 없기 때문에 부팅할 수 없을 가능성이 높습니다. 그것은 모두 Zyxel이 시스템에 얼마나 잠겨 있는지에 달려 있습니다.


솔직히 말해서 나는 그래아니요소형 NAS 장치의 루트 시스템이 제가 원하는 쉘 기록이 맞나요? 완전한 데스크톱에서와 마찬가지로 대화형 셸을 실행할 수 있도록 공급업체의 앱 스토어에서 컨테이너 또는 이와 유사한 격리된 환경을 설치할 수 있는지 여부와 방법을 파악하려고 하는 것 같습니다. 하지만. 솔직히 말하기. RAM이 512MB에 불과한 1.3GHz 단일 코어 ARMv7입니다(저장 장치에 비해 매우 작음). Zyxel이 DMA 네트워크를 통한 스토리지 액세스 최적화에 많은 노력을 기울였으면 좋겠습니다. 그렇지 않으면 이미 파일에 액세스할 때 정상적인 네트워크 속도의 균형을 유지해야 하는 무거운 부담을 안고 있고 이것이 여러분이 선택할 플랫폼이라고 생각하지 않습니다. . 달리고 싶다아무것다른 사람.


1 향후 임베디드 개발 독자를 위해 자신만의 비지박스를 컴파일하십시오. 컴파일 시간 옵션은 입니다 ENABLE_FEATURE_EDITING_SAVEHISTORY.

관련 정보