Rootfs 권한 설계

Rootfs 권한 설계

루트 파일 시스템의 디자인 권한이 비지박스(빌드루트 환경)가 있는 임베디드 장치를 어떻게 찾아야 하는지 궁금합니다. 다수의 일반 사용자가 SSH를 사용하여 시스템에 로그인할 수 있습니다.

내 초기 생각은 x(관리자는 루트 그룹에 액세스할 수 있음)와 /etc, /usr 폴더, /root(이 경우 x는 설정되지 않음)에 대한 기타 권한을 제외한 모든 그룹 권한을 제거하는 것이었습니다. /bin 폴더는 755로 설정되는데, 비지박스 바이너리에 set-uid 비트가 켜져 있어서 걱정됩니다.

이러한 리소스를 모두 차단한 후 특정 파일에 대해 ACL을 명시적으로 설정하는 것을 고려했습니다.

현재 열려 있는 포인트는 다음과 같습니다.

  • 일반 사용자가 액세스할 수 있는 시스템 리소스는 무엇입니까? /bin 폴더에 대해 확신합니다. 하지만 /usr, /var 등과 같은 다른 폴더는 어떻습니까?
  • /bin/sh -> (-rwsr-xr-x) /bin/busybox 백도어와 관련하여 무엇을 고려해야 합니까? 일반 사용자가 (set-uid) 쉘을 실행하지 못하도록 방지하는 방법(잘 모르겠지만 유효한 uid가 busybox에서 삭제될 수도 있음)
  • /lib 폴더는 어떻습니까? 일반 사용자가 사용하는 라이브러리에 대한 ACL을 명시적으로 정의해야 합니까? 아니면 더 간단한 해결책이 있습니다.
  • sysfs 및 procfs의 권한을 제한해야 합니까, 아니면 전체 시스템이 중단됩니까?

어떤 조언이라도 감사하겠습니다.

답변1

이미 선택 또는 이에 상응하는 권한 설계에 대해 충분히 알고 있는 것 같습니다 /home/user1. 당신이 묻고 있는 것은나머지체계적인. 여기에는 적어도 관련 주제에 대한 토론이 이미 있습니다.


x를 제외한 모든 /etc, /usr 폴더에 대한 그룹 권한 및 기타 권한을 제거합니다. 하지만 /usr, /var 등과 같은 다른 폴더는 어떻습니까?

시스템 디렉터리에 대한 Unix DAC 권한을 살펴보고 제공된 기본값보다 더 제한적으로 만드는 것은 일반적인 전략이 아닙니다. (사용자의 홈 디렉터리에 대한 권한은 제외됩니다. 일반적으로 구성 설정이 있습니다.) 이렇게 광범위한 질문에 답할 수 있는 유일한 방법은 다음과 같습니다.

루트 파일 시스템의 디자인 권한은 어떻게 생겼습니까?

- 시스템 디렉터리에 대한 표준 DAC 권한을 사용해야 합니다. 원하는 경우 선호하는 Linux 배포판을 확인할 수 있습니다. 당신은 또한 볼 수 있습니다FHS, 일부 최신 업데이트가 누락되었을 수 있습니다.

구체적으로 buildroot를 입력하세요.가능한이를 변경하는 것이 더 가능해집니다. 하지만 그렇다고 해서 "해야 한다"는 뜻은 아닙니다!


usermod -aG root누군가 관리자로서 액세스할 수 있으므로 보안 루트 그룹(추가 권한 없음)을 갖고 싶습니다 .

권장되지 않습니다. useradd때문에 무제한을 허용할 수 없으므로 useradd -u 0어쨌든 스크립트 등을 래핑해야 합니다. (예를 들어 관리자가 래퍼 스크립트를 루트로 실행할 수 있도록 sudoer를 설정합니다.) 더 나은 방법은 래퍼 스크립트를 제공 usermod하고 스크립트 내에서 보호하는 것입니다. 그러면 루트가 아닌 다른 "시스템" 그룹(데몬 계정)에 대한 공격도 방지할 수 있습니다.

"일반 사용자"(www-data 옆)는 ssh를 사용하여 로그인할 수 있습니다.

보안 다중 사용자 Unix 계열 시스템을 실행하려고 하는 것 같습니다. 이것이 질문의 가장 중요한 부분입니다.

