Tôi có thể tạo một thư mục công cộng dưới một thư mục riêng không?


20

Tôi có thư mục cá nhân / a / b trên máy chủ với sự cho phép 700. Tôi không muốn người khác liệt kê nội dung trong / a / b. Chủ sở hữu của / a là root.

Bây giờ tôi cần mở toàn bộ quyền hạn của thư mục / a / b / c cho tất cả người dùng.

Tôi đã thay đổi sự cho phép của / a / b / c thành 777 nhưng nó vẫn không thể truy cập được đối với những người khác.


2
Bạn cần đặt 'bit thực thi' để cho phép truyền tải thư mục (sang ngang / a và / a / b), điều này có thể giải quyết vấn đề của bạn:chmod +x /a/b
ex0ns

Câu trả lời:


34

Bạn có thể. Bạn chỉ cần đặt bit thực thi trên /a/bthư mục. Điều đó sẽ ngăn không thể nhìn thấy bất cứ thứ gì trong b, nhưng bạn vẫn có thể làm mọi thứ nếu bạn trực tiếp đến a/b/c.

% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
  ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
  this.txt

Lưu ý rằng trong khi những người khác không thể liệt kê nội dung của /a/b, họ có thể truy cập các tệp trong thư mục đó nếu họ đoán tên của tệp.

% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory

Vì vậy, hãy đảm bảo duy trì các quyền thích hợp (không có nhóm / thế giới) trên tất cả các tệp / thư mục khác trong bthư mục, vì điều này sẽ tránh được cảnh báo này.


Thay thế cho việc thiết lập bit thực thi, bạn cũng có thể cung cấp một liên kết cứng đến a / b / c nằm ở vị trí khác không?
Đĩa Moby

2
@MobyDisk Bạn không thể liên kết cứng đến một thư mục.
Michael Hampton

Nó sẽ không hoạt động, vì dù thế nào, bạn vẫn cần đọc bđể liên kết đếnc
stevieb

3
Lưu ý rằng có một số cảnh báo quan trọng cho việc này. Nếu bất kỳ tệp nào trong a/bnhóm có nhóm khác / quyền khác và đối thủ biết hoặc có thể đoán tên của họ, đối thủ cho biết có thể tương tác với các tệp đó.
Kevin

Đúng @Kevin, các perm cho mọi thứ bên dưới bnên được đặt để bảo vệ chống lại điều này trước khi tạo c, và sau đó cần có sự siêng năng khi các vật phẩm khác được đưa vào bđể đảm bảo perms chỉ an toàn cho chủ sở hữu.
stevieb

9

Với những quyền đó, bạn không thể đạt được mục tiêu của mình. Để đến thư mục c, bạn phải cho phép tất cả người dùng khác truy cập thư mục bđược thực hiện bằng cách cấp quyền thực thi cho thư mục đó. Với /a/bcài đặt thành chế độ 711, bạn có thể đạt được những gì bạn muốn vì bạn đang cấp thư mục ngang nhưng từ chối đọc và ghi. Nhưng hãy nhớ rằng trong khi những người dùng khác không thể liệt kê các tệp /a/b, họ có thể truy cập các tệp nếu họ đoán tên và các tệp có đủ quyền mở.


3

Nếu người dùng không thể truy cập /a/b, thì họ không thể truy cập bất kỳ tệp nào bên dưới /a/b/c. Các quyền trên /a/b/ckhông liên quan vì thư mục dừng lại ở /a/b.

Nếu tất cả những gì bạn muốn là ngăn thư mục /a/bđược liệt kê, nhưng bạn vẫn ổn với người dùng truy cập tệp /a/bnếu họ đoán tên tệp, thì bạn có thể thực hiện /a/bnhưng không thể đọc được. Trên một thư mục, quyền đọc chỉ kiểm soát liệt kê nội dung thư mục, trong khi quyền thực thi kiểm soát quyền truy cập vào các mục của thư mục đó.

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
 contents of /a/b/

Nếu bạn không muốn người dùng khác có thể truy cập các tệp /a/bngoại trừ /a/b/c, bạn có thể hiển thị /a/b/cqua chế độ xem khác, thông qua liên kết gắn kết .

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
 contents of /a/b/
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.