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/skel
sudo
답변3
가상 그룹을 추가하고 그룹에 사용자를 추가 합니다 chown root:somegroup /bin/mkdir
. chmod g-x /bin/mkdir
이는 사용자가 자신의 그룹을 수정할 수 없다는 점에 유의하세요. IIRC 이는 GNU/Linux에서는 해당되지만 일부 다른 Unices에서는 해당되지 않습니다.
답변4
sudoer를 설치하고 해당 사용자 및 명령을 구성해 보십시오.