Cờ NOEXEC có nghĩa là gì khi gắn thư mục trên RHEL?


11

Tôi đang cố gắng để hiểu cờ NOEXEC khi gắn kết.

Tôi đang gặp sự cố thực thi trong thư mục / tmp trên máy của ai đó mà tôi không thể truy cập atm nơi thư mục / tmp được gắn vào một ổ đĩa khác với '/' và NOEXEC có mặt. Tôi muốn thử và tạo lại kịch bản này trên máy của mình, nhưng tôi không có ổ cứng thứ hai. Tôi đã thử thực hiện lệnh sau:

mount --bind /test1 /test2

Sau đó tôi xóa bindcờ và thêm NOEXECvào / etc / fstab. Sau đó, tôi đã tạo một tệp trong / test2 có tên test.sh trong đó nó chỉ là tiếng vang 'xin chào thế giới'. Tôi thử và chạy nó và nó nói 'quyền bị từ chối'. Sau đó tôi đã chạy chmod 777 test.shvà có thể thực hiện các tập tin tốt. Tôi nghĩ rằng cờ NOEXEC không cho phép tôi thực thi bất cứ điều gì?

Không mount --bind /test1 /test2giống như gắn từ một ổ đĩa vật lý hoàn toàn khác nhau? Vì trong / test1 và / test2 có trên các ổ đĩa khác nhau không?


Tôi nghi ngờ bạn có thể là nạn nhân của một số đặc thù của gắn kết. Xem câu trả lời này .
Kamil Maciorowski

Câu trả lời:


7

Cờ tùy chọn 'NOEXEC' trong mountlệnh không cho phép thực thi các nhị phân thực thi trong hệ thống tệp được gắn 1 . Tuy nhiên, khi một tập lệnh (một tệp văn bản bắt đầu bằng dòng she-bang; nghĩa là một dòng bắt đầu bằng #!) được đưa cho một số shell (bash), nó sẽ chạy tệp thực thi có tên trên dòng đó (ví dụ /usr/bin/perl:) đường dẫn của kịch bản shell làm đối số đầu tiên. Trình thông dịch thực tế có thể không nằm trên đỉnh đó.
__________
1 Các mountlệnh thường gắn kết một hệ thống tập tin . (Có thể cho rằng, loop-back hoặc bindmount có thể được coi là một ngoại lệ đối với tính tổng quát này.) Trong một số trường hợp (ví dụ /tmp:), hệ thống tệp này sẽ chỉ chứa một thư mục.


Vì vậy, mặc dù tệp sh nằm trong / test2, nhưng nó đang được thực thi trong / bin / sh chứ không phải / test2? Trên máy khác, có một quá trình java đang ghi các kịch bản shell vào thư mục / tmp và sau đó thực thi chúng. Tôi nghĩ rằng tôi nhớ các kịch bản shell mà nó đang tạo có #!/bin/shở trên cùng. Tôi không biết làm thế nào kịch bản shell được thực thi ngoài việc nó đi qua java và tài liệu tham khảo / bin / sh. Nếu nó là tham chiếu / bin / sh và thư mục bin đã thực thi các đặc quyền, tại sao các tập lệnh shell sẽ thực thi như chúng đã làm trong thử nghiệm của tôi?
dùng972276

Đó là tất cả các lệnh gọi shell / chương trình, các kịch bản shell không phải là ELF và không thể được thực thi trực tiếp, tuy nhiên một số shell sẽ không cho phép tập lệnh trên một FS được gắn NOEXEC chạy, chúng sẽ chết. Tôi không chắc hành vi của / bin / sh là gì trong trường hợp này. (Đặc biệt là vì tôi không biết bạn đang sử dụng loại nào, có một vài hương vị).
KJ4IPS

Hãy nghĩ về nó, khi bạn sử dụng shell, hệ thống sẽ thông báo #! và gọi interpereter thích hợp (/ bin / bash /tmp/file.sh), nhưng nếu bit java chỉ gọi (/tmp/file.sh), điều đó sẽ không hoạt động.
KJ4IPS

cá thể java không có trong thư mục / tmp và sẽ cần sử dụng trình thông dịch để thực thi các kịch bản shell phải không? Trừ khi java có chức năng tích hợp sẵn, điều đó có nghĩa là việc thực thi vẫn sẽ không xảy ra trong thư mục / tmp.
dùng972276

Theo ý kiến ​​của tôi, câu trả lời của bạn đã sai khi cho rằng đó là công việc của vỏ để đọc một shebang. Xem câu trả lời này .
Kamil Maciorowski
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.