Apa tujuan dari izin Linux seperti 111 atau 333 (yaitu pengguna dapat mengeksekusi , tetapi tidak dapat membaca file), jika kemampuan untuk mengeksekusi tidak secara otomatis menyiratkan kemampuan untuk membaca?
Apa tujuan dari izin Linux seperti 111 atau 333 (yaitu pengguna dapat mengeksekusi , tetapi tidak dapat membaca file), jika kemampuan untuk mengeksekusi tidak secara otomatis menyiratkan kemampuan untuk membaca?
Jawaban:
Saya bermain dengannya dan ternyata, izin exec tidak menyiratkan izin baca. Binari dapat dieksekusi tanpa dapat dibaca:
$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw
hello world
$ cat hw
/bin/cat: hw: Permission denied
Saya tidak bisa mengeksekusi skrip, kecuali mereka memiliki bit izin baca dan exec pada:
$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
/bin/bash hw.sh
, dan kemudian bash mencoba membuka hw.sh
untuk membaca (dan gagal).
masuk akal untuk direktori, misalnya jika Anda menyimpan (rahasia) executable di direktori tertentu dan kemudian memungkinkan pengguna memanggil file-file itu tanpa dapat melihat konten direktori (tetapi mengetahui bahwa ada file tertentu setelah Anda memberi tahu mereka!). 333 dibandingkan dengan 111 memungkinkan menulis / menghapus file ke / dari direktori tersebut tanpa dapat melihat isi direktori.
Jelas tidak semua kombinasi bermanfaat, tetapi untuk mengambil kombinasi yang Anda sebutkan secara spesifik ... Anda sebenarnya tidak perlu read
izin untuk mengeksekusi file - hanya execute
izin - kecuali file yang dimaksud adalah skrip (mis. Skrip shell ( .sh
), perl-script ( .pl
) dan sebagainya). Binari normal dapat dijalankan hanya dengan execute
izin. Pada * BSD-systmes, beberapa executable memberikan execute
izin tanpa read
permisson, terutama pada perintah "keamanan-penting" - mis su
.
Jadi mengapa tidak memberikan pengguna read
-permission (dan hanya execute
-permisson)? Karena file yang tidak dapat dibaca oleh pengguna, juga tidak dapat disalin oleh pengguna itu! Menghapus read
izin, mencegah pengguna membuat salinan executable "pribadi" mereka sendiri - yang nantinya bisa disalahgunakan (misalnya didapat SUID=root on
).
Dan tidak memiliki write
-permission, mencegah file agar tidak dihapus dengan benar.
Pikiran Anda, tidak memberikan read
-tidak write
-permintaan kepada pemilik agak jarang, tetapi kadang-kadang mungkin ide yang baik untuk mencegah bahkan owner
dari hanya menghapus file. Tentu saja owner
- belum lagi root
- mungkin selalu menghindari langkah-langkah seperti itu, jika tidak dengan cara lain, maka cukup dengan chmod
izin pada file tersebut.
owner
dari hanya menghapus file." - kecuali bahwa Anda tidak memerlukan izin apa pun pada file (baca, tulis, atau jalankan) untuk menghapusnya.
/proc/${PID}/maps
dan kemudian membaca bagian memori yang relevan dari /proc/${PID}/mem
? Atau apakah membatasi izin pada file yang dapat dieksekusi juga membatasi izin baca pada bagian yang relevan di memori selama eksekusi? (Yang terakhir tampaknya tidak mungkin, IMO.)