루트 액세스가 필요한 명령을 사용하여 루트가 아닌 사용자가 스크립트를 실행하도록 하는 가장 좋은 방법은 무엇입니까?

루트 액세스가 필요한 명령을 사용하여 루트가 아닌 사용자가 스크립트를 실행하도록 하는 가장 좋은 방법은 무엇입니까?

www-data 사용자로 실행되도록 PHP에 의해 실행되는 스크립트가 있습니다. 스크립트는 매우 간단합니다. 기본적으로 미리 만들어진 일부 파일(예: 호스트 및 인터페이스 파일)을 올바른 디렉터리에 복사합니다. 일부 권한 등을 업데이트할 수도 있습니다.

새 사용자를 생성하고 해당 사용자에게 다음을 통해 필요한 명령에 대한 액세스 권한을 부여하는 것이 visudo효과적일 수 있다고 생각합니다.

  1. 사용자에게는 여전히 .sh비밀번호를 입력하라는 메시지가 표시되며
  2. 분명히 테스트 사용자에게 권한을 부여하지 않습니다.

visudo(실행 중에는 모든 권한이 거부됩니다 ./script.sh)

test ALL=(ALL) NOPASSWD:ALL
test ALL=      NOPASSWD:ALL
test ALL=(ALL) NOPASSWD:/bin/cp,/bin/mv,/bin/nano,/bin/chown,/bin/mv

test사용자를 내가 로그인한 실제 사용자로 변경 하면 작동합니다.

.sh로그인한 사용자가 실행하거나 www-data필요한 권한이 있는 다른 사용자로 명령을 실행하려고 시도합니다.

#!/bin/bash
sudo -H -u test cp test.txt /etc/test.txt
sudo -H -u test chown test /etc/test.txt
echo "ok"

www-data사용자가 권한이 필요한 스크립트를 실행할 수 있도록 하는 가장 좋은 방법은 무엇입니까 root?

답변1

보여주신 부분은 sudoers이해가 안가네요.

test ALL=(ALL) NOPASSWD:ALL
test ALL=      NOPASSWD:ALL
test ALL=(ALL) NOPASSWD:/bin/cp,/bin/mv,/bin/nano,/bin/chown,/bin/mv

행 중 하나만 필요하며 아마도 마지막 행일 것입니다.

이전 명령의 종료 코드를 고려하지 않고 실행하는 것도 echo "ok"의미가 없습니다.

귀하에 따르면 sudo이 사용자에게는 권한이 없습니다 www-data.

sudo -H -u test cp test.txt /etc/test.txt사용자가 test할 수 없기 때문에 일반 시스템에서는 의미가 없습니다 /etc. 이는 대상 파일이 존재하고 사용자 "test"에 쓰기 권한이 있는 경우에만 작동합니다.

그러나 이 방법으로 성공적으로 호출할 수 있는 sudo -H -u test chown test /etc/test.txt유일한 사용자는 루트이므로 이는 결코 의미가 없습니다 .chown

해결책

내 생각에 당신에게 필요한 것은 이것이다. 대본

#!/bin/bash

cp ~test/test.txt /etc/test.txt &&
    chown test /etc/test.txt    &&
    echo 'ok' || echo 'failure'
  1. 다음 사용자만 쓸 수 있는 경로에 스크립트를 배치하세요.root
  2. sudo이와 같은 권한을 생성하세요 .

    www-data ALL= NOPASSWD:/path/to/script.sh
    
  3. www-data다음과 같이 스크립트를 호출하십시오.

    sudo /path/to/script.sh
    

관련 정보