다른 nologin 사용자로 명령 실행

다른 nologin 사용자로 명령 실행

나는 사용하고있다메이븐 앤트런 플러그인실행하다sshexectar를 복사하여 원격 서버의 대상 디렉터리에 추출하는 명령입니다.

그것을 추출하기 위해 실행한 명령은 다음과 같습니다.

/bin/sh -c 'tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;'

이것사용된대상 디렉터리의 소유자가 nologin으로 설정된 새 사용자로 변경될 때까지 정상적으로 작동합니다. 새로운 사용자로서 이 명령을 실행하는 방법을 알아내려고 합니다.

흉내내려고 노력했어요Basil A의 답변

/bin/su -s /bin/sh -c 'tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;' ${newUser}

하지만 비밀번호를 묻는 메시지가 표시되는데 이는 nologin 사용자이기 때문에 작동하지 않습니다.

또한 저는 Linux 전문가는 아니지만 이전 사용자(sudo 액세스 권한이 있는)로 홈 디렉터리에서 이 명령을 실행하려고 하면 실패합니다.

sudo -u ${newUser} tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;

그러나 대상 디렉터리로 이동하여 이전 사용자와 동일한 명령을 실행하면 작동합니다. 이 행동의 차이를 이해하면 답을 얻는 데 도움이 될 것 같아요.

답변1

여기서의 문제는 새 사용자가 시스템 사용자인지, 로그인하지 않은 사용자인지와는 아무 관련이 없는 것 같습니다. 무슨 일이 일어나고 있는지에 대한 가장 그럴듯한 설명은 대상 디렉터리의 소유자가 변경되었기 때문에 이제 원본 디렉터리에 대한 읽기 권한과 대상 디렉터리에 대한 쓰기 권한을 가진 사용자가 없다는 것입니다.

문제의 호스트에 대한 sudo 권한이 있으므로 이 문제를 해결할 수 있는 옵션이 많이 있습니다.

  1. 원래 사용자에게 대상 디렉터리에 대한 쓰기 권한을 부여하고 tar해당 사용자로 명령을 실행할 수 있습니다.

  2. 로그인하지 않은 새 사용자에게 소스 디렉터리에 대한 읽기 권한을 부여하고 tar해당 사용자로 명령을 실행할 수 있습니다.

  3. tarsudo로 명령을 실행한 다음 소유권을 원하는 대로 설정할 수 있습니다 .

예를 들어 다음과 같이 작동해야 합니다.

sudo tar -vxzf /path/to/${artifact}.tar.gz -C /path/to/target/directory

sudo chown -R "${newUser}:${newUser}" /path/to/target/directory

더 많은 트릭을 사용하고 루트로 실행하지 않으려면 관련 사용자 계정의 관련 디렉터리 및 그룹 멤버십에 대한 권한 및 소유권 정보를 포함하도록 질문을 업데이트해야 합니다.

관련 정보