제한된 셸을 사용하여 Linux 사용자가 할 수 있는 작업을 제한하는 방법
게시 됨: 2022-01-29제한된 셸은 사용자 계정이 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
, alias
및 logout
과 같은 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
후디니 기억하기
제한된 쉘은 유용하지만 완전히 오류가 없는 것은 아닙니다. 충분히 숙련된 사용자는 탈출할 수 있습니다. 그러나 신중하게 사용하면 특정 계정에 대한 일련의 제한 사항을 설정하는 데 유용한 방법입니다.