특정 사용자에 대해 Linux에서 특정 명령을 차단합니다.

특정 사용자에 대해 Linux에서 특정 명령을 차단합니다.

mkdir특정 사용자 에 대한 명령을 차단하는 방법은 무엇입니까 ?

내가 한 일은 읽기 전용 기능을 만들어 사용자 프로필에 저장한 것뿐입니다.~/.bashrc

/bin/mkdir() {
        echo "mkdir command not allow for you"

}

mkdir() {
        echo "mkdir command not allow for you"

}
./mkdir() {

        echo "mkdir command not allow for you"
}

readonly -f /bin/mkdir
readonly -f mkdir
readonly -f ./mkdir

시험:

rahul@ubuntu:~$ cd /bin/
rahul@ubuntu:/bin$ ./mkdir /home/rahul/ggg
mkdir command not allow for you
rahul@ubuntu:/bin$ cd
rahul@ubuntu:~$ mkdir testing
mkdir command not allow for you
rahul@ubuntu:~$ /bin/mkdir testing
mkdir command not allow for you

그래서 내 질문은 이것을 달성하는 방법은 무엇입니까? 이를 수행하는 도구가 있습니까?

업데이트 1 # 하지만 사용자가 똑똑하다면 mkdir 바이너리를 복사하고 이름을 바꿔서 사용할 수 있습니다. 그렇다면 이것을 달성하는 방법은 무엇입니까?

답변1

bash로 이 작업을 수행하는 방법은 모르지만 사용자 환경을 제한하는 또 다른 셸은 알고 있습니다.lshell (제한된 쉘).

구성 빠른 개요

Lshell은 INI 파일을 통해 구성됩니다. 기본적으로 허용되는 명령의 화이트리스트를 유지하지만 사용자가 특정 명령을 사용하지 못하도록 쉽게 구성할 수 있습니다.

이 구성(기본 conf /etc/lshell.conf)은 사용자가 다음을 foo사용하는 것을 금지합니다 mkdir.

[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']

기본적으로 lshell을 사용하도록 사용자 계정을 구성하려면 다음을 수행해야 합니다.

 chsh -s /usr/bin/lshell foo

Lshell은 다음과 같은 훨씬 더 많은 작업을 수행할 수 있습니다.

  • 3가지 세부 수준: 사용자, 그룹, 전체.
  • 시스템의 특정 경로에 대한 액세스가 제한될 수 있습니다.
  • 특정 문자(예 |: )의 사용을 제한할 수 있습니다.
  • SSH를 통해서만 특정 명령의 사용을 제한할 수 있습니다.

그리고 더.

업데이트 1#테스트 결과 추가:

rahul:~$ which bash
/bin/bash
rahul:~$ dd if=$(which bash) of=my_bash
*** forbidden syntax: dd if=$(which bash) of=my_bash
rahul:~$ bash
*** forbidden command: bash
rahul:~$ cp /bin/bash my_bash
*** forbidden path: /bin/bash
rahul:~$ /bin/bash
*** forbidden command: /bin/bash
rahul:~$ sh
*** forbidden command: sh
rahul:~$ dash
*** forbidden command: dash
rahul:~$ env bash
*** forbidden command: env
rahul:~$ cp /bin/mkdir mycreatedir
*** forbidden path: /bin/mkdir

답변2

제가 일반적으로 이 제한을 구현하는 방법에는 몇 가지 조건이 충족되어야 합니다. 그렇지 않으면 제한을 쉽게 우회할 수 있습니다.

  • wheel사용자는 승인된 유일한 그룹 su(PAM을 통해 적용) 에 속하지 않습니다 .
  • 사용자는 간단한 유틸리티에 대한 링크가 포함된 private rbash을 가리키는 읽기 전용 PATH로 적절하게 보호 됩니다.~/bin~/bin/

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • 사용자에게는 제한된 읽기 전용 환경이 제공됩니다(예 LESSSECURE: TMOUT변수 HISTFILE).

  • 이 사용자는 SELinux 사용자로 매핑되며 staff_u필요에 따라 다른 사용자로서 명령을 실행할 수 있는 권한이 부여됩니다 sudo.
  • 사용자 /home및 다음 을 통해 다중 인스턴스화 /tmp가능 :/var/tmp/etc/security/namespace.conf

    /tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root
    /var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root
    $HOME      $HOME/$USER.inst/              tmpdir:create   root
    

    또한 /etc/security/namespace.init모든 스켈레톤 파일을 사용자에게 읽기 전용으로 만들고 root.

이렇게 하면 자신을 대신하여(위에서 설명한 대로 개인 디렉터리의 링크를 통해 , 조항을 통해 ) 다른 사용자를 대신하여(를 통해 ) 실행할 $USER수 있는지 여부를 선택할 수 있습니다.mkdir~/bin/etc/skelsudo

답변3

가상 그룹을 추가하고 그룹에 사용자를 추가 합니다 chown root:somegroup /bin/mkdir. chmod g-x /bin/mkdir이는 사용자가 자신의 그룹을 수정할 수 없다는 점에 유의하세요. IIRC 이는 GNU/Linux에서는 해당되지만 일부 다른 Unices에서는 해당되지 않습니다.

답변4

sudoer를 설치하고 해당 사용자 및 명령을 구성해 보십시오.

관련 정보