Quyền chính xác cho / tmp là gì? Tôi vô tình thiết lập tất cả công khai đệ quy


78

Tôi đã lạm dụng sudo.

Tôi đã tạo một thư mục tạm thời thực sự ngắn mà tôi muốn chia sẻ giữa một số người dùng trong vài giờ ... và tôi đặt tên cho thư mục này /some/path/tmp

Thật không may, tôi đã đưa ra sudo chown 777 -R /tmpthay vì sudo chown 777 -R tmp, vì vậy /tmptập tin của tôi bây giờ hoàn toàn công khai.

Tôi sử dụng phổ biến /tmpkhá thường xuyên (mỗi ngày, gần như mỗi giờ) cho các tệp cuộc sống ngắn, tập lệnh, rất nhiều tập lệnh.

Nó có phải là một mối quan tâm bảo mật bây giờ khi nó hoàn toàn được đặt thành công khai? Tôi có nên thay đổi lại thành các cài đặt an toàn hơn hoặc như các cài đặt mặc định phổ biến cho bản phân phối Debian hoặc Ubuntu - (Tôi không biết chúng là gì)? Các quyền chính xác là /tmpgì?


Xin lưu ý rằng tôi đã quên một điều quan trọng trong câu trả lời ban đầu của mình: ổ cắm X11 cần được truy cập công khai, nếu không bạn sẽ không thể khởi động các ứng dụng GUI mới. Tôi đã cập nhật câu trả lời của mình.
Gilles

Là nó chownhay chmod?
Melebius

@Melebius Tôi hơi bối rối trước câu hỏi của bạn: Tôi không đề cập đến chmod. chown (như ch - own), là về quyền sở hữu các tệp mà người dùng sở hữu một tệp. chmod (như ch - sửa đổi) là về người có thể thực thi, hoặc viết bên trong hoặc đọc nội dung của tệp.
Stephane Rolland

2
@StephaneRolland Vâng, đó là điều làm tôi bối rối. Bạn có thể sử dụng chown 777quyền đặt quyền sở hữu tệp cho người dùng bằng ID 777. Tuy nhiên, tất cả các câu trả lời, bao gồm cả câu trả lời được chấp nhận, đều hoạt động với chmod. Vì tất cả chúng đều đặt quyền cho cùng một giá trị cho tất cả người dùng (chủ sở hữu, nhóm, những người khác), hầu hết các tác động của quyền sở hữu tệp trở nên không liên quan. Tuy nhiên, lệnh chính xác để khắc phục kết quả sudo chown 777 -R /tmpnên được sudo chown root -R /tmp.
Melebius

Câu trả lời:


117

Các cài đặt bình thường cho /tmplà 1777, lshiển thị là drwxrwxrwt. Đó là: mở rộng, ngoại trừ việc chỉ chủ sở hữu của một tệp có thể loại bỏ nó (đó là ý tnghĩa của bit bổ sung này cho một thư mục).

Vấn đề với /tmpchế độ 777 là người dùng khác có thể xóa một tệp mà bạn đã tạo và thay thế nội dung họ chọn.

Nếu bạn /tmplà một hệ thống tập tin tmpfs, khởi động lại sẽ khôi phục lại mọi thứ. Nếu không, chạy chmod 1777 /tmp.

Ngoài ra, rất nhiều tập tin /tmpcần phải ở chế độ riêng tư. Tuy nhiên, ít nhất một thư mục cực kỳ cần phải có thể đọc được trên thế giới: /tmp/.X11-unixvà có thể một số thư mục tương tự khác ( /tmp/.XIM-unix, v.v.). Lệnh sau chủ yếu nên đặt đúng mọi thứ:

chmod 1777 /tmp
find /tmp -mindepth 1 -name '.*-unix' -exec chmod 1777 {} + -prune -o -exec chmod go-rwx {} +

Tức là làm cho tất cả các tệp và thư mục riêng tư (loại bỏ tất cả các quyền cho nhóm và khác), nhưng làm cho tất cả các ổ cắm X11 có thể truy cập được. Kiểm soát truy cập trên các ổ cắm này được thực thi bởi máy chủ, không phải bởi các quyền của tệp. Có thể có các ổ cắm khác cần phải được công khai. Chạy find /tmp -type s -user 0để khám phá các ổ cắm thuộc sở hữu gốc mà bạn có thể cần để truy cập trên toàn thế giới. Cũng có thể có ổ cắm thuộc sở hữu của người dùng hệ thống khác (ví dụ: để giao tiếp với xe buýt hệ thống); khám phá với find /tmp -type s ! -user $UID( $UIDID người dùng của bạn ở đâu ).


