Chạy tập lệnh sh: «Quyền bị từ chối» mặc dù có quyền thực thi và quyền root


17

Tôi đã cài đặt Debian trong VirtualBox (cho các thử nghiệm khác nhau thường làm hỏng hệ thống của tôi) và cố gắng khởi chạy tập lệnh bổ trợ khách VirtualBox. Tôi đã đăng nhập bằng root và cố gắng khởi chạy autorun.sh, nhưng tôi đã nhận được «Quyền bị từ chối». ls -lcho thấy rằng kịch bản có một quyền thực thi.

Xin lỗi, tôi không thể sao chép đầu ra - VirtualBox hoàn toàn không sử dụng được nếu không có addon, vì cả thư mục dùng chung cũng như bảng tạm được chia sẻ đều hoạt động. Nhưng chỉ để bạn chắc chắn, tôi đã sao chép các quyền bằng tay:

#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh

Lúc đầu tôi nghĩ rằng có thể kịch bản thực thi một cái gì đó đã gây ra lỗi. Tôi đã cố gắng thay thế /bin/shbằng một cái gì đó như #/pathtorealsh/sh -xv, nhưng tôi không có kết quả - có vẻ như kịch bản thậm chí không thể được thực thi.

Tôi thậm chí không biết cái gì có thể gây ra nó.


2
Có vẻ như nó nên hoạt động. Hãy thử chạy nó với bash một cách rõ ràng: `bash -x ./autorun.sh". Có lẽ điều này sẽ cung cấp thêm một manh mối.
nobar

2
Sản lượng của là mount | grep noexecgì?
cuonglm

1
@Gnouc, bạn nói đúng, «cdrom» được gắn có noexecbộ. Có lẽ bạn có thể đăng nó như một câu trả lời; trong khi đó tôi đang cố gắng kể lại nó với quyền thực thi. Hừm, tôi thậm chí còn không biết rằng hệ thống tập tin có thể có một thuộc tính như vậy.
Hi-Angel

Và nếu bạn cố gắng chạy nó thông qua việc đi sh ./autorun.shthì sao?
vào

Câu trả lời:


29

Có thể hệ thống tệp của bạn được gắn với noexecbộ tùy chọn, vì vậy bạn không thể chạy bất kỳ tệp thực thi nào. Từ tài liệu gắn kết :

noexec

Không cho phép thực thi trực tiếp bất kỳ nhị phân nào trên hệ thống tệp được gắn. (Cho đến gần đây, vẫn có thể chạy nhị phân bằng cách sử dụng lệnh như /lib/ld*.so / mnt / binary. Thủ thuật này không thành công kể từ Linux 2.4.25 / 2.6.0.)

Thử:

mount | grep noexec

Sau đó kiểm tra xem hệ thống tập tin của bạn được liệt kê trong đầu ra.

Nếu có, bạn có thể giải quyết vấn đề này, bằng cách gắn lại hệ thống tệp với exectùy chọn:

mount -o remount,exec filesystem

Điều đó đã không làm việc cho tôi. Tôi đã phải ngắt kết nối và sau đó kể lại bình thường. Sau đó, nó hoạt động tốt.
datakid

@datakid: fs của bạn là gì?
cuonglm

Tôi đang gặp vấn đề này với debian 9, một số tệp bị từ chối nếu tập lệnh đang chạy bằng root, nhưng nó xác định là root ... giống như một hành vi của windows, nếu tôi gỡ bỏ & script đã hoạt động! = [
Luciano Andress Martini

Tôi nhận được một tin nhắn rất lạ, hóa ra là vì noexec: "sh: 75: script.sh: Quyền bị từ chối"
tmm1

2

bash -x ./filename.filetypenên làm việc. Nó hoạt động với tôi khi tôi bị từ chối là người dùng root.


Không, vì cuối cùng, vấn đề hóa ra là noexectùy chọn gắn kết, điều này sẽ không hoạt động, bởi vì có thể có nhiều tệp phải được thực thi; tức là filename.filetypesẽ thở hổn hển khi cố gắng thực thi các tệp khác từ cùng một hệ thống tệp. Bạn có thể dễ dàng kiểm tra nó bằng một thử nghiệm đơn giản hóa: tạo một tập lệnh hai dòng in "xin chào", sau đó chỉ cần gọi lại cho mình, nhưng không đặt quyền thực thi. Nếu bạn thực hiện nó với -x, nó sẽ in "xin chào", nhưng sau đó dòng cuộc gọi đệ quy sẽ gây ra lỗi.
Hi-Angel

1

Giải pháp của tôi cho vấn đề này là sử dụng nguồn . Tôi đã ở trên một khối lượng lưu trữ dữ liệu rất quan trọng. Âm lượng này được gắn kết là noexec. Tôi có một kịch bản shell đơn giản có thể thực thi được nhưng gặp sự cố về quyền.

./fixsamplesheet.sh # this guy is executable
-bash: ./fixsamplesheet.sh: Permission denied

source fixsamplesheet.sh # worked fine

Chỉ được thử nghiệm trên Ubuntu của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.