Điểm:0

gcsfuse không mở được/dev/fuse: Quyền bị từ chối

lá cờ de

Tôi đang chạy lệnh sau bên trong vùng chứa với tư cách là người dùng bình thường, không phải root

gcsfuse --foreground --debug_fuse --debug_fs --debug_gcs --debug_http my-bucket /data

Và nó hoạt động tại địa phương khi tôi bắt đầu container với --đặc quyền và đó là tốt.

Nhưng điều tương tự không hoạt động trên Cloud Run (khi sử dụng môi trường thực thi xem trước thế hệ thứ 2). Tôi nhận được lỗi sau đây:

2022-05-13 12:08:41.547 CEST gcs: 2022/05/13 10:08:41.546642 Req 0x1: -> ListObjects("") (46.897367ms): OK
13-05-2022 12:08:41.551 CEST /usr/bin/fusermount: không mở được /dev/fuse: Quyền bị từ chối
13-05-2022 12:08:41.551 CEST mountWithArgs: mountWithConn: Mount: mount: running /usr/bin/fusermount: thoát trạng thái 1

Tất cả các dòng nhật ký gỡ lỗi khác, HTTP, GCS, v.v. đều cho thấy mọi thứ đều hoạt động.

Tôi tạo người dùng của mình như thế này trong Dockerfile

CHẠY useradd -lmU joe\
  && mkdir -p /dữ liệu \
  && chown -R joe:joe /data
NGƯỜI DÙNG

Các tài liệu nói rằng tôi nên chạy gcsfuse với tư cách là người dùng sẽ sử dụng hệ thống tệp chứ không phải với quyền root, nhưng nó không hoạt động. Bất cứ ý tưởng những gì tôi đang làm sai?

