Linux
updatedb 無法為自定義數據庫文件創建臨時文件
我正在嘗試
mlocate
為我的主目錄創建一個自定義數據庫。執行時updatedb
它抱怨無法打開臨時文件。55;~/>uname -a Linux yoga 4.12.14-lp151.28.59-default #1 SMP Wed Aug 5 10:58:34 UTC 2020 (337e42e) x86_64 x86_64 x86_64 GNU/Linux 56;~/>updatedb --version updatedb (mlocate) 0.26 ... 57;~/>updatedb -l 0 -o ~/.home-mlocate.db -U ~/ updatedb: can not open a temporary file for `/home/<user>/.home-mlocate.db'
以 root身份
updatedb
添加sudo
或以 root 身份執行不會改變結果。簡單地執行sudo updatedb
沒有任何參數成功。更一般的除非數據庫是預設的
updatedb
不能創建臨時文件的:yoga:~ # /usr/bin/whoami root yoga:~ # /usr/bin/updatedb ; echo $? 0 yoga:~ # /usr/bin/updatedb -o /var/lib/mlocate/mlocate.db ; echo $? 0 yoga:~ # /usr/bin/updatedb -o /var/lib/mlocate/custom-mlocate.db ; echo $? /usr/bin/updatedb: can not open a temporary file for `/var/lib/mlocate/custom-mlocate.db' 1 yoga:~ # /usr/bin/strace /usr/bin/updatedb -o /var/lib/mlocate/custom-mlocate.db 2>&1 1>\dev\null | grep "openat.*custom-mlocate.db" openat(AT_FDCWD, "/var/lib/mlocate/custom-mlocate.db", O_RDWR) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/var/lib/mlocate/custom-mlocate.db.6JiH9O", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) yoga:~ #
我的作業系統是 openSUSE Leap 15.1,我的
/home
目錄位於 ext4 文件系統上。問題是什麼以及如何解決?
正如@fra-san 所建議的,問題是由安全策略引起的。解決方案是
- 確保您執行並
audit2allow
安裝了審核守護程序。對於 opensuse 審計守護程序在包audit
中,並且audit2allow
在policycoreutils
. 如果不存在則安裝並以 root 身份啟動守護程序systemctl start auditd
- 執行有問題的程序,例如
updatedb -o ~/custom-mlocate.db -U ~/
作為普通使用者。其餘的應該以root身份登錄(壞)或在每一行前面加上sudo
(好)執行。- 檢查最後幾行
/var/log/audit/audit.log
tail -n 20 /var/log/audit/audit.log | grep -i denied
type=AVC
您對以違規命令的名稱開頭的行 以及出現的位置感興趣。有兩種可能:
- 該行包含
avc: denied
. 您的系統使用 SELinux。- 該行包含
apparmor="DENIED"
. 這意味著您的系統使用 AppArmor 來確保安全。如果是 AppArmor,請查閱 AppArmor 手冊。例如 https://doc.opensuse.org/documentation/leap/security/html/book.security/part-apparmor.html 對於 OpenSuse。
對於 SELinux:
- 將您在步驟 3 中標識的行複製到單獨的文件中。例如
tail -n 20 /var/log/audit/audit.log | grep -i "denied.*updatedb" > /var/log/audit/audit-partial-tmp.log
檢查是否正常
cat /var/log/audit/audit-partial-tmp.log
和
audit2allow -w -i /var/log/audit/audit-partial-tmp.log
- 創建 SELinux 模組
audit2allow -i /var/log/audit/audit-partial-tmp.log -M custom-selinux-module
- 啟動新政策
semodule -i custom-selinux-module.pp
- 以普通使用者執行程序,檢查是否正常。例如
updatedb -o ~/custom-mlocate.db -U ~/
- 清理
rm /var/log/audit/audit-partial-tmp.log custom-selinux-module.pp