제한된 셸을 사용하여 Linux 사용자가 할 수 있는 작업을 제한하는 방법

게시 됨: 2022-01-29
Linux 시스템의 터미널 창.
Fatmawati Achmad Zaenuri/Shutterstock

제한된 셸은 사용자 계정이 Linux에서 수행할 수 있는 작업을 제한합니다. 제한된 사용자는 디렉토리를 변경할 수 없으며 액세스 권한이 있는 명령을 제어할 수 있습니다. Linux에서 제한된 셸을 설정하는 방법은 다음과 같습니다.

제한된 껍질

제한된 셸은 다른 셸이 아닙니다. 표준 쉘의 다른 모드입니다. Bash, Korn, Fish 및 기타 셸은 모두 제한된 셸 모드에서 시작할 수 있습니다. 이 기사에서는 Bash를 사용할 것이지만 다른 쉘에도 동일한 원칙이 적용됩니다.

제한된 셸은 표준 셸을 사용하는 또 다른 방법이므로 쉽게 설정할 수 있습니다. 설치할 것이 없으며 Linux가 있는 곳이면 어디에서나 사용할 수 있습니다.

제한된 셸을 스크립트에도 적용할 수 있습니다. 이렇게 하면 잘못 작성된 경우 발생할 수 있는 손상이 제한된 세계로 제한되고 전체 컴퓨터에 액세스할 수 없습니다.

그러나 제한된 껍질이 완전히 탈출할 수 있는 것은 아니라는 점에 유의하십시오. 충분한 지식을 가진 사람은 제한된 껍질을 벗어날 수 있습니다. 일반 사용자에게 안전한 경계를 설정하는 데는 적합하지만 프로덕션 시스템의 실제 보안을 위해 제한된 셸에 의존하지 마십시오.

관련: Bash, Zsh 및 기타 Linux 셸의 차이점은 무엇입니까?

제한된 배쉬

Bash를 제한된 셸로 실행하면 사용자는 일부 기능이 제거됩니다. 특히 사용자는 다음을 수행 할 수 없습니다 .

  • 작업 디렉토리를 변경하려면 cd 를 사용하십시오.
  • $PATH , $SHELL , $BASH_ENV 또는 $ENV 환경 변수의 값을 변경합니다(그러나 현재 값을 읽을 수 있음).
  • $SHELLOPTS 쉘 환경 옵션을 읽거나 변경합니다.
  • 명령의 출력을 리디렉션합니다.
  • 경로를 찾는 명령을 호출하십시오. 즉, 하나 이상의 슬래시 " / "가 포함된 명령을 실행할 수 없습니다.
  • 쉘을 다른 프로세스로 대체하려면 exec 를 호출하십시오.
  • 스크립트에서 제한된 기능을 사용하십시오.
광고

-r (restricted) 옵션을 사용하여 제한된 Bash 셸을 호출할 수 있습니다. 작업 디렉토리 변경과 같은 간단한 작업을 시도하는 것은 금지되어 있습니다. 간결한 메시지는 cd 가 제한되어 있음을 알려줍니다.

 배쉬 -r
 CD 문서 

Bash 셸은 "bash" 대신 "rbash"를 사용하여 호출된 시간을 감지할 수도 있습니다. 이로 인해 제한된 셸로도 시작됩니다. 이것은 우리가 곧 사용할 특정 사용자에 대한 기본 셸을 설정하는 편리한 방법을 제공합니다.

Ubuntu에서 whereis 명령을 사용하여 rbash 파일을 찾으면 실행 파일이 "usr/bin" 디렉토리에 있음을 알 수 있습니다. 매뉴얼 페이지는 "/usr/share/man/man1" 디렉토리에 있습니다.

-l (long) 옵션과 함께 ls 명령을 사용하면 rbash 가 실제로 bash 에 대한 심볼릭 링크임을 알 수 있습니다.

 rbash는 어디에
 ls -l /usr/bin/rbash 

Manjaro와 Fedora에서는 rbash 심볼릭 링크를 만들어야 했습니다. 이것은 두 배포판 모두에서 작동합니다.

 rbash는 어디에
 sudo ln -s /bin/bash /bin/rbash
 rbash는 어디에 

광고

whereis 명령을 두 번째로 사용하면 "/usr/bin" 디렉토리에서 rbash 를 찾습니다.

사용자 제한

"Minnie"라는 새 사용자 계정을 만들어 보겠습니다. useradd 명령의 -s (shell) 옵션을 사용하여 쉘을 제한된 쉘로 설정할 것입니다. 또한 passwd 명령을 사용하여 계정의 암호를 설정하고 홈 폴더를 만듭니다.

mkdir 명령의 -p (parents) 플래그는 mkdir 에 대상 디렉토리와 작성해야 하는 모든 상위 디렉토리도 작성하도록 지시합니다. 따라서 "/home/minnie/bin" 디렉토리를 생성함으로써 동시에 "/home/minnie" 디렉토리를 생성합니다.

 sudo useradd minnie -s /bin/rbash
 sudo 암호 미니
 sudo mkdir -p /home/minnie/bin 

minnie가 로그인하면 제한된 쉘에서 실행됩니다.

 CD 

그녀는 슬래시 " / "를 포함해야 하는 명령을 호출할 수 없습니다.

 /usr/bin/ping 

그러나 그녀는 여전히 경로에 있는 명령을 실행할 수 있습니다.

광고

