헤드리스 CentOS Docker 컨테이너에서 Secret-tool 명령(gnome-keyring, libsecret 및 dbus에서 지원)을 활성화하는 방법은 무엇입니까?

헤드리스 CentOS Docker 컨테이너에서 Secret-tool 명령(gnome-keyring, libsecret 및 dbus에서 지원)을 활성화하는 방법은 무엇입니까?

실행 중인 헤드리스 CentoS 7.5.1804 Docker 컨테이너에 비밀을 안전하게 저장하기 위해 명령을 사용하려고 하는데 secret-tool이 작업을 성공적으로 수행하는 데 필요한 패키지 및/또는 구성을 찾을 수 없는 것 같습니다.

특히 다음 명령을 실행할 수 있기를 원합니다.

printf "aPassword" | secret-tool store --label="test" foo bar

다음을 실행하여 해당 비밀번호를 볼 수 있습니다.

secret-tool lookup foo bar

secret-tool store명령을 실행하면 다음과 같은 결과가 나타납니다.

printf 'aPassword' | secret-tool store --label="test" foo bar
** Message: Remote error from secret service: org.freedesktop.DBus.Error.UnknownMethod: No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login
secret-tool: No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login

나는 팔로우했다ArchLinux Gnome/Keyring 위키 페이지그리고 다음 단계에 따라 CentOS Docker 컨테이너에서 동일한 작업을 수행해 보세요.

docker run --privileged -it centos:centos7.5.1804 /bin/bash
# remainder of commands are in the container bash shell:
printf 'search localhost.localdomain\nnameserver 8.8.8.8\nameserver 8.8.4.4' > /etc/resolv.conf
yum -y update
yum -y install sudo gnome-keyring libsecret dbus-x11
yum clean all && rm -rf /var/cache/yum
export DISPLAY=“:0.0”
eval "$(dbus-launch --sh-syntax)"
mkdir -p ~/.cache
mkdir -p ~/.local/share/keyrings
eval $(gnome-keyring-daemon --start)
export SSH_AUTH_SOCK

내가 아는 한, 이~해야 한다secret-tool store명령이 성공하는 데 필요한 모든 것(gnome-keyring 데몬, dbus 세션 및 비밀 도구 + libsecret)을 제공 하지만 실패할 경우.

내가 무엇을 놓치고 있나요?

답변1

1년 후, 나는 이것을 다시 방문할 수 있었습니다. 긴 하루 동안 연구하고 다양한 것을 시도한 끝에 마침내 이것을 알아냈습니다. 이 답변이 다른 사람이 제가 잃어버린 생산성을 구하는 데 도움이 되기를 바랍니다!

체인에서 누락된 링크는 항목을 저장하기 전에 키링을 생성해야 한다는 것입니다. 이 도커 컨텍스트에는 사용자 계정, 로그인 등이 없습니다. 따라서 Gnome과 같은 데스크탑 관리자가 자동으로 생성한 키링이 없습니다.

따라서 다음을 수행해야 합니다.

  1. 먼저 키링을 수동으로 생성한 다음
  2. 키링 데몬을 수동으로 시작

명령이 작성되면 키링을 초기화하기 위해 표준 입력의 비밀번호가 필요합니다. 이 도커 예제에서는 테스트용일 뿐 실제 사용자가 실제로 사용하지 않기 때문에 장면(첫 번째 호출에서 키링 생성)과 실제 시작 데몬 시나리오 \n로 파이프되는 줄 바꿈된 더미 비밀번호를 사용합니다 .--unlock--start

이것이 궁극적인 작업 명령 세트입니다. 공식 기본 centos도커 이미지는 사용되지 않습니다. systemd 서비스는 DBus에 대해 실행되어야 하므로 공식 centos/systemd이미지를 사용해야 합니다.

docker run --privileged -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name centos-systemd centos/systemd
docker exec -it centos-systemd /bin/bash

# remainder of commands are in the container bash shell:
yum -y install gnome-keyring libsecret dbus-x11

eval "$(dbus-launch --sh-syntax)"

mkdir -p ~/.cache
mkdir -p ~/.local/share/keyrings # where the automatic keyring is created

# 1. Create the keyring manually with a dummy password in stdin
eval "$(printf '\n' | gnome-keyring-daemon --unlock)"

# 2. Start the daemon, using the password to unlock the just-created keyring:
eval "$(printf '\n' | /usr/bin/gnome-keyring-daemon --start)"

이 작업이 완료되면 이제 비밀번호를 저장하고 조회할 수 있습니다.

[root@603a122f7555 /]# secret-tool lookup foo bar
[root@603a122f7555 /]# printf "aPassword" | secret-tool store --label="test" foo bar
[root@603a122f7555 /]# secret-tool lookup foo bar
aPassword
[root@603a122f7555 /]#

답변2

Ubuntu 헤드리스 가상 머신에 대한 명령은 다음과 같습니다.

apt install dbus-x11 gnome-keyring libsecret # ~79MB
export $(dbus-launch)
eval "$(echo '\n' | gnome-keyring-daemon --unlock)"
echo [email protected] | secret-tool store --label="main" email address
echo $(secret-tool lookup email address)

kill -9  $(pgrep -f gnome-keyring-daemon)
# echo $(secret-tool lookup email address)  # no longer gives password

비밀을 검색하려면 모든 스크립트에서 키링을 잠금 해제해야 하는 것 같습니다.

실제로 비결은 Docker에서만 작동하는 eval 명령을 사용하는 것입니다. 이 오류가 없으면 여러 GitHub 프로젝트를 포함하여 온라인에서 이 오류에 대한 해결책이 없습니다.

"비밀 도구: 잠긴 컬렉션에 항목을 생성할 수 없습니다"

편집하세요. 이것은 한 번만 작동합니다. 이는 -r재시작 데몬을 사용해 프로세스를 종료하고 재시작한 후에도 마찬가지입니다. 이름이 달라도 새 비밀을 얻을 수 없으며 저장된 비밀을 검색할 수도 없습니다.
"비밀 도구: 잠긴 컬렉션에 항목을 생성할 수 없습니다." 오류

관련 정보