Apabila menggunakan python untuk mencipta, membaca dan menulis fail, kami jarang memberi perhatian kepada konfigurasi kebenaran fail yang dibuat. Bagi sesetengah sistem dengan keselamatan yang tinggi, jika kebenaran fail yang kami cipta mempunyai kebenaran membaca untuk pengguna lain atau pengguna lain dalam kumpulan pengguna yang sama, ia mungkin membawa kepada risiko kebocoran maklumat yang tidak diperlukan. Oleh itu, selain mewujudkan persekitaran peribadi yang lebih selamat dan peribadi (seperti persekitaran kontena, dll.), kami juga boleh meminimumkan kebenaran pada konfigurasi fail yang dijana.
Kaedah yang biasa digunakan untuk mencipta, membaca dan menulis fail python adalah untuk mencipta fail terus melalui fungsi terbuka terbina dalam. Jika ia dicipta menggunakan sintaks dengan, objek yang dibuka akan ditutup secara automatik selepas menamatkan pernyataan. Jika anda menggunakan fungsi terbuka secara langsung untuk menentukan objek, anda perlu melakukan operasi tutup secara manual pada akhir tugasan. Yang berikut menunjukkan penggunaan fungsi terbina dalam terbuka dan atribut operasi failnya Mula-mula, buat fail bernama file-test.py:
# file-test.py with open('test1.txt', 'w') as file: file.write('hello world!')
Kandungan tugasan ialah: Cipta fail bernama test1. txt dalam fail direktori semasa, kosongkan kandungan fail, dan tulis rentetan hello world! Seterusnya, gunakan python3 untuk melaksanakan fail:
[dechin@dechin-manjaro os_security]$ python3 file-test.py
[dechin@dechin-manjaro os_security]$ ll
Jumlah penggunaan 8
-rw-r--r-- 1 dechin dechin 83 Januari 25 13:43 file-test.py
-rw-r--r-- 1 dechin dechin 12 Januari 25 13:43 test1 .txt
Di sini kami mendapati bahawa fail test1.txt berjaya dijana selepas pelaksanaan dan kebenarannya dikonfigurasikan kepada 644, yang konsisten dengan file-test.py yang dibuat sebelum ini. Apabila saya tidak mengetahui prinsip pelaksanaan fungsi terbina dalam terbuka, saya pada asalnya berpendapat bahawa konfigurasi kebenaran fail yang dijana adalah konsisten dengan fail py semasa. Walau bagaimanapun, selepas ujian lanjut, saya mengkonfigurasi kebenaran fail py kepada 440 dan kemudian melaksanakan semula fail:
[dechin@dechin-manjaro os_security]$ chmod 440 file-test.py
[ dechin@dechin-manjaro os_security]$ ll
Jumlah penggunaan 8
-r--r----- 1 dechin dechin 83 Januari 25 13:43 file-test.py
-rw -r --r-- 1 dechin dechin 12 Januari 25 13:43 test1.txt
[dechin@dechin-manjaro os_security]$ rm test1.txt
[dechin@dechin-manjaro os_security]$ python3 file- test .py
[dechin@dechin-manjaro os_security]$ ll
Jumlah penggunaan 8
-r--r----- 1 dechin dechin 83 Januari 25 13:43 file-test.py
-rw-r--r-- 1 dechin dechin 12 Januari 25 13:44 test1.txt
Di sini kita dapat melihat daripada keputusan ujian bahawa fail yang dihasilkan oleh fungsi terbina dalam python open Jenis adalah bebas daripada fail py sumber. Mengenai sama ada pelaksanaan fail py ini memerlukan kebenaran boleh laku, anda boleh merujuk blog ini.
Melalui perpustakaan fdopen dan spesifikasi kebenaran khas, kami boleh menetapkan kebenaran akses bagi fail yang dijana Contoh kod python ditunjukkan di bawah:
# fdopen-test.py import os import stat file_name = 'test2.txt' flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL mode = stat.S_IRUSR | stat.S_IWUSR with os.fdopen(os.open(file_name, flags, mode), 'w') as file: file.write('hello world!')
Selepas pelaksanaan, kami dapati bahawa fail bernama test2.txt dijana dalam direktori semasa, dan kebenarannya dikonfigurasikan sebagai 600, berbanding dengan mod = stat.S_IRUSR | stat.S_IWUSR yang kami tetapkan dalam kod. Di sini kami mula-mula menerangkan beberapa parameter: os.O_WRONLY bermaksud membuka dalam mod tulis sahaja, os.O_CREAT bermaksud mencipta dan membuka fail baharu, os.O_EXCL bermaksud melaporkan ralat jika fail itu sudah wujud. Kebenaran yang dikonfigurasikan dalam mod masing-masing sepadan dengan konfigurasi rwx, dan USR, GRP dan OTH masing-masing telah membahagikan konfigurasi untuk pengguna, kumpulan pengguna dan pengguna lain, supaya kami dapat merealisasikan semua jenis konfigurasi kebenaran dengan menukar parameter mod .
Kami boleh cuba melaraskan mod dalam kes penggunaan di atas, seperti menambahkan kebenaran boleh laku kepada 700:
# fdopen-test.py import os import stat file_name = 'test3.txt' flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR with os.fdopen(os.open(file_name, flags, mode), 'w') as file: file.write('hello world!')
Atau, kami perlu menambah kebenaran boleh laku untuk pengguna lain dalam kumpulan pengguna Kebenaran akses, seperti 640 kebenaran:
# fdopen-test.py import os import stat file_name = 'test4.txt' flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP with os.fdopen(os.open(file_name, flags, mode), 'w') as file: file.write('hello world!')
Malah kita boleh menulis kebenaran fail 644 asli sistem:
# fdopen-test.py import os import stat file_name = 'test5.txt' flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH with os.fdopen(os.open(file_name, flags, mode), 'w') as file: file.write('hello world!')
Akhir sekali, mari kita lihat hasil yang diperoleh selepas melaksanakan contoh python di atas :
[dechin@dechin-manjaro os_security]$ ll
Jumlah penggunaan 28
-rw-r--r-- 1 dechin dechin 269 Januari 25 14:58 fdopen- ujian. py
-r--r----- 1 dechin dechin 84 Januari 25 14:11 file-test.py
-rw-r--r-- 1 dechin dechin 12 Januari 25 13:44 test1 .txt
-rw------ 1 dechin dechin 12 Januari 25 14:44 test2.txt
-rwx------ 1 dechin dechin 12 Januari 25 14:48 test3.txt
-rw-r----- 1 dechin dechin 12 Januari 25 14:56 test4.txt
-rw-r--r-- 1 dechin dechin 12 Januari 25 14:58 test5.txt
Daripada keputusan, kami dapat melihat bahawa semua ujian fail yang dijana*.txt dijana mengikut konfigurasi kebenaran fail yang kami harapkan Pada ketika ini, kami telah menyelesaikan semua matlamat yang dijangkakan.
Atas ialah kandungan terperinci Cara menggunakan fdopen untuk meminimumkan kebenaran pada fail yang dihasilkan oleh proses Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!