![bash 스크립트를 실행하려면 "system" 사용자를 사용하여 systemd 서비스를 시작하세요.](https://linux55.com/image/142027/bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%A0%A4%EB%A9%B4%20%22system%22%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20systemd%20%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC%20%EC%8B%9C%EC%9E%91%ED%95%98%EC%84%B8%EC%9A%94..png)
테스트 목적으로 systemd 서비스 파일은 간단한 bash 스크립트를 실행하도록 설계되었습니다. "시스템" 사용자가 서비스를 시작하길 원합니다. bash 스크립트는 이 시스템 사용자가 소유하고 있으며 실행 권한이 부여되었습니다.
서비스 파일은 간단합니다.
[Unit]
Description=Come one step closer
After=network-online.target
Requires=network-online.target
[Service]
User=test1
Group=test1
Type=simple
ExecStart=/usr/bin/bash /absolute/path/to/test.sh
[Install]
WantedBy=multi-user.target
test.sh 스크립트는 단순히 Journalctl에 메시지를 보내야 합니다. 이는 테스트 전용입니다.
다음을 사용하여 시스템 단위 파일을 다시 로드했습니다.
$ sudo systemctl daemon-reload
서비스를 시작합니다.
$ sudo systemctl start tester.service
systemctl status tester.service의 출력은 bash를 실행할 권한이 없음을 나타냅니다.
시스템에 "시스템" 사용자 test1을 추가했습니다.
$ sudo useradd -r -s /usr/bin/bash test1 -U
test1 사용자에게 서비스 시작 권한을 부여하려면 어떻게 해야 합니까? test1이 시스템 사용자이고 test1로 로그인할 수 없기 때문에 사용자 test1을 사용하여 bash 스크립트를 테스트할 수 없습니다.
답변1
설명에서 확인된 것처럼 문제는 /absolute/path/to/test.sh
루트가 아닌 사용자가 스크립트에 액세스하려면 "실행"(x) 권한이 있어야 하는 위 디렉터리의 권한에 있습니다.
이는 다음 명령을 사용하여 각 상위 디렉터리의 패턴을 살펴봄으로써 진단할 수 있습니다.
ls -ld / /absolute /absolute/path /absolute/path/to /absolute/path/to/test.sh
그리고 "test1" 사용자에게 스크립트 자체에 대한 읽기 권한 외에 모든 디렉터리에 대한 실행 권한이 있는지 확인하세요 test.sh
.