SELinux - CentOSx86_64: 사용자 명령 제한 사항

SELinux - CentOSx86_64: 사용자 명령 제한 사항

SELinux - CentOSx86_64: 사용자 명령 제한 사항

SELinux가 해당 작업에 적합한 도구인가요? 그렇다면 가장 좋은 접근 방식은 무엇입니까?

특정 사용자가 미리 정의된 일부 명령/스크립트 목록(아마도 홈 디렉터리에서)만 실행하도록 제한하고 싶습니다. 또한 사용자 스크립트에는 사용자가 직접 실행할 수 없는 명령을 실행할 수 있는 권한이 있을 수 있습니다. 예를 들어 userscript test.sh는 "ping localhost"를 호출할 수 있지만 사용자는 명령줄에서 직접 "ping localhost"를 호출할 수 없습니다. 이러한 제한 사항에는 하나의 사용자 계정만 필요하다고 생각한다는 점을 언급할 가치가 있습니다(다른 사용자 계정에 대해 여러 개의 다른 구성이 필요하지 않음).

운영 체제는 CentOSx86_64입니다. 다음과 같이 SELinux를 활성화합니다.

SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

저는 SELinux를 처음 사용하지만 다음을 시도했습니다.

(1) 나는 MLS 정책이 가장 적합할 것이라고 생각합니다(이 링크는 유망해 보입니다:http://www.centos.org/docs/5/html/Deployment_Guide-en-US/sec-mcs-getstarted.html) 이 작업을 위해 먼저 열어 보았습니다. "SELinux 관리 GUI"에는 대상 정책을 변경할 수 있는 옵션이 제공되지 않아 /etc/selinux/config를 직접 변경해 보았습니다. 재부팅 후 "커널 패닉"이 발생하여 원래 설치 전략(예: 대상 지정)을 사용하기로 결정했습니다.

(2) SELinux 관리 GUI에서 "최소 최종 사용자 역할" 정책 유형으로 새 정책을 만들었습니다. "이름"은 "제한된 사용자"라고 부르겠습니다. 나는 그것이 전환될 역할을 선택하지 않았습니다. 나는 다른 역할을 선택하지 않았습니다. 바인딩/연결할 "모든" TCP 및 UDP 포트를 선택했습니다. 전략에 부울 값을 추가하지 않았습니다. 생성된 .sh를 실행한 후 새 SELinux 사용자 및 역할이 생성되었습니다. 그런 다음 "제한된 사용자"에 로그인을 할당했습니다. 예상대로 이는 매우 제한된 권한을 가진 사용자를 제공합니다.

(3) 처음에 이 새 사용자는 홈 디렉터리에 스크립트를 생성할 수 있지만 실행할 수는 없습니다. "allow_guest_exec_content"라는 부울을 설정한 후 사용자는 스크립트를 실행할 수 있습니다. 처음에는 스크립트에 "echo"만 포함되어 있었지만 이를 ping으로 변경하자 다시 실패했습니다. 이 새로운 사용자가 "ping"할 수 있도록 하기 위해 부울 user_ping을 선택 취소했습니다(비록 이것은 user_u에만 적용되고 guest_u에는 적용되지 않는다고 생각합니다). 내가 원하는 것을 수행하기 위해 다른 옵션은 "user_u"를 기반으로 유형을 정의한 다음 권한을 제거하는 것일 수도 있다고 생각했습니다(guest_u 기반 유형을 사용하고 권한을 추가하는 제가 취한 접근 방식 대신). 아니, 난 이걸 어떻게 해야할지 모르겠어!).

(4) 많은 온라인 리소스에서 src 디렉터리에 있는 정책 파일에 대해 논의하고 있지만 파일이 설치되어 있지 않으며 이를 추가하려면 어떤 패키지를 설치해야 할지 알 수 없습니다. 다음 selinux 관련 패키지를 설치했습니다.

libselinux.x86_64                   2.0.94-5.3.el6                     installed
libselinux-devel.x86_64             2.0.94-5.3.el6                     installed
libselinux-python.x86_64            2.0.94-5.3.el6                     installed
libselinux-utils.x86_64             2.0.94-5.3.el6                     installed
selinux-policy.noarch               3.7.19-126.el6_2.4                 @updates 
selinux-policy-targeted.noarch      3.7.19-126.el6_2.4                 @updates 
setools-console.x86_64              3.3.7-4.el6                        @base    
setools-devel.x86_64                3.3.7-4.el6                        @base    
setools-gui.x86_64                  3.3.7-4.el6                        @base    
setools-libs.x86_64                 3.3.7-4.el6                        @base    
setools-libs-java.x86_64            3.3.7-4.el6                        @base    
setools-libs-python.x86_64          3.3.7-4.el6                        @base    
setools-libs-tcl.x86_64             3.3.7-4.el6                        @base 

(5) 나는 또 다른 제한된 껍질을 연구했습니다.http://lshell.ghantoos.org/하지만 우리 회사에서는 SELinux를 사용하거나 운영 체제에서 이미 제공하는 기능(예: bash 제한)을 사용해야 하는데 이는 그다지 안전하지 않을 수 있습니다.

다음과 같은 사용자 지정 정책을 정의해야 한다고 생각합니다.

(a) 사용자가 자신의 홈 디렉터리에 있는 파일을 실행할 수 있도록 허용합니다.

(b) 사용자에게 권한이 없는 명령을 실행하기 위해 사용자 스크립트를 다른 유형으로 캐스팅할 수 있도록 허용합니다.

SELinux 관리 GUI(및 내가 알고 있는 구성 파일)를 사용하여 이 작업을 수행하는 방법을 모르겠습니다.

당신이 제공할 수 있는 도움에 감사드립니다.

답변1

제안한대로 rbash원하는 것을 어느 정도 제공합니다. 이는 이미 PATH에 있는 실행 파일로만 실행을 제한하고 런타임 환경의 대부분 세부 사항을 변경하는 것을 금지합니다. 그러나 물론 어떤 프로그램에 액세스 권한을 부여할지 매우 주의하지 않는 한 누군가가 이를 해킹하기가 매우 쉽습니다(perl이나 Python과 같은 인터프리터에 액세스 권한을 부여하면 끝입니다).

또 다른 전통적인 솔루션에는 일반적으로 chroot 및/또는 신중하게 선택한 설치 옵션이 포함됩니다. 이러한 기능을 비활성화하는 파일 시스템 noexec또는 을 마운트할 수 있습니다. nosuid따라서 쓰기 가능한 파일 시스템을 마운트하면 noexec읽기 전용 시스템이 아닌 프로그램의 실행이 방지됩니다. 이를 결합하여 수행할 수 있는 작업을 면밀히 제어하는 ​​특별한 chroot 환경을 만들 수 있습니다.

관련 정보