我希望能够在我的$HOME中保护一个KDBX密钥文件,这样,除了keepassxc (和根用户)之外,没有人可以访问它,<#>excluding甚至我自己也可以访问它。
我唯一的方法是在可执行文件/S上使用setgid位,并给出相应的密钥文件组成员资格,但不幸的是,GTK+应用程序是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终止于
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+.我再也不想胡闹下去了。setu/gid比特的限制是有充分理由的。
你知道我的方法有什么解决办法吗?这样更好吗?是否有一个简单的模板/解决方案提到的助手程序?只有巴什?是否有更好的方法来实现对单个可执行文件的有限文件访问的目标?
发布于 2023-03-04 14:21:01
经过深入研究并感谢@muru,我找到了一个实用的、seemingly安全的解决方案。
使用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)执行命令/usr/bin/keepassxc。命令字符串必须准确,因此,如果您想在某一天将额外的参数传递给keepassxc或更改绝对路径,则必须在sudoers文件中也反映这一点,或者被sudo拒绝。
从非特权的$USER环境启动keepassxc的最后一个命令是sudo -g keepassxc /usr/bin/keepassxc,它很容易成为别名。
https://unix.stackexchange.com/questions/736029
复制相似问题