Priyashree Bhadra avatar
lá cờ in
Hãy xem [câu trả lời] này (https://stackoverflow.com/a/70430026/15803365).Người đăng câu hỏi (https://stackoverflow.com/questions/70407189/unable-to-mount-bucket-with-gcsfuse-on-cloud-run) gặp phải thông báo lỗi tương tự và không thể gắn thùng với gcsfuse trên Cloud Run.
lá cờ de
@PriyashreeBhadra Cảm ơn! Tôi đã xem câu hỏi/câu trả lời đó, nhưng tôi nghĩ việc sử dụng `777` sẽ không đạt được mục đích. Với `root`, đối với tôi mọi thứ đều hoạt động, nhưng các tài liệu khuyến khích rằng người ta không nên sử dụng `root`, vì vậy .. IMHO điều này là không tối ưu. (Mục đích là tuân theo cách tiếp cận *bảo mật trước tiên* khi xử lý các vùng chứa.) Có thể điều này hoàn toàn không khả thi, nhưng đó là câu trả lời! :)
Priyashree Bhadra avatar
lá cờ in
Theo mặc định, tất cả các nút trong hệ thống tệp gcsfuse hiển thị là thuộc sở hữu của UID và GID của chính quy trình gcsfuse, tức là người dùng đã gắn hệ thống tệp. 644 và 755 là các quyền mặc định cho tất cả các inode tệp và thư mục trong hệ thống tệp gcsfuse. Việc thay đổi chế độ inode (sử dụng chmod(2) hoặc tương tự) không được hỗ trợ và các thay đổi sẽ bị bỏ qua một cách âm thầm.
Priyashree Bhadra avatar
lá cờ in
Khi bạn gắn bộ chứa lưu trữ của mình bằng gcsfuse, lớp nhân cầu chì sẽ hạn chế quyền truy cập hệ thống tệp đối với người dùng đã gắn hệ thống tệp. Nếu bạn muốn cấp quyền truy cập cho những người dùng khác, bạn có thể ghi đè hành vi này bằng tùy chọn mount allow_other cùng với các cờ --uid và --gid. Tuy nhiên, hãy nhớ rằng điều này có thể có ý nghĩa bảo mật. Xem [tại đây](https://github.com/googlecloudplatform/gcsfuse/blob/master/docs/semantics.md#inodes) để biết tài liệu.
lá cờ de
`hệ thống tệp gcsfuse hiển thị dưới dạng được sở hữu bởi UID và GID của chính quy trình gcsfuse` Đó chính xác là điều tôi muốn. Bắt đầu `gcsfuse` với tên `joe`, hiện không hoạt động. `Nếu bạn muốn cung cấp quyền truy cập cho những người dùng khác, bạn có thể ghi đè hành vi này bằng allow_other mount` Nhưng tôi không muốn, vì lý do chính xác mà bạn đề cập rằng điều này có ý nghĩa bảo mật. Tôi bắt đầu thấy rằng vấn đề này là vấn đề về môi trường Cloud Run chứ không phải vấn đề về `gcsfuse`, tuy nhiên, vì người dùng Cloud Run có khả năng là những người có thể tận dụng vấn đề này nhiều nhất nên tôi sẽ để ngỏ câu hỏi này.
Priyashree Bhadra avatar
lá cờ in
Tôi nghĩ rằng tôi đã thấy nhiều người sử dụng các dịch vụ khác ngoài Cloud Run với gcsfuse (ví dụ như VM instance). Theo hiểu biết của tôi, câu hỏi này có vẻ là một câu hỏi về quyền gcsfuse chứ không phải là Cloud Run đối với tôi, nhưng vâng, nó hợp lệ nếu một người không muốn thực hiện chmod với quyền 777/666 hoặc sử dụng allow_other. Tôi đã xem qua GitHub này [nhận xét vấn đề](https://github.com/GoogleCloudPlatform/gcsfuse/issues/236#issuecomment-361956965) có vẻ công bằng. Bạn có thể thử tự thêm mình vào nhóm cầu chì và thay đổi nhóm thành cầu chì trong thiết bị/dev/fuse không. Hãy cho tôi biết nếu điều đó khả thi đối với bạn
lá cờ de
`/dev/fuse` chỉ khả dụng khi vùng chứa thực sự khởi động nên người dùng `joe` của tôi không có `root` không thể thay đổi quyền sở hữu và vì thiết bị được sở hữu bởi `root:root` nên tôi không thể làm gì với nó. Tôi đã cố gắng tạo nhóm `fuse` và thêm người dùng của mình vào đó, nhưng ... có vẻ như nó không hoạt động. Tôi sẽ cố gắng bất cứ khi nào tôi có thời gian, ... nhưng! Mọi thứ hoạt động cục bộ với cờ `--priviliged` được chuyển đến `docker run` mặc dù thiết bị được sở hữu bởi `root:root`. Trong nhận xét về vấn đề GitHub, người ta nói rằng họ thay đổi *nhóm để hợp nhất trong thiết bị `/dev/fuse`*. Sau đó, họ phải thực thi dưới `root`.
lá cờ de
* Sau đó, chúng phải thực thi dưới quyền root. * Sau đó, đó là một giải pháp * loại *, mặc dù hơi khó hiểu một chút. Cảm ơn bạn đã đề cập đến vấn đề GitHub này, tôi đã đăng ký!
Điểm:1
lá cờ in

Đối với cộng đồng đang tìm kiếm câu trả lời cho câu hỏi này:

Theo điều này câu trả lời, việc thêm -file-mode=777 -dir-mode=777 cùng với lệnh gcsfuse trong gcsfuse.sh để cho phép đọc/ghi bên trong thư mục được gắn của bộ chứa GCS sẽ là một tùy chọn nhưng vì Kohányi Róbert xác nhận rằng nó không phục vụ mục đích này vì lý do bảo mật. Tôi đào sâu hơn và tôi tìm thấy thông tin thực sự hữu ích này:

  • Theo mặc định, tất cả các nút trong hệ thống tệp gcsfuse hiển thị dưới dạng thuộc sở hữu của UID và GID của chính quy trình gcsfuse, tức là người dùng người đã gắn hệ thống tập tin. 644 và 755 là các quyền mặc định cho tất cả các inode tệp và thư mục trong hệ thống tệp gcsfuse. Thay đổi chế độ inode (sử dụng chmod(2) hoặc tương tự) không được hỗ trợ và thay đổi đang âm thầm bỏ qua.

  • Khi bạn gắn bộ chứa lưu trữ của mình bằng gcsfuse, nhân cầu chì lớp hạn chế quyền truy cập hệ thống tệp đối với người dùng đã gắn tệp hệ thống. Nếu bạn muốn cung cấp quyền truy cập cho người dùng khác, bạn có thể ghi đè hành vi này bằng tùy chọn mount allow_other cùng với cờ --uid và --gid. Tuy nhiên, hãy nhớ rằng điều này có thể có ý nghĩa bảo mật. Nhìn thấy đây cho tài liệu

  • Nếu một người không muốn thực hiện chmod với quyền 777/666 hoặc sử dụng allow_other anh ấy có thể thử tự thêm mình vào nhóm cầu chì và thay đổi nhóm để hợp nhất trong thiết bị/dev/fuse. Tôi đã xem qua GitHub này bình luận vấn đề mà có vẻ công bằng. Mọi thứ hoạt động cục bộ với --privileged cờ được truyền cho docker run mặc dù thiết bị được sở hữu bởi gốc: gốc. Trong bình luận về vấn đề GitHub, người ta nói rằng họ thay đổi nhóm thành cầu chì trong thiết bị/dev/fuse. Họ phải thực hiện dưới quyền root và đó có thể là một giải pháp cho tất cả người dùng không muốn trải qua 777/ allow_other/ --uid,--gid, 666 hacks.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.