Linux는 쉘 없이도 작동할 수 있나요? [폐쇄]

Linux는 쉘 없이도 작동할 수 있나요? [폐쇄]

제가 속한 팀은 머신 제어를 위한 프로토타입 시스템(여러 C++ 프로그램, Ubuntu Server 16.04에서 실행되는 일부 IPC, 네트워크 및 장치 I/O) 구축을 막 마쳤습니다. 모든 것은 부팅 시 systemd에 의해 시작되고 관리되며 거의 자체 조정되므로 사용자 개입이 필요하지 않습니다.

이제 우리는 시스템을 검사, 복사 또는 도용하려는 사람들로부터 시스템을 보호하려고 합니다(그들이 정말로 원한다면 컴퓨터에 액세스할 수 있습니다). 우리가 고려한 접근 방식 중 하나는 필요하지 않고 해커가 시스템을 조작하기 더 어렵게 만드는 셸/터미널을 Linux에서 제거하는 것이었습니다. 우리 대부분은 중간 수준의 Linux 시스템 관리 경험을 가진 응용 프로그램 프로그래머이므로 다음과 같은 질문이 있습니다.

  1. 첫째, 실제로 가능합니까? 이를 명확히 하기 위해 사용자가 와 같은 명령을 실행할 수 있도록 하는 모든 것을 제거하려고 합니다 cd, cat, ls, apt-get, scp.

  2. 가능하다면 이는 바람직하며 실제로 시스템 보안이 향상됩니다. 이 작업을 수행하면 다른 장점이나 단점이 있나요? 다른 옵션이 있나요?

  3. 이것이 어떻게 달성될 수 있습니까?

답변1

셸을 비활성화하면 공격 표면이 제한될 수 있지만 /usr/bin에서 읽기 액세스를 제한하는 것이 훨씬 쉽습니다. 사용자의 쉘 ​​액세스를 제한하려면 로그인 쉘을 /sbin/nologin으로 설정하는 것이 효과적입니다. 터미널에서 수행할 수 있는 작업을 제한하려는 경우 다음을 수행하세요.

  • 보안 부팅과 함께 eistub를 사용하세요.

우분투는 이미 이런 상태여야 합니다.

  • initram에서 복구 쉘을 비활성화합니다.

여기에는 initram 추출, init 스크립트 편집, 복구 기능에서 셸 호출 제거가 포함됩니다.

  • 시스템에서 tty를 비활성화합니다.

왜냐하면 당신은 systemd를 사용하기 때문입니다.

systemctl disable [email protected]

시스템과 전혀 상호 작용할 수 없습니다. 원격 또는 로컬 유지 관리가 가능한 보안 부팅이 활성화된 두 번째 시스템을 사용할 수 있습니다. 그렇지 않으면 하드 드라이브를 제거하고 chroot를 사용하여 다른 시스템에서 이를 수정해야 합니다.

이는 ptty가 생성되는 것을 방지하지 않으며 이는 SSH가 계속 작동함을 의미합니다.

답변2

글쎄요, 기술적으로 Linux는 단지 커널일 뿐이며 어떤 쉘도 필요하지 않습니다. 하지만 유용한 작업을 수행하려면 사용자 공간에서 무언가를 실행해야 합니다. 필요한 모든 것을 하나의 프로세스로 통합할 수 있다면 이를 /sbin/init다음으로 대체할 수 있습니다.다른 사람은 없어시스템의 사용자 공간 프로세스.

실제로 udev는 DHCP 클라이언트와 같은 동등한 다른 파이프가 필요할 수도 있습니다. (정적 IPv4 구성은 커널 명령줄에서 설정할 수 있습니다.)

/etc/init.d/전통적인 sysvinit 스타일 초기화를 사용하면 모든 것이 셸 스크립트( 에서 링크된 의 스크립트 /etc/rc*.d)에 의존하므로 이를 사용하는 것이 올바른 방법입니다. 하지만systemd의 주요 포인트 중 하나쉘에 너무 많이 의존하지 않으므로 이것이 가능하다는 것입니다.만약에실행하는 모든 서비스에는 시스템 단위 파일( init.d스크립트 아님)이 있으며 다른 용도로 셸 스크립트를 사용하지 않습니다.

Ubuntu 시스템(17.10)에는 최소한 console-setup, keyboard-setupPostfix가 있고 해당 유닛 파일에 쉘 스크립트가 있는 것 같습니다. 처음 두 개는 쉘 없이 콘솔에 로그인하지 않기 때문에 중요하지 않을 수 있지만, 이를 필요로 하는 다른 사람들이 있을 수도 있습니다...

쉘 없는 시스템이 정말로 필요하다면 아마도 처음부터 시작하거나 Ubuntu와 같은 성숙한 시스템보다 단순한 시스템으로 시작할 것입니다. 그래도 /bin/sh제거하고 시스템이 얼마나 멀리 가는지 확인하는 것은 흥미로운 실험이 될 것입니다.


당신은 이 일을 하는 동기 중 하나로 안전을 언급했습니다. 셸이 없으면 셸 실행에 의존하는 모든 셸코드가 실패하게 되어 잠재적으로 더 간단한 공격을 방지할 수 있습니다. 그러나 원칙적으로 공격자가 임의의 코드를 실행할 수 있는 경우 셸 없이 원하는 작업을 수동으로 수행하거나 시스템에 셸을 로드하고 실행하는 것을 막을 방법은 없습니다. 공격자가 얼마나 많은 시간을 사용할 준비가 되어 있는지가 문제일 뿐입니다.

쉘리스 시스템의 한 가지 분명한 단점은 구성하기가 더 어렵다는 것입니다. 로그인하여 편집기를 시작하거나 서비스를 다시 시작할 수 없기 때문입니다. 변경 사항을 적용하려면 "복구 디스크"에서 시스템을 부팅하거나 시스템을 완전히 재구축해야 합니다.

시스템에 로그인하는 일반적인 방법( getty가상 콘솔, SSH 등)을 비활성화해도 공격자를 효과적으로 막을 수는 없습니다. 그들은 시스템에 로그인을 허용하도록 선의로 요청하기보다는 실행 중인 모든 서비스의 버그를 악용할 가능성이 더 높습니다.

답변3

내 첫 번째 옵션은 화면에서 tty를 비활성화하고 ssh를 비활성화/제한하여 기본적으로 로그인할 항목이 없도록 하는 것이었습니다. https://askubuntu.com/questions/357039/how-do-i-disable-virtual-consoles-tty1-6

또 다른 가능성은 사용자 자신의 로그인을 비활성화하는 것입니다. 보안상의 이유로 사용자 셸 비활성화

관련 정보