更新されたデータベースは、カスタムデータベースファイルの一時ファイルを生成できません。

更新されたデータベースは、カスタムデータベースファイルの一時ファイルを生成できません。

私のホームディレクトリ用のカスタムデータベースを作成しようとしています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'

フロントロードまたはルートとして実行しても結果は変わりupdatedbません。sudoパラメータなしで単純に実行すると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ファイルシステムにあります。

問題は何であり、どのように解決しますか?

ベストアンサー1

@fra-sanが提案したように、問題はセキュリティポリシーによって引き起こされます。解決策は

  1. 監査デーモンが実行中でインストールされてaudit2allow いることを確認してください。 opensuseの場合、監査デーモンはパッケージ内にauditありaudit2allowますpolicycoreutils。存在しない場合は、インストールしてrootとしてデーモンを起動します。
systemctl start auditd
  1. updatedb -o ~/custom-mlocate.db -U ~/ たとえば、一般ユーザーとしてそのプログラムを実行します。残りはsudorootとしてログインするか(悪い)、各行の接頭辞を付けて実行する必要があります(良い)。

  2. 最後の数行を確認してください/var/log/audit/audit.log

    tail -n 20 /var/log/audit/audit.log | grep -i denied
    

    あなたが興味を持っているのは、 type=AVC問題のあるコマンドの名前で始まる行です。 2つの可能性があります。

  • この行には、avc: deniedシステムが SELinux を使用します。
  • この行にはが含まれていますapparmor="DENIED"。これは、システムがセキュリティのためにAppArmorを使用することを意味します。

AppArmorの場合は、AppArmorのマニュアルを参照してください。例えば https://doc.opensuse.org/documentation/leap/security/html/book.security/part-apparmor.html オープン水洗用。

SELinuxの場合:

  1. 手順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
    
  2. SELinuxモジュールの作成
    audit2allow -i /var/log/audit/audit-partial-tmp.log -M custom-selinux-module
    
  3. 新しいポリシーを有効にする
    semodule -i custom-selinux-module.pp
    
  4. 通常のユーザーとしてプログラムを実行して正常であることを確認してください。例えば
    updatedb -o ~/custom-mlocate.db -U ~/
    
  5. 掃除する
    rm /var/log/audit/audit-partial-tmp.log custom-selinux-module.pp 
    

おすすめ記事