Linux 사용자의 루트 디렉터리를 어떻게 변경합니까?

Linux 사용자의 루트 디렉터리를 어떻게 변경합니까?

Linux 호스트 사용자의 경우 홈 디렉터리 외에 모든 항목에 액세스할 수 없게 만들어야 합니다.

나는 이것이 일반적으로 사용자의 루트 디렉터리를 변경하고 이를 사용자의 홈 디렉터리로 설정하여 수행된다고 들었지만 그렇게 하는 방법을 찾을 수 없었습니다.

명령어를 생각해봤는데 chroot지정된 디렉터리를 루트 디렉터리로 간주하여 지정된 명령만 실행하는 것 같습니다. 그래서 그것은 chroot내가 필요한 것이 아닌 것 같습니다.

그래서 내 질문은: 사용자의 루트 디렉터리를 변경하는 명령은 무엇입니까?

답변1

루트 디렉토리가 아닌 HOME 디렉토리를 변경하려는 것 같습니다. 루트는 항상 / 또는 /root입니다.

usermod -d /path/to/new/homedir/ username

답변2

이 홈 디렉터리 뒤에 있는 "모든 항목에 액세스할 수 없도록" 하기 위해 chroot를 사용하겠습니다. 하지만 chroot된 디렉터리를 준비하지 않으면 아무 것도 할 수 없으므로 사용 가능한 바이너리나 라이브러리가 없습니다.

FTP 서버 구성은 다음과 같은 경우에 유용할 수 있습니다. http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap29sec296.html

FTP 사용자를 이 chroot 디렉토리로 제한하기 위해 설정된 전체 chroot 설정입니다.

답변3

나는 이 대답을 지지하며, 그 대답에 -1이 있어도 상관하지 않습니다. 이것은 유닉스가 합리적인 방식으로 할 수 있는 일이 아닙니다. 사실상 불가능한 것을 요구하고 계십니다.

하지만 당신이 요구하는 것과 같은 것을 얻을 수 있는 방법이 있습니다. 가상 머신을 사용하세요. 문제의 사용자를 위해 가상 머신 인스턴스를 설정하고 호스트 OS가 아닌 로그인 권한만 부여하세요.

내 원래 답변은 다음과 같습니다.

권한을 사용하면 됩니다. 그것이 바로 그들이 하는 일입니다. 일반적으로 사용자는 /tmp 및 홈 디렉터리 이외의 다른 항목에 쓸 수 있는 액세스 권한이 없습니다. 그리고 /bin/, /usr/bin, /usr/lib및 에 대한 읽기 액세스 권한이 있어야 하며 /lib그렇지 않으면 아무것도 할 수 없습니다.

권한이 부여하는 것보다 더 엄격한 것을 정말로 원한다면 selinux를 설정하여 더 제한할 수 있는지 살펴보십시오.

just를 사용하면 chroot원하는 것을 얻을 수 없습니다. 설정하기가 정말 복잡하고 이를 해결할 수 있는 방법이 있습니다.

답변4

추가하면 좋을 것 같아요

if grep "\\<${USER}\\>" /etc/jailbirds > /dev/null
then
    echo I am not a crook
else
    exec chroot $CWD
endif

끝까지 당신 /etc/profile은 당신이 요구하는 것을 얻을 수 있지만 내가 알지 못하는 몇 가지 부작용이 있을 수 있습니다(쉘 실행을 인계받아 /etc/profile문제가 발생할 수 있습니다). 이 경우 /etc/jailbirdschroot하려는 사용자 목록이 포함된 파일을 생성해야 합니다 . 또한 이 파일이 존재하는지 확인하고 다른 사용자(특히 루트)가 chroot에 의해 잠기지 않도록 이 파일에 액세스하는 중 오류가 발생하는 경우 어떻게 해야 할지 결정해야 합니다.

게다가 이렇게 하는 것도 어려울 것입니다. 사용자는 액세스할 수 없으며 /proc이로 인해 많은 셸 유틸리티(예 ps: top, 및 기타 여러 유틸리티)가 작동하지 않게 됩니다. 사용자는 또한 에 액세스할 수 없으며 /dev/null이로 인해 많은 문제가 발생합니다.

또한 사용자는 표준 입력과 함께 사용하면 /dev/tty중단되는 항목 less에 액세스할 수 없습니다 . more사용자의 응용 프로그램은 chroot 이전의 stdin, stdout 및 stderr 개방형 파일 설명자를 상속하지만 파이프에서 stdin 리디렉션을 처리하기 위해 사용자로부터 키 입력을 받을 수 있도록 /dev/tty를 덜 엽니다.

또한 많은 프로그램이 사용하는 /etc(예: /etc/protocols ) 아래에 있는 프로그램이나 공유 라이브러리 또는 많은 파일에 액세스할 수 없습니다.

이 모든 것은 해결할 수 있는 문제이지만 결국에는 사용자 환경을 사용 가능하게 만들기 위해 제가 생각했던 것보다 훨씬 더 많은 작업을 수행해야 할 것입니다.

내 제안을 시도한다면 매우 조심하시기 바랍니다. 잘못해서 일을 엉망으로 만드는 것은 쉬울 것입니다. 그건 그렇고, 나는 이것을 테스트하지 않았습니다.

관련 정보