쉘 프로그램을 실행할 수 있도록 사용자 쉘을 제한하는 방법 ls, rm 및 시스템에 해를 끼칠 수있는

ls, rm 및 시스템에 해를 끼칠 수있는 다른 시스템 명령과 같은 명령을 사용자가 사용하지 못하게 할 수 있습니까? 그러나 사용자는 쉘 프로그램을 실행할 수 있어야합니다.



답변

귀하의 질문은 :

내 사용자를 믿지 않습니다. 바보 같은 사람들은 인터넷에서 무언가를보고 그것이 무엇을하는지 이해하지 않고 사용해보십시오. 악의적 인 사람들은 스누핑하고 다른 사람들의 파일을보고 그들의 아이디어를 훔치기를 좋아합니다. 그리고 게으른, 게으른 사람들을 시작하게하지 마십시오.

시스템과 사용자를 사용자로부터 어떻게 보호합니까?


첫째, 유닉스는 매우 포괄적 인 파일 시스템 권한 시스템을 가지고 있습니다. 이것은 유닉스 파일 시스템 권한에 대한 훌륭한 튜토리얼 인 것 같습니다 . 요점은 사용자가 디렉토리로 이동하여 해당 디렉토리에서 프로그램을 실행할 수는 있지만 디렉토리의 내용을 볼 수 없도록 디렉토리를 설정할 수 있다는 것입니다. 예를 들어, / home에서이 작업을 수행하면 사용자가 / home에서 ls를 실행하면 권한 거부 오류가 발생합니다.

사용자가 정말로 무서워서 슈퍼 맥스 유형의 제한된 환경에 갇히고 싶다면 freebsd의 감옥이나 solaris의 영역과 같은 것을 사용하십시오. 각 사용자는 자신 만의 맞춤형 환경을 갖습니다. 추가 된 포인트의 경우 ZFS를 사용하여 로그인 할 때 환경의 스냅 샷을 찍을 수 있으므로 파일을 삭제하면 스냅 샷에서 파일을 가져올 수 있습니다.


답변

원하는 것을 완전히 수행하려면 다음 세 가지가 필요합니다.

  1. 관심있는 명령이없는 사용자 정의 쉘 . 이것은 어려운 일이지만, 실제로 사용자가 일부 쉘 프리미티브에 액세스하지 못하게하려는 경우이를 제거하는 유일한 방법입니다.
  2. 파일 권한을 올바르게 설정하십시오 . 사용자가 시스템을 손상시키지 않게 하시겠습니까? 올바른 도구가 있어도 시스템이 손상되지 않도록 권한을 설정하십시오. 이 세 단계 중 가장 쉬운 단계입니다.
  3. AppArmor와 같은 필수 액세스 제어 기술을 사용하십시오 . AppArmor 및 SELinux와 같은 MAC은 커널에 권한을 포함합니다. 이를 통해 사용자는 어딘가에있는 도구를 찾더라도 올바른 도구를 실행할 수 없습니다 (파일 권한과 같이 제한된 상자 외부에서 도구를 사용하지 못하도록 방지).

벨트, 멜빵 및 스테이플 건을 잘 측정하십시오. 거기에 잘못 가기가 어렵습니다.

AppArmor는 특정 실행 파일의 MAC이 모든 하위 항목에서 상속되므로 흥미 롭습니다. 사용자의 로그인을로 /bin/bash-bob설정하고 해당 특정 바이너리 권한에 대한 AppArmor 프로파일을 설정하십시오.이 권한을 벗어나는 유일한 방법은 커널 악용을 통한 것입니다. 게으른 설치 스크립트가 /var/opt/vendor/tmp어리석은 이유로 전역 쓰기 가능으로 남겨둔 경우 , /bin/bash-bob쉘로 사용하는 사용자 는 거기에서 쓸 수 없습니다 . 홈 디렉토리에 쓰기 만 허용하도록 bash-bob 프로필을 설정하면 /tmp이러한 권한 실수를 활용할 수 없습니다. 그들은 어떻게 든 루트 암호를 발견하더라도, 대한 AppArmor의 프로파일은 /bin/bash-bob여전히 후에도 적용됩니다 su이후까지 subash과정이 급부상이의 자녀입니다 /bin/bash-bob.

