Tidak dapat membuat file temp untuk dokumen-sini: Izin ditolak

11

[Catatan: Q serupa ini menyangkut pesan kesalahan bash yang sama. Sudah ditandai duplikat dari Q lain ini . Tetapi karena saya menemukan sumber yang sangat berbeda untuk kesalahan ini, saya akan menjawab Q saya sendiri di bawah ini.]

Baris skrip bash yang sebelumnya berfungsi

while ... do ... done <<< "$foo"

suatu hari mulai menghasilkan pesan kesalahan ini:

tidak dapat membuat file temp untuk dokumen-sini: Izin ditolak

Pandangan elips
sumber
Dalam kasus saya ini diaktifkan IMA ( ima_policy=appraise_tcbparameter kernel) dengan kombinasi /tmptidak sedang tmpfs. Tapi ini sebenarnya bukan kasus biasa :).
pevik

Jawaban:

10

Saya telah menambahkan umask 777sebelum string di sini. Setelah menghapus umask, kesalahan hilang. Jadi pelajaran yang didapat: Ada file sementara yang dibuat untuk string di sini ( <<<), dan ini terkait dengan dokumen di sini ( <<), dan Anda harus memiliki set umask yang sesuai agar ini berfungsi.

Pandangan elips
sumber
Menarik memang. +1 Lihat unix.stackexchange.com/questions/166292/…
Rui F Ribeiro
Ini juga mempengaruhi zsh dan mksh, bukan ksh93 atau tcsh. Bukan dash, rc, es, atau yash juga tapi itu karena mereka menggunakan pipa bukan file temp.
Stéphane Chazelas
Dalam kasus ksh93 dan tcsh, ini berfungsi karena mereka membuka file hanya sekali dalam mode baca + tulis, tulis data dan kemudian cari kembali ke awal.
Stéphane Chazelas
6

Dalam kasus saya, saya mengubah /tmpizin default direktori (saya pikir saya telah mengubah secara tidak sengaja ke 0777).

Solusinya adalah mengembalikannya kembali ke /tmpizin default , yaitu 1777 dalam oktal (1 = bit lengket, 7 = R + W + X).

Jadi singkatnya sudo chmod -R 1777 /tmpharus memperbaiki masalah.

Eugen Mihailescu
sumber
Saya bisa melihat di mana itu memang akan menyebabkan masalah. Ya, bit lengket penting untuk / tmp.
Tampilan elips
2
Anda mungkin tidak menginginkan -Rbenderanya. Tidak ada alasan untuk mengubah file semua orang di bawah ini /tmpmenjadi read-write-executable oleh semua orang. Beberapa file itu sensitif terhadap keamanan pengguna Anda.
keithpjolley
1

pengalaman pribadi saya dengan masalah ini adalah dengan umasknotasi biner, seperti @ elips-view. Saya menduga tulisan itu:

umask 0644 

akan memberi saya akses baca dan tulis ke file yang saya buat, apa yang salah

Setelah saya mengubah umaskmenjadi

umask 0022

kesalahan menghilang.

Sebenarnya, notasi biner harus dipahami sebagai komplemen biner.

Jadi, dalam umasktopeng di bawah ini ketika seseorang menulis 0untuk pemilik file, pengguna ini akan memiliki akses total ke file yang ia buat. Nilai tersebut 2berarti bit ke-2 tertutup, apa artinya dalam kasus ini, secara default pengguna lain tidak akan diizinkan untuk menulis ke file yang dibuat oleh pemilik file.

Hilton Fernandes
sumber
1
Terima kasih atas pengeditan dan koreksi, @Paulo Tomé. Memang, biasanya (dan jelas) menggunakan notasi oktal umask, karena tepat tiga bit terlibat dalam izin file Posix - untuk pemilik, salah satu grupnya, dan semua orang lainnya.
Hilton Fernandes
Sama-sama. ;)
Paulo Tomé