Apakah file yang dapat dieksekusi dapat dibaca?

9

Jika suatu file memiliki izin -rwx-wx-wxdapatkah itu dibaca oleh pengguna lain dan grup, atau dapatkah itu hanya dijalankan dan ditulis? Apakah ada cara untuk membaca file yang dapat dieksekusi dengan mengeksekusinya?

Tom
sumber
Tidak ada cara standar yang bisa saya katakan.
Tim

Jawaban:

18

File dengan -rwx-wx-wxizin telah membaca / menulis / mengeksekusi izin untuk pemilik, dan menulis / mengeksekusi (tetapi tidak membaca) izin untuk semua orang.

Jika itu skrip (biasanya file teks dengan a #!di baris pertama), maka skrip tidak dapat dieksekusi oleh orang lain, karena mengeksekusi skrip benar-benar mengeksekusi penerjemah, yang harus dapat membaca skrip. (Penerjemah harus berupa biner, bukan skrip lain.) (Sebenarnya, itu tidak benar untuk semua sistem; Ubuntu, dengan kernel Linux 3.2.0, memungkinkan penafsir itu sendiri menjadi skrip yang ditafsirkan. Tampaknya ada batas sekitar 4 level. Itu tidak mungkin relevan dengan pertanyaan ini.)

Jika ini adalah biner yang dapat dieksekusi, ia dapat dieksekusi secara langsung, tetapi isinya tidak dapat dibaca. Ini berarti, misalnya, bahwa orang lain selain pemilik dapat menjalankannya sebagai perintah, tetapi tidak dapat mengambil salinan yang dapat dieksekusi.

Tentu saja eksekusi membutuhkan pembacaan, tetapi dibaca oleh kernel, bukan oleh pengguna. Anda mungkin bisa mendapatkan beberapa informasi tentang isi file yang dapat dieksekusi dengan memeriksa memori proses yang sedang berjalan, tetapi saya ragu Anda bisa merekonstruksi file executable biner. Dan jika executable adalah setuid, Anda tidak dapat memeriksa memori proses (kecuali Anda memiliki akses ke akun yang menjalankannya).

Secara kebetulan, -rwx-wx-wxadalah seperangkat izin yang sangat aneh; melindungi file agar tidak dibaca oleh siapa pun selain pemiliknya, tetapi memungkinkan siapa pun untuk memodifikasinya. Saya tidak bisa memikirkan kasus di mana itu masuk akal.

Keith Thompson
sumber
Hanya pertanyaan acak abstrak: Akankah alat profiling / debugging berfungsi pada eksekutif dengan hanya izin yang dapat dieksekusi?
Sairam
@Airam: Eksperimen mengatakan tidak: chmod 111 hello ; gdb ./hellomengatakan ./hello: Permission denied.; rkataNo executable file specified.
Keith Thompson
Untuk yang tidak dapat dieksekusi, sesuatu seperti -rw - w - w- dapat berguna untuk sesuatu seperti file log di mana Anda ingin orang dapat menulis info ke log tanpa bisa membacanya. Tentu saja, mereka hanya bisa mengosongkan file, tapi itu masalah tersendiri.
Dave
6

Dengan izin itu, hanya pemilik file yang dapat menjalankannya.

Pengguna lain dapat menulis kepadanya, tetapi tidak mengeksekusinya (karena eksekusi dalam kasus ini menyiratkan kemampuan untuk membacanya) tetapi mereka dapat menulis kepadanya sebagai semacam kotak hitam:

user1:~$ cd /tmp
user1:/tmp$ echo "hostname" > testfile.sh
user1:/tmp$ chmod +x testfile.sh 
user1:/tmp$ ./testfile.sh  
server.example.com

user1:/tmp$ chmod 733 testfile.sh 
user1:/tmp$ ls -l testfile.sh 
-rwx-wx-wx 1 user1 user1 9 Jan 19 21:09 testfile.sh

user1:/tmp$ sudo su - user2
user2:~$ cd /tmp
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied
user2:/tmp$ cat testfile.sh 
cat: testfile.sh: Permission denied

user2:/tmp$ echo 'echo hello' >> testfile.sh 
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied

user2:/tmp$ logout

user1:/tmp$ ./testfile.sh
server.example.com
hello
cjc
sumber
4
Skrip shell memerlukan BACA serta akses EXECUTE untuk dijalankan. Namun, biner yang dikompilasi TIDAK. Dengan demikian biner yang dikompilasi dengan izin di atas dapat dijalankan oleh siapa saja!
mdpc
1
Saya kira ini memunculkan pertanyaan tentang apa yang OP coba capai, yaitu, mengapa biner yang dikompilasi dapat ditulis? Set izin (733) sebenarnya membutuhkan waktu bagi saya untuk mencari tahu, karena itu sangat tidak standar.
cjc
2

Jawaban sederhananya adalah tidak : hanya execsyscall yang dapat membaca file tanpa memerlukan akses baca (walaupun mewajibkan akses eksekusi ). An opendengan O_RDONLYatau O_RDWRakan gagal.

yrk
sumber
1

Tentu saja file apa saja dapat dibaca oleh pengguna root.

Juga, pemuat sistem, manajemen memori, swapper, dll .... akan membaca file dengan izin 'x', jika tidak maka tidak dapat dijalankan.

Kemungkinan lubang dalam pengungkapan konten yang dapat dieksekusi dapat berupa file / proc untuk proses, file inti, atau dengan menggunakan debugger.

mdpc
sumber
ini hanya benar jika a chmod| chowntelah dilakukan
warren