Ketika saya mencoba untuk berlari ./script.sh
saya dapat Permission denied
tetapi ketika saya menjalankan bash script.sh
semuanya baik-baik saja.
Apa kesalahan yang telah aku perbuat?
bash
shell-script
permissions
mount
Piotr Stapp
sumber
sumber
getfacl script.sh
?Jawaban:
Izin POSIX salah
Ini berarti Anda tidak memiliki bit izin eksekusi yang ditetapkan
script.sh
. Saat berjalanbash script.sh
, Anda hanya perlu izin baca untukscript.sh
. Lihat Apa perbedaan antara menjalankan "bash script.sh" dan "./script.sh"? untuk info lebih lanjut.Anda dapat memverifikasi ini dengan menjalankan
ls -l script.sh
.Anda bahkan mungkin tidak perlu memulai proses Bash baru. Dalam banyak kasus, Anda bisa menjalankan
source script.sh
atau. script.sh
menjalankan perintah skrip di shell interaktif Anda saat ini. Anda mungkin ingin memulai proses Bash baru jika skrip mengubah direktori saat ini atau memodifikasi lingkungan proses saat ini.Daftar Kontrol Akses
Jika bit izin POSIX diatur dengan benar, Access Control List (ACL) mungkin telah dikonfigurasi untuk mencegah Anda atau grup Anda dari mengeksekusi file. Misalnya izin POSIX akan menunjukkan bahwa skrip shell tes dapat dieksekusi.
Namun, mencoba untuk mengeksekusi hasil file di:
The
getfacl
perintah menunjukkan alasan mengapa:Dalam hal ini, grup utama saya adalah
domain users
yang telah menjalankan izin yang dicabut dengan membatasi ACL dengansudo setfacl -m 'g:domain\040users:rw-' t.sh
. Pembatasan ini dapat diangkat dengan salah satu dari perintah berikut:Lihat:
Filesystem dipasang dengan opsi noexec
Akhirnya, alasan dalam kasus khusus ini karena tidak dapat menjalankan skrip adalah bahwa sistem file tempat skrip berada telah terpasang dengan
noexec
opsi. Opsi ini mengesampingkan izin POSIX untuk mencegah file apa pun pada sistem file tersebut dieksekusi.Ini dapat diperiksa dengan menjalankan
mount
daftar semua sistem file yang terpasang; opsi mount terdaftar dalam tanda kurung di entri yang sesuai dengan sistem file, misalnyaAnda dapat memindahkan skrip ke sistem file lain yang dipasang atau memasang kembali sistem file yang memungkinkan eksekusi:
Catatan: Saya telah menggunakan
/tmp
sebagai contoh di sini karena ada alasan keamanan yang baik untuk tetap/tmp
terpasang dengannoexec,nodev,nosuid
set opsi.sumber
Mencoba
chmod 755 script.sh
ini akan membuat file dapat dieksekusi. Lalu coba,
./script.sh
Semoga ini berhasil.
sumber
Di win7 saya dengan admin menjalankan cmd; Saya memiliki file .sh yang terkait dengan cygwin64 / bin / bash, tetapi diblokir oleh cmd. Tidak ada saran di atas yang membantu (chmod, setfacl, mount).
Solusi di bawah ini berhasil, itu adalah admin sledge-hammer acl-fixer setiap kali folder / file menjadi tidak dapat diakses oleh admin di win7, yang sering kali):
sumber