限制密钥文件访问以仅允许 keepassxc 可执行文件

限制密钥文件访问以仅允许 keepassxc 可执行文件

我希望能够获得 KDBX密钥文件在 my 中$HOME,这样除了keepassxc(和root)之外没有人可以访问它,甚至排除我自己

我唯一的方法是使用setgid可执行文件上的位并为密钥文件提供相应的组成员身份,但不幸的是,keepassxc 的 GUI 是一个 GTK+ 应用程序,它不喜欢setuidsetgid位,并且在检测到时会自行终止。

要使用虚拟 KDBX 保管库和密钥文件设置测试环境:

sudo addgroup keepassxc

sudo chgrp keepassxc $(which -P keepassxc)
sudo chmod g+s $(which -P keepassxc)

# to revert back afterwards:
# sudo delgroup keepassxc
# sudo chgrp root $(which -P keepassxc)
# sudo chmod g-s $(which -P keepassxc)

# create test files
keepassxc-cli db-create -p -k key.file test.kdbx
chmod -rwx,g+r key.file
sudo chown root:keepassxc key.file

# access test
keepassxc --keyfile key.file test.kdbx # should succeed
sha256sum key.file                     # should fail

但是,就像我说的,keepassxc GUI 终止于

Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.

(process:102257): Gtk-WARNING **: 19:45:45.157: This process is currently running setuid or setgid.
This is not a supported use of GTK+. You must create a helper
program instead. For further details, see:

    http://www.gtk.org/setuid.html

Refusing to initialize GTK+.

我拒绝再摆弄keepassxc。限制位setu/gid肯定有充分的理由。

您知道我的方法的解决方案吗?是不是更可取?
对于提到的帮助程序是否有一个简单的模板/解决方案?仅重击?
有没有更好的方法来实现对单个可执行文件的有限文件访问的目标?

答案1

经过一番挖掘并感谢@muru,我找到了一个可行的并且看似安全解决方案。

用于sudo允许特定用户和主机针对特定命令进行组切换。无需更改keepassxc二进制文件的权限。

设置组和密钥文件后(请参阅上面问题中的代码块),创建一个新的 sudoers 文件,例如:

# creation
echo "$USER $HOSTNAME=(:keepassxc) NOPASSWD:NOEXEC:NOFOLLOW: /usr/bin/keepassxc" \
| sudo tee /etc/sudoers.d/keepassxc

# validation
sudo visudo -sc /etc/sudoers.d/keepassxc

这允许仅以组成员身份$USER执行命令。命令字符串必须准确,因此如果您希望有一天向 keepassxc 传递其他参数或更改绝对路径,您也必须在 sudoers 文件中反映这一点,否则会被 sudo 拒绝。/usr/bin/keepassxc(:keepassxc)

从非特权环境启动 keepassxc 的最后一个命令$USERsudo -g keepassxc /usr/bin/keepassxc,它很容易成为别名。

相关内容