이 일반적인 질문은 너무 광범위하여 여기서 질문하고 명확한 답변을 얻을 수 없습니다.

사용자가 완전히 신뢰할 수 없는 경우 정직한 대답은 신뢰할 수 없다는 것입니다. 다양한 절충안, 전략, 전술이 있습니다.

이 질문은 실제로 "임베디드 장치, 비지박스 온보드(빌드루트 환경)"에만 국한되지 않습니다. 하지만 이로 인해 쉽게 사용할 수 있는 전략이 좁아질 수 있습니다.

특히, buildroot를 사용하면많은보안 업데이트를 구현하려면 Debian Linux와 같은 표준 바이너리 배포판보다 더 많은 작업이 필요합니다.

여러분이 볼 수 있는 무료 소프트웨어 배포판 중에서 buildroot가 매우 안전한 다중 사용자 Linux 시스템을 대상으로 한다는 것은 의심스럽습니다. :-). (다중 사용자 웹 서버 또는 대학 및 일부 유사한 환경에서 사용되는 다중 사용자 PC).

대부분의 대규모 조직에는비슷한내부 다중 사용자 시스템 관련 문제. 그러나 그들이 사용하는 가장 간단한 방법은 사용자가 실제로 프로그램을 실행할 수 있는 대규모 다중 사용자 Unix(또는 Windows :-) 인스턴스를 하나도 실행하지 않는 것입니다!

이것흔한이와 같은 상황은 실제로 여러 직원이 사용할 수 있는 데스크톱 컴퓨터("핫 데스킹" 또는 단순히 여러 교대 근무)가 있는 상황입니다. 여기에 있는 일부 공통 컨트롤은 Microsoft 비즈니스 모델("그룹 정책") 또는 더 넓은 Windows 에코시스템의 핵심 부분이며, 일부는 무료 소프트웨어와 동등한 것으로 사용할 수 없습니다.

가장 강력한 제어 중 하나는 애플리케이션 화이트리스트입니다. 사용자에게 완전한 프로그래밍/스크립팅 환경(예: Unix 셸)을 제공하는 것은 상대적으로 위험이 높습니다. 일반적으로 필요하지 않습니다. (그리고 시스템은 확실히 이에 대한 액세스를 거부하도록 설계될 수 있습니다.)

나는 비지박스 바이너리가 set-uid 비트가 켜져 있기 때문에 두렵다.

일부 busybox 애플릿은 표준 명령이며 예상대로 작동하려면 setuid 루트가 필요합니다. 이는 보안을 위해 설계되었으며 공식적으로 지원됩니다.

config FEATURE_SUID
bool "대부분의 애플릿의 SUID 상태 제거"
기본
도움말

이 옵션을 사용하면 suid 비트가 설정된 루트에 속하는 비지박스 바이너리를 설치할 수 있어 일반 사용자가 실행할 때에도 특정 애플릿이 루트 수준 작업을 수행할 수 있습니다(예: fstab 작동에서 사용자 마운트를 마운트하는 데 필요합니다).

이 옵션이 활성화되면 busybox는 main() 함수에 들어가기 전에 루트 액세스가 필요하지 않은 애플릿에 대한 권한을 제거합니다.

편집증이 심하고 각 애플릿의 초기 비지박스 코드가 루트에서 실행되는 것을 원하지 않는 경우에는 서로 다른 애플릿(및 각 바이너리에 대한 적절한 심볼릭 링크)이 포함된 두 개의 비지박스 바이너리를 빌드하고 필요한 사용자에게만 제공하십시오.

루트 권한이 필요한 일부 작은 프로그램(바이너리에서 suid 비트가 있거나 루트로 실행되어야 함)은 그렇지 않으면 실행을 거부합니다: crontab, login, passwd, su, vlock, wall.

루트 권한이 있는 경우 애플릿은 루트 권한을 사용하지만(suid 비트를 통해 또는 루트에 의해 실행되기 때문에) 여전히 루트 권한 없이 작동하려고 시도합니다: findfs, ping[6], Traceroute[6], 산.

이 옵션을 선택하지 않고 busybox suid 루트를 만들면 모든 애플릿이 루트에서 실행됩니다. 이는 보안상의 큰 허점입니다("cp /some/file /etc/passwd" 생각).

관련 정보