我希望能够获得 KDBX密钥文件在 my 中$HOME
,这样除了keepassxc
(和root)之外没有人可以访问它,甚至排除我自己。
我唯一的方法是使用setgid
可执行文件上的位并为密钥文件提供相应的组成员身份,但不幸的是,keepassxc 的 GUI 是一个 GTK+ 应用程序,它不喜欢setuid
或setgid
位,并且在检测到时会自行终止。
要使用虚拟 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 的最后一个命令$USER
是sudo -g keepassxc /usr/bin/keepassxc
,它很容易成为别名。