1
bạn có thể giải thích chmod thứ hai nhiều hơn?
Bartlomiej Lewandowski

@BartlomiejLewandowski go-rwx: không có quyền cho nhóm và những người khác. Điều này đặt các quyền thành rwx------(ngoại trừ các tệp được tạo vì chmodcó thể có ít quyền hơn, ví dụ rw-------). Nói cách khác, các tập tin sẽ chỉ có thể được truy cập bởi chủ sở hữu của họ. /tmp/.[!.]*là bao gồm các tập tin dấu chấm, thường tồn tại trong /tmp.
Gilles

@BartlomiejLewandowski: chmod -go-rwx: đặt quyền "rwx" cho Chủ sở hữu và Nhóm. r = read, w = write, x = exec (đối với tệp) hoặc enter / traverse (đối với thư mục). 777 = rwxrwxrwx (phần bên phải có thể được xem là: "set 'r' set 'w' set 'x', set 'r' set 'w' set 'x', set 'r' set 'w' set 'x '", trong nhị phân được biểu diễn là" 111111111 "(1 thành đặt, 0 thành không đặt). Và" 111111111 "trong nhị phân được biểu thị dưới dạng bát phân là" 777 "(bát phân = nhóm 3 bit, mỗi nhóm có giá trị 0 đến 7). Nếu "rwxr-xr--" thì đó sẽ là "111101100" mà trong bát phân là "754"
Olivier Dulac

2
+ T được gọi là bit dính. Đó là điều khiến cho bất kỳ ai khác ngoài chủ sở hữu không thể xóa các tệp, mặc dù các quyền là 777. Các bit dính ban đầu là để cho kernel rời khỏi các chương trình thông thường trong bộ nhớ khi chúng thoát ra để chúng không phải được lấy từ đĩa khi chạy lần sau. Chúng ta đang nói chuyện PDP11 ngày ....
kurtm

1
@GabrielFair Tôi đã thay thế lệnh bằng cách sử dụng ký tự đại diện bằng cách sử dụng find mà sẽ không gặp phải vấn đề đó.
Gilles

10

/tmp/var/tmpnên đọc, viết và thực thi quyền cho tất cả mọi người; nhưng bạn thường sẽ thêm bit dính ( o+t), để ngăn người dùng xóa các tệp / thư mục thuộc về người dùng khác. Vì vậy chmod a=rwx,o+t /tmpnên làm việc.

Đối với việc thay đổi quyền theo cách đệ quy ... Miễn là chủ sở hữu / nhóm vẫn giữ nguyên các tệp và thư mục, thì đó không phải là vấn đề. Nhưng có lẽ bạn có thể thay đổi sự cho phép của mọi thứ bên dưới /tmp(không phải / tmp) để đảm bảo quyền riêng tư của người dùng, bằng cách xóa rxquyền của người khác và có lẽ cả nhóm.

Tìm là một cách tốt để làm điều này. Là root, làm:

cd /tmp
find . -type f -exec chmod u=rw,go= {} \;   # (or u=rw,g=r,o= {})
find . -type d -exec chmod u=rwx,go= {} \;  # (or u=rwx,g=rx,o= {})

Trên một hệ thống máy tính để bàn thông thường, bạn cũng nên làm cho nó /tmp/.X11-unix/*dễ đọc hơn hoặc bạn sẽ không thể khởi động các ứng dụng X nữa.
Gilles

chmod a=rwX,o+t /tmp -Rnên làm findphép thuật.
khó khăn

3
[root@Niflheim tmp]# ls -alF .
total 1632
drwxrwxrwt 15 root root    4096 Apr  7 04:24 ./
drwxr-xr-x 28 root root    4096 Apr  2 21:02 ../
[root@Niflheim tmp]# stat -c '%A %a %n' .
drwxrwxrwt 1777 .

Từ máy CentOS 5.9.

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.