사용자가 아닌 스크립트 만 파일에 액세스 할 수 있도록 할 수 있습니까?


11

시스템에 대한 액세스 권한이 제한된 사용자가 있습니다 (즉, sudoer가 아닙니다). 의 전화 그를 보자 밥을 .

시스템 관리자 인 신뢰하는 스크립트 나 바이너리를 가지고 있으며 루트로 실행하는 데 아무런 문제가 없습니다. 스크립트를 호출합시다 get-todays-passphrase.sh. 이 스크립트의 작업은에있는 "개인"(Bob 이외의 사용자 / 그룹이 소유하거나 루트) 파일에서 데이터를 읽고 파일에서 /srv/daily-passphrases특정 행만 출력하는 것입니다. 오늘 날짜와 일치하는 행 .

Bob과 같은 사용자 는 파일에 나열되어 있어도 내일의 암호를 알 수 없습니다 . 이러한 이유로 파일 /srv/daily-passphrases은 Unix 권한으로 보호되므로 Bob과 같은 루트가 아닌 사용자 는 파일에 직접 액세스 할 수 없습니다 . 그러나 get-todays-passphrase.sh언제든지 스크립트 를 실행할 수 있으며 "필터링 된"데이터를 반환합니다.


요약하면 ( TL; DR 버전) :

  1. Bob이 보호 된 파일을 읽을 수 없습니다
  2. 스크립트는 보호 된 파일을 읽을 수 있습니다
  3. Bob은 언제든지 파일을 읽을 수있는 스크립트를 실행할 수 있습니다.

Unix 파일 권한 내에서이 작업을 수행 할 수 있습니까? 또는 Bob이 스크립트를 시작하면 스크립트가 Bob과 동일한 권한으로 실행되도록 항상 종료됩니까?

답변:


13

이것은 실제로 일반적이며 매우 간단합니다. sudo사용자가 호출 할 수있는 특정 응용 프로그램을 제한 할 수 있습니다. 다시 말해, 당신은 그들에게 모든 뿌리를 줄 필요가 없습니다; 그들에게 특정 명령을 실행할 수있는sudo 권한 부여 할 수 있습니다 . 이것은 정확히 원하는 것이며 사용자가 SSH 등을 통해 Git 리포지토리를 푸시하도록 허용하는 것과 같은 일반적인 관행입니다.

이렇게하려면 /etc/sudoers다음과 같은 줄을 추가하면됩니다.

bob ALL=(root) NOPASSWD: /path/to/command/you/trust

( NOPASSWD:필요한 부분은 아니지만이 상황에서는 매우 일반적입니다.) 그 시점에서 sudo를 통해 bob호출 할 수 /path/to/command/you/trust있지만 다른 것은 없습니다.

즉, 우리가 여기서하고있는 일을 다른 사람에게 뿌리는 것은 당신이 원하는 것이 아닐 수도 있습니다. 특히 스크립트에 결함이 있으면 상자가 뿌리를 내릴 위험이 있습니다. 이러한 이유로, 대신 특수 파일 말을 소유하기 위해 특별히 사용자를 작성하는 것이 좋습니다 specialuser- 그럼 chown그들에게 파일을하고있는 /etc/sudoers메이크업은 bob특별한 사용자합니다. 이 경우 추가하는 줄 sudoers은 단순히

bob ALL=(specialuser) NOPASSWD: /path/to/command/you/trust

7
"루트"방식으로 가지 않는 것이 좋습니다.이 목적을 위해 특별한 사용자 / 그룹을 만드십시오.
guntbert

좋은 지적; 답을 알려 드리겠습니다.
Benjamin Pollack

7

머리말:

의견에서 지적 했듯이이 답변에 설명 된 이유로 Linux 커널은 스크립트를 처리 할 때 setuid / setguid 비트를 무시합니다 . 벤자민의 대답을 복제하지는 않지만 대신 대답을 올바르게하기 위해 스크립트executabe 로 대체 합니다.


짧은 대답 : setgid 사용

세부 단계 :

  1. 새 그룹을 만듭니다 (예 : readpass)
  2. 해당 그룹을 비밀번호 문구 파일의 소유자로 설정하십시오. sudo chown :readpass thatfile
  3. 그룹에서만 파일을 읽을 수 있도록합니다. sudo chmod g=r,o= thatfile
  4. 실행 가능한 sgid readpass를 작성하십시오.sudo chmod g+s thatfile

이렇게하면 실행 파일이 소유 그룹의 권한으로 실행되므로 파일을 읽을 수 있습니다.


2
Setgid와 setuid는 스크립트에서 쉽게 작동하지 않습니다.
muru December

1
Linux에서는 스크립트 setgid를 만들 수 없습니다. setgid 비트는 무시됩니다. 대신 bob thatfile이 그룹과 함께 실행될 수 있도록 sudo 규칙을 추가하십시오 readpass.
Gilles 'SO- 악마 그만
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.