어려운 부분은 그 AppArmor 프로파일을 구축하는 것입니다.

  1. / bin / bash-bob에 대한 AppArmor 프로파일을 작성하고 감사 모드로 설정하십시오.
  2. Bob의 login-shell을 / bin / bash-bob으로 설정
  3. Bob으로 로그인하십시오. Bob이 할 수있는 모든 것을하십시오.
  4. 감사 로그를 사용하여 AppArmor 프로파일을 빌드하십시오 (SUSE에는이를위한 도구가 있지만 다른 Linux 배포판에 대해서는 확실하지 않음). 이것은 매우 지루하지만이 수준의 보안이 필요한 경우 발생해야합니다.
    1. 당신은 다음과 같은 일을 할 것입니다 :
      • 대부분의 시스템 라이브러리에 대한 읽기 액세스 승인
      • 선택된 몇 개의 허용 된 시스템 명령에 대한 읽기 및 실행 권한 승인
      • 임시 공간에 대한 쓰기 액세스 승인
      • 필요한 경우 소켓 생성 승인
  5. 시행 할 정책을 설정하십시오.
  6. Bob으로 로그인하여 작업을 수행하십시오.
  7. 조정하십시오.

제 생각에는 2 단계와 3 단계 만 필요합니다. 두 단계 모두 신중하게 구성된 상자 외부에서 해로운 것을 수행 할 수 없기 때문에 두 단계 모두 필요합니다.


답변

글쎄, 사용자의 쉘사용자가 특정 쉘 스크립트 만 실행할 수 있도록 작성한 프로그램으로 설정할 수 있습니다.

물론 이것은 프로그램과 쉘 스크립트만큼 안전합니다. 실제로 이러한 종류의 제한된 셸은 일반적으로 스마트 공격자에 대해 안전하지 않습니다.


답변

명령을 시도하거나 제한하지 말고 파일 권한을 제한하십시오. 실제로 시스템 호출에 대한 사람들의 액세스를 제한 할 수는 없으므로 누군가가 수행해야하는 모든 “위험한”명령의 사본을 제공하기 만하면됩니다.


답변

사용자가 특정 스크립트 / 이진 파일 만 실행할 수있게하려면 제한된 쉘을 사용할 수 있습니다 . 이것은 Wikipedia 기사에서 언급했듯이 완전히 안전하지는 않지만 실행할 수있는 응용 프로그램이 새 셸을 실행할 수 없다는 것을 보장 할 수 있다면 좋은 대안입니다.

사용자 제한 쉘을 설정하려면 사용자 쉘로 /bin/rbash바이너리를 r *** name *으로 지정하면 대부분의 쉘이 제한 모드로 들어갑니다 . 그런 다음 **. bashrc (또는 동등한 항목)를 편집$PATH 하고 허용 된 모든 바이너리 / 스크립트가 저장된 디렉토리로 설정하십시오 .


답변

예, 가능하지만 실제로 많은 작업과 계획이 필요합니다. 스크립트를 작성하여 권한있는 용도로 실행 한 다음 해당 사용자의 모든 권한을 제거 할 수 있습니다. 또는 사용자의 쉘을 자신이 만든 것으로 설정하여 명시 적으로 허용하는 것만 수행 할 수 있습니다.

그러나 리눅스의 표준 권한은 일반 사용자가 “시스템을 손상”시키는 것을 거의 불가능하게합니다. 어떤 종류의 피해를 막으려 고합니까? 사용자가 홈 디렉토리 외부에서 소프트웨어를 설치하거나 프로그램을 실행할 수 없도록하는 것은 사소한 일이며 chroot를 사용하여 시스템을 더 잠글 수 있습니다.


답변

[lshell] [1] (제한된 쉘)을 시도 할 수 있습니다.

lshell은 Python으로 코딩 된 쉘로, 사용자 환경을 제한된 명령 세트로 제한하고 SSH를 통한 명령 (예 : SCP, SFTP, rsync 등)을 활성화 / 비활성화, 사용자 명령 기록, 타이밍 제한 구현, 그리고 더.

[1] : http://lshell.ghantoos.org/ 개요 lshell