계정이 있습니다
grafana:x:494:494:Grafana User:/tmp:/sbin/nologin
컨테이너를 실행하는 데 사용하고 싶습니다. 만약 내가한다면
jsmith$ sudo -u grafana -s TMPDIR=/bs XDG_DATA_HOME=/bs XDG_CONFIG_DIR=/bs podman run --network-config-dir=/bs -it alpine
"/home/jsmith에 chdir을 지정할 수 없습니다. 권한이 거부되었습니다."라는 메시지가 나타납니다. grafana가 쓸 수 있는 디렉토리에 처음으로 chdir을 지정하면 OK 명령을 실행할 수 있습니다. 그러나 디렉토리를 변경하지 않고 즉, 단일 명령을 사용하여 시작 스크립트에서 시작하고 싶습니다. 나는 무엇을 해야할지 모르겠습니다. HOME을 설정해도 도움이 되지 않습니다. 나는 다음을 사용해야만 이 문제를 해결할 수 있었습니다.
jsmith$ sudo su -l -s /bin/bash -c 'XDG_DATA_HOME=/bs XDG_CONFIG_DIR=/bs podman run --network-config-dir=/bs -it alpine' grafana
그러나 이것은 우회적인 것 같습니다.
답변1
제가 보기에는 이는 두 가지 방법으로 달성할 수 있는 것 같습니다.
첫 번째 방법은 로그인할 수 있도록 계정을 변경하는 것입니다.
grafana:x:494:494:Grafana User:/tmp:/bin/bash
이는 잠재적인 보안 위험이 될 수 있으므로 이를 원하지 않는 경우 시작 스크립트 대신 시스템 단위 파일을 사용하여 시작하는 것을 고려할 수 있습니다.
/etc/systemd/system/[mycontainer].service에 저장합니다. (mycontainer를 적합한 이름으로 바꿉니다.)
[Unit]
Description=Run Container
AssertPathExists=/bs
[Service]
User=grafana
Group=grafana
Environment="XDG_DATA_HOME=/bs"
Environment="XDG_CONFIG_DIR=/bs"
Environment="TMPDIR=/bs"
ExecStart=podman run --network-config-dir=/bs -it alpine
Nice=5
# Uncomment this if you want the container to be started on boot, otherwise don't
#[Install]
#WantedBy=multi-user.target
그런 다음 실행 systemctl enable mycontainer
하여 사용 systemctl start mycontainer
하고 systemctl stop mycontainer
관리하세요.
내가 찾은 Systemd 장치에 대한 자세한 내용은이것매우 도움이 됩니다.
답변2
루트 없는 Podman을 실행할 때 Podman은 기본적으로 홈 디렉터리에 컨테이너와 컨테이너 이미지를 저장합니다.
목차/tmp모든 사용자가 쓸 수 있으므로 사용자가 쓸 수 있도록 하는 것이 좋습니다.그라파나자체 홈 디렉토리를 갖습니다.
$ sudo useradd grafana -s /sbin/nologin -c "Grafana User"
$ grep grafana /etc/passwd
grafana:x:1025:1025:Grafana User:/home/grafana:/sbin/nologin
$ sudo systemd-run --machine=test1@ \
--quiet \
--user \
--collect \
--pipe \
--wait \
podman \
run \
--rm \
docker.io/library/alpine echo hello
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob 8921db27df28 done
Copying config 042a816809 done
Writing manifest to image destination
Storing signatures
hello
$
나는 텍스트를 본다"안녕하세요"명령의 출력에서 echo hello
.
잘 테스트되었습니다.
또 다른 테스트
네가 원한다면/tmp홈 디렉터리로 사용하되 Podman이 예를 들어 다음을 사용하도록 하세요./var/bs, 동일한 환경 변수를 전달하여 작동하게 할 수도 있습니다.답변작성자: @Anuril.
옵션을 추가했어요
-E XDG_DATA_HOME=/var/bs \
-E XDG_CONFIG_DIR=/var/bs \
-E TMPDIR=/var/bs \
위의 systemd-run 명령에 연결했지만 명령이 실패했습니다.
ERRO[0000] stat /tmp/.config/containers/storage.conf: permission denied
그런 다음 추가해 보았습니다.
-E HOME=/var/bs \
그러나 오류 메시지와 함께 명령이 실패합니다.
Error relocating /bin/echo: RELRO protection failed: Permission denied
자세한 내용은 다음을 참조하세요.
$ useradd test2 -s /sbin/nologin -c "Grafana User" -d /tmp
$ grep test2 /etc/passwd
test2:x:1026:1026:Grafana User:/tmp:/sbin/nologin
$ sudo mkdir /var/bs
$ sudo chown test2:test2 /var/bs
$ sudo systemd-run \
-E XDG_DATA_HOME=/var/bs \
-E XDG_CONFIG_DIR=/var/bs \
-E TMPDIR=/var/bs \
-E HOME=/var/bs \
--machine=test2@ \
--quiet \
--user \
--collect \
--pipe \
--wait \
podman \
run \
--rm \
docker.io/library/alpine echo hello
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob 8921db27df28 done
Copying config 042a816809 done
Writing manifest to image destination
Storing signatures
Error relocating /lib/ld-musl-x86_64.so.1: RELRO protection failed: Permission denied
Error relocating /bin/echo: RELRO protection failed: Permission denied
$
왜 실패했는지 모르겠습니다.