그것은 당신이 예상했던 행동이 아니며 확실히 우리가 원하는 행동도 아닙니다. 제한을 더 강화하려면 minnie의 셸이 명령을 찾는 데 사용할 경로를 변경해야 합니다.

규제 강화

minnie의 홈 디렉토리 "/home/minnie"를 생성할 때 "/home/minnie/bin" 디렉토리도 생성했습니다. 여기에서 해당 디렉토리가 작동합니다.

minnie의 ".bash_profile" 파일을 편집하고 해당 디렉토리만 가리키도록 경로를 설정할 것입니다. 루트만 편집할 수 있도록 minnie의 ".bash_profile" 파일도 제한합니다. 즉, 다른 사용자는 해당 파일을 편집하고 경로를 변경할 수 없습니다.

 sudo gedit /home/minnie/.bash_profile 

기존 "PATH="를 편집하거나 다음 줄을 추가합니다.

 경로=$HOME/bin 

파일을 저장합니다. chown 명령을 사용하여 파일 소유자를 루트로 변경하고 chmod 명령을 사용하여 파일 권한을 변경합니다. 루트 사용자만 파일을 편집할 수 있습니다.

 sudo chown 루트:루트 /home/minnie/.bash_profile
 sudo chmod 755 /home/minnie/.bash_profile
 ls -l /home/minnie/.bash_profile 

다음에 사용자 minnie가 로그인할 때 그녀의 경로는 단일 폴더를 가리킵니다.

광고

제한된 사용자 minnie는 echo , aliaslogout 과 같은 Bash 내장 명령만 사용할 수 있습니다. 그녀는 ls 도 사용할 수 없습니다!

그들이 유용한 일을 할 수 있게 하려면 우리의 목을 조르는 것을 조금 느슨하게 해야 할 것입니다. minnie의 "bin" 디렉토리에서 minnie가 사용할 수 있도록 하려는 명령에 대한 몇 가지 심볼릭 링크를 만들 것입니다.

 sudo ln -s /bin/ls /home/minnie/bin
 sudo ln -s /bin/top /home/minnie/bin
 sudo ln -s /bin/uptime /home/minnie/bin
 sudo ln -s /bin/pinky /home/minnie/bin 

minnie가 다음에 로그인하면 Bash 내장 명령과 연결된 명령을 사용할 수 있다는 것을 알게 될 것입니다.

 핑키 데이브
 가동 시간 

기존 사용자 제한

새로운 사용자로 minnie를 만들었습니다. 기존 사용자의 셸을 변경하려면 usermod 명령의 -s (셸) 옵션을 사용할 수 있습니다.

 sudo usermod -s /bin/rbash 메리 

"/etc/passwd" 파일에서 less 명령을 사용하면 어떤 셸이 사용자의 기본 셸로 설정되었는지 빠르게 확인할 수 있습니다.

 적은 /etc/passwd 

사용자 mary가 다음에 로그인할 때 제한된 셸을 사용할 것임을 알 수 있습니다.

광고

$PATH 환경 변수를 제한하고 사용자 mary가 실행할 수 있는 명령을 설정하기 위해 다른 변경 사항을 적용하는 것을 기억하십시오.

스크립트 제한

제한되지 않은 일반 사용자는 제한된 셸에서 실행되는 스크립트를 실행할 수 있습니다. 다음 줄을 복사하여 편집기에 붙여넣습니다. 파일을 "restricted.sh"로 저장하고 편집기를 닫습니다.

 #!/bin/bash

# 스크립트는 일반 Bash 셸에서 시작합니다.
echo "## 무제한 모드입니다! ##"

에코
echo "현재 디렉토리: `pwd`"
echo "디렉토리 변경 중"
CD /usr/공유
echo "지금 디렉토리에 있습니다: `pwd`"
echo "홈 디렉토리로 변경"
CD ~
echo "지금 디렉토리에 있습니다: `pwd`"

# 제한 모드 설정
설정 -r

에코
echo "## 제한 모드입니다! ##"

에코
echo "현재 디렉토리: `pwd`"
echo "디렉토리를 /home/으로 변경"
CD / 홈
echo "아직 디렉토리에 있습니다: `pwd`"

에코
echo "다른 쉘을 시작하려고 합니다"
/bin/bash

에코
echo "명령 출력을 리디렉션하려고 시도 중"
ls -l $HOME > my_files.txt
고양이 my_files.txt
에코

0번 출구

스크립트를 실행 가능하게 만들기 위해 +x (실행) 플래그와 함께 chmod 명령을 사용해야 합니다.

 chmod +x 제한.sh 

스크립트의 첫 번째 부분은 일반 셸에서 실행됩니다.

 ./restricted.sh 

스크립트의 두 번째 부분("set -r" 줄 뒤 비트)은 제한된 셸에서 실행됩니다.

스크립트의 제한된 부분에서 시도한 작업 중 어느 것도 성공하지 못합니다.

광고

첫 번째 줄에 -r 을 추가하여 전체 스크립트를 제한된 셸에서 실행하도록 만들 수 있습니다.

 !#/bin/bash -r

후디니 기억하기

제한된 쉘은 유용하지만 완전히 오류가 없는 것은 아닙니다. 충분히 숙련된 사용자는 탈출할 수 있습니다. 그러나 신중하게 사용하면 특정 계정에 대한 일련의 제한 사항을 설정하는 데 유용한 방법입니다.