"nologin" 계정의 경우 sudo -i

"nologin" 계정의 경우 sudo -i

계정이 있습니다

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
$

왜 실패했는지 모르겠습니다.

관련 정보