액세스할 수 없는 디렉토리에 대한 자동 완성

액세스할 수 없는 디렉토리에 대한 자동 완성

보기/입력 권한이 없는 폴더에 대해 자동 완성을 얻으려고 합니다. 첫 번째 생각은 수동으로 완성을 사용 compgen하고 수행하는 것이었지만 셸에 내장된 것처럼 보이므로 다음과 같이 실행하십시오. sudo가 작동하지 않을 수 있습니다.sudocompgen

또한 폴더에 대한 사용자 정의 완성 기능을 작성하는 경우 모든 명령에 대해 이를 어떻게 재정의합니까? 나는 complete모든 것을 지시하고 싶지 않습니다 .

아니면 다른 대안이 있나요?

편집하다

이는 사용자에게 sudo 권한(임의 명령 실행)을 부여하지만 루트/su로 로그인하여 루트로만 액세스할 수 있는 일부 폴더로 이동해야 할 때 빠르게 찾을 수 있도록 하는 환경에서 유용합니다. 명령을 실행할 내용이 없습니다.sudo ls XX

답변1

대안으로 대화형 sudo 세션을 사용하는 것이 좋습니다.

sudo -i

또는

sudo -s

루트 쉘을 얻으십시오.

sudo -s현재 환경은 유지되며(예: $HOME여전히 일반 사용자의 홈 디렉터리임), sudo -i루트로 초기 로그인이 시뮬레이션되므로 예 $HOME를 들어 가 을 가리킵니다 /root.

일반 사용자가 sudo를 사용할 수 있도록 탭 완성 조정가능한가능하지만 문제가 있는 것 같습니다. 지난 15분 동안 sudo를 사용하지 않은 경우 비밀번호를 묻는 메시지가 나타납니다.탭 완성 기능을 사용하려고 할 때그렇지 않으면 작동하지 않으며 다시 작동하기 전에 자격 증명 캐시를 플러시하려면 sudo를 수동으로 실행해야 합니다. 그리고 어떻게 해야할지 모르겠고 간단한 문제에 대한 복잡한 해결 방법인 것 같습니다 :)

답변2

당신이 정말로 원하는 것은 높은 권한을 가진 제한된 쉘에서 실행하는 것입니다. 문제는 사용자가 실행 중인 bash 쉘이 그렇지 않다는 것입니다.허용하다이 디렉토리의 목록을 얻으십시오.할 수 없다자동완성 기능을 활용해보세요.

sudo 액세스 권한이 있는 사람을 위해 전체 디렉터리를 열려면 해당 사람을 위한 그룹을 만들고 그에 따라 rX 권한을 설정해야 합니다(또는 facls를 사용해야 합니다).

sudo에서 특정 명령만 제공하는 경우 사용자는 다음을 수행할 수 있습니다.

sudo -l

목록을 받으세요. 똑똑한 사람이라면 "sudo -l"의 출력을 bash 자동 완성 기능이 처리할 수 있는 것으로 변환할 수 있을지 모르지만 아직 본 적이 없습니다. (다시 말하지만, 명령을 명시적으로 지정하는 경우에만 작동합니다.)

예제에서 수행한 작업을 정확히 수행한다면(sudo에서 people로 ls로) 해당 사람들을 위해 지정된 모든 디렉토리 +rx를 생성하세요.

관련 정보