ls, rm 및 시스템에 해를 끼칠 수있는 다른 시스템 명령과 같은 명령을 사용자가 사용하지 못하게 할 수 있습니까? 그러나 사용자는 쉘 프로그램을 실행할 수 있어야합니다.
답변
귀하의 질문은 :
내 사용자를 믿지 않습니다. 바보 같은 사람들은 인터넷에서 무언가를보고 그것이 무엇을하는지 이해하지 않고 사용해보십시오. 악의적 인 사람들은 스누핑하고 다른 사람들의 파일을보고 그들의 아이디어를 훔치기를 좋아합니다. 그리고 게으른, 게으른 사람들을 시작하게하지 마십시오.
시스템과 사용자를 사용자로부터 어떻게 보호합니까?
첫째, 유닉스는 매우 포괄적 인 파일 시스템 권한 시스템을 가지고 있습니다. 이것은 유닉스 파일 시스템 권한에 대한 훌륭한 튜토리얼 인 것 같습니다 . 요점은 사용자가 디렉토리로 이동하여 해당 디렉토리에서 프로그램을 실행할 수는 있지만 디렉토리의 내용을 볼 수 없도록 디렉토리를 설정할 수 있다는 것입니다. 예를 들어, / home에서이 작업을 수행하면 사용자가 / home에서 ls를 실행하면 권한 거부 오류가 발생합니다.
사용자가 정말로 무서워서 슈퍼 맥스 유형의 제한된 환경에 갇히고 싶다면 freebsd의 감옥이나 solaris의 영역과 같은 것을 사용하십시오. 각 사용자는 자신 만의 맞춤형 환경을 갖습니다. 추가 된 포인트의 경우 ZFS를 사용하여 로그인 할 때 환경의 스냅 샷을 찍을 수 있으므로 파일을 삭제하면 스냅 샷에서 파일을 가져올 수 있습니다.
답변
원하는 것을 완전히 수행하려면 다음 세 가지가 필요합니다.
- 관심있는 명령이없는 사용자 정의 쉘 . 이것은 어려운 일이지만, 실제로 사용자가 일부 쉘 프리미티브에 액세스하지 못하게하려는 경우이를 제거하는 유일한 방법입니다.
- 파일 권한을 올바르게 설정하십시오 . 사용자가 시스템을 손상시키지 않게 하시겠습니까? 올바른 도구가 있어도 시스템이 손상되지 않도록 권한을 설정하십시오. 이 세 단계 중 가장 쉬운 단계입니다.
- 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
이후까지 su
와 bash
과정이 급부상이의 자녀입니다 /bin/bash-bob
.
어려운 부분은 그 AppArmor 프로파일을 구축하는 것입니다.
- / bin / bash-bob에 대한 AppArmor 프로파일을 작성하고 감사 모드로 설정하십시오.
- Bob의 login-shell을 / bin / bash-bob으로 설정
- Bob으로 로그인하십시오. Bob이 할 수있는 모든 것을하십시오.
- 감사 로그를 사용하여 AppArmor 프로파일을 빌드하십시오 (SUSE에는이를위한 도구가 있지만 다른 Linux 배포판에 대해서는 확실하지 않음). 이것은 매우 지루하지만이 수준의 보안이 필요한 경우 발생해야합니다.
- 당신은 다음과 같은 일을 할 것입니다 :
- 대부분의 시스템 라이브러리에 대한 읽기 액세스 승인
- 선택된 몇 개의 허용 된 시스템 명령에 대한 읽기 및 실행 권한 승인
- 임시 공간에 대한 쓰기 액세스 승인
- 필요한 경우 소켓 생성 승인
- 당신은 다음과 같은 일을 할 것입니다 :
- 시행 할 정책을 설정하십시오.
- Bob으로 로그인하여 작업을 수행하십시오.
- 조정하십시오.
제 생각에는 2 단계와 3 단계 만 필요합니다. 두 단계 모두 신중하게 구성된 상자 외부에서 해로운 것을 수행 할 수 없기 때문에 두 단계 모두 필요합니다.
답변
글쎄, 사용자의 쉘 을 사용자가 특정 쉘 스크립트 만 실행할 수 있도록 작성한 프로그램으로 설정할 수 있습니다.
물론 이것은 프로그램과 쉘 스크립트만큼 안전합니다. 실제로 이러한 종류의 제한된 셸은 일반적으로 스마트 공격자에 대해 안전하지 않습니다.
답변
명령을 시도하거나 제한하지 말고 파일 권한을 제한하십시오. 실제로 시스템 호출에 대한 사람들의 액세스를 제한 할 수는 없으므로 누군가가 수행해야하는 모든 “위험한”명령의 사본을 제공하기 만하면됩니다.
답변
사용자가 특정 스크립트 / 이진 파일 만 실행할 수있게하려면 제한된 쉘을 사용할 수 있습니다 . 이것은 Wikipedia 기사에서 언급했듯이 완전히 안전하지는 않지만 실행할 수있는 응용 프로그램이 새 셸을 실행할 수 없다는 것을 보장 할 수 있다면 좋은 대안입니다.
사용자 제한 쉘을 설정하려면 사용자 쉘로 /bin/rbash
바이너리를 r *** name *으로 지정하면 대부분의 쉘이 제한 모드로 들어갑니다 . 그런 다음 **. bashrc (또는 동등한 항목)를 편집$PATH
하고 허용 된 모든 바이너리 / 스크립트가 저장된 디렉토리로 설정하십시오 .
답변
예, 가능하지만 실제로 많은 작업과 계획이 필요합니다. 스크립트를 작성하여 권한있는 용도로 실행 한 다음 해당 사용자의 모든 권한을 제거 할 수 있습니다. 또는 사용자의 쉘을 자신이 만든 것으로 설정하여 명시 적으로 허용하는 것만 수행 할 수 있습니다.
그러나 리눅스의 표준 권한은 일반 사용자가 “시스템을 손상”시키는 것을 거의 불가능하게합니다. 어떤 종류의 피해를 막으려 고합니까? 사용자가 홈 디렉토리 외부에서 소프트웨어를 설치하거나 프로그램을 실행할 수 없도록하는 것은 사소한 일이며 chroot를 사용하여 시스템을 더 잠글 수 있습니다.
답변
[lshell] [1] (제한된 쉘)을 시도 할 수 있습니다.
lshell은 Python으로 코딩 된 쉘로, 사용자 환경을 제한된 명령 세트로 제한하고 SSH를 통한 명령 (예 : SCP, SFTP, rsync 등)을 활성화 / 비활성화, 사용자 명령 기록, 타이밍 제한 구현, 그리고 더.
[1] : http://lshell.ghantoos.org/ 개요 lshell