Saya dapat menjalankan skrip (.sh) dengan dan tanpa skrip tersebut dapat dieksekusi. Jadi di mana tepatnya ini penting?
Katakanlah Anda memiliki file yang myscript
berisi yang berikut:
#!/bin/bash
echo "Hello, World!"
Jika Anda membuat file ini dapat dieksekusi dan menjalankannya ./myscript
, maka kernel akan melihat bahwa dua byte pertama adalah #!
, yang berarti itu adalah file skrip. Kernel kemudian akan menggunakan sisa baris sebagai interpreter, dan meneruskan file sebagai argumen pertama. Jadi, ini berjalan:
/bin/bash myscript
dan bash membaca file dan menjalankan perintah yang dikandungnya.
Jadi, untuk bash (atau penerjemah apa pun yang dibutuhkan skrip Anda) untuk "mengeksekusi" skrip, hanya perlu dapat membaca file.
Jadi, untuk skrip, bit eksekusi hanya membuatnya sedikit lebih nyaman untuk mengeksekusinya. Selama bash dapat dieksekusi, Anda selalu dapat menjalankan bash dengan file skrip sebagai argumen, atau menjalankan bash secara interaktif dan menyalin tempel baris skrip per baris ke terminal Anda untuk menjalankan perintah.
Pastikan Anda tidak bingung "menjalankan skrip shell" dengan "jalankan skrip shell menggunakan sh".
Ini tidak akan terpengaruh oleh izin file pada
file.sh
:Anda mengeksekusi
sh
(yang memutuskan ke program/bin/sh
), yang membacafile.sh
dan mengeksekusi kode itu.Izin file akan berpengaruh jika Anda benar - benar menjalankan skrip itu sendiri :
Perhatikan bahwa izin file tidak didukung oleh sistem file non-Linux, seperti FAT. Jadi, bahkan jika Anda menjalankan
chmod -x file.sh
, file itu masih akan memiliki izin sebelumnya.Jalankan izin ditegakkan oleh sistem file. Tetapi program dapat "mengeksekusi" kode juga dengan membaca konten file, yang mem-bypass izin sistem file pada "eksekusi".
sumber
bash
) untuk melakukan eksekusi - untuk memblokir bahwa Anda harus mengambilread
izin mereka juga.If you set the executable permission, the script can be run directly by users who have that permission - whether they have it on a group, world or owner basis
Tetapi bagaimana izin diberikan kepada pengguna yang berbeda dengan memeriksa izin yang dapat dieksekusi? Dan saya mendapat poin kedua Anda. Maksud Anda mengambil izin baca skrip mereka sehingga mereka bahkan tidak bisa memprosesnya melalui bash. Kanan?sudo chmod g+x myfile.sh
di terminal untuk menambahkan izin eksekusi untuk grup file. Lihat tutorial Izin file . Untuk mengelola izin untuk beberapa pengguna secara bersamaan, Anda akan menggunakan grup, lihat misalnya Mengelola grup .Jangan berpikir seperti itu. Bisakah saya menjalankan file ini? Pikirkan seperti itu: Siapa yang dapat menjalankan file ini?
Jika komputer itu milik Anda dan file itu milik Anda, saya yakin Anda bisa menjalankannya. Anda mungkin ingin melihat lebih jauh ke perintah seperti chmod dan chown , dan mengajukan izin.
Saya harap itu membantu.
sumber
The
exec
syscall dari kernel Linux gagal denganEACCES
jika file tersebut tidak executableMeskipun Anda dapat melakukannya
sh myprog.sh
(yang hanya membaca file dan interpretasinya), mencoba menjalankan program tersebut karena./myprog.sh
tidak dapat berfungsi, karena ketika Anda melakukannya:exec
system call on./myprog.sh
exec
system call dari kernel Linux seperti yang dijelaskan di: /programming/2429511/why-do-people-write-the-usr-bin-env-python-shebang-on -the-first-of-a-pyt / 40938801 # 40938801Ini dapat diverifikasi dengan
main.c
:dan
myprog.sh
:Jika
myprog.sh
tidak dapat dieksekusi,main
gagal dengan:Diuji di Ubuntu 17.10
gcc -std=c99
,.POSIX 7 menyebutkan bahwa pada:
Dasar pemikiran lebih lanjut dapat ditemukan di: /security/66550/unix-execute-permission-can-be-easy-bypassed-is-it-superfluous-atau-whats-the
sumber