Làm cách nào để đặt quyền truy cập tệp để các tệp mới kế thừa quyền tương tự? [bản sao]


35

Câu hỏi này đã có câu trả lời ở đây:

Tôi có một thư mục trong đó các thư mục con và tệp mới sẽ được tạo tự động, bằng một tập lệnh.

Tôi muốn duy trì đệ quy quyền của người dùng và nhóm cho tất cả các thư mục và tệp mới được đặt trong thư mục mẹ. Tôi biết điều này liên quan đến việc thiết lập một bit dính, nhưng dường như tôi không thể tìm thấy một lệnh hiển thị chính xác những gì tôi cần.

Đây là những gì tôi đã làm cho đến nay:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

Sau đó, tôi muốn các quyền 660 được đặt đệ quy cho bất kỳ thư mục và tệp nào được đặt trong đó /path/to/parent.

Tuy nhiên, mọi thứ tôi đã thử cho đến nay đều thất bại. Ai đó có thể giúp tôi không?

Trên thực tế cờ bát phân 660 có lẽ thậm chí không chính xác. Các quyền tôi muốn là:

  1. Các thư mục được đặt dưới /path/to/parentđây có thể được thực thi bởi người dùng có quyền
  2. các tệp được đọc / ghi bởi chính người dùng và các thành viên của một số nhóm
  3. Các tập tin và thư mục trong /path/to/parentthế giới KHÔNG thể đọc được

Tôi đang chạy trên Ubuntu 10.0.4 LTS.

Ai đó có thể giúp tôi không?

Câu trả lời:


10

Grawity đưa ra một câu trả lời xuất sắc nhưng tôi nghi ngờ câu hỏi được chỉnh sửa có thể đã thay đổi mọi thứ một chút.

Tôi sẽ đề nghị rời khỏi thư mục thuộc sở hữu của người dùng / nhóm apache. Đây có thể sẽ là apache hoặc httpd tùy thuộc vào phân phối của bạn.

ví dụ

chown -R apache:apache /path/to/parent

Sau đó, bạn có thể làm một cái gì đó như https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian hoặc thậm chí thêm chính bạn vào nhóm apache để đảm bảo bạn có quyền truy cập nhóm vào thư mục. (Một cái gì đó như usermod -aG apache username)

Tôi sẽ không chmod -Rtoàn bộ thư mục bởi vì bạn không muốn các tập lệnh html hoặc jpg hoặc ngẫu nhiên những thứ khác có thể thực thi được. Bạn nên thay đổi quyền theo yêu cầu. (mặc dù đặt lại thành 660 có thể không phải là ý tưởng tồi tệ nhất.)

Một cái gì đó bạn có thể muốn thử là:

chmod o+w file

'O' có nghĩa là 'khác' & 'w' có nghĩa là 'viết'. Bạn cũng có thể có 'u' cho 'người dùng' & 'g' cho 'nhóm', cũng như 'r' & 'x' mà hy vọng sẽ tự giải thích. Bạn có thể xóa quyền bằng cách sử dụng '-' thay vì '+'.


Giải pháp đơn giản nhất tôi nghĩ, là thêm bản thân mình vào nhóm người dùng apache. Cảm ơn đã gợi ý rằng. Tôi không biết tại sao tôi không nghĩ về điều đó bản thân mình!
oompahloompah

1
o+wmột lựa chọn tốt ở đây? Không nên thay đổi giới hạn ug? Nếu không, điểm cố gắng để duy trì bảo mật trên thư mục và thư mục con là gì?
jww

61

Các bit cho phép bạn đang tìm kiếm là 0770 và 0660.

  • rw-quyền → 110nhị phân → 6bát phân

Các quyền sở hữu nhóm có thể được thừa hưởng bởi các tập tin mới và thư mục được tạo ra trong thư mục cha / path / to / bạn bằng cách thiết lập các bit setgid sử dụng chmod g+snhư thế này:

chmod g+s /path/to/parent

Bây giờ, tất cả các tệp và thư mục mới được tạo trong / path / to / Parent sẽ có cùng một nhóm được gán như được đặt trên / path / to / Parent.


Quyền truy cập tệp POSIX không được kế thừa; chúng được đưa ra bởi quá trình tạo và kết hợp với giá trị umask hiện tại của nó.

Tuy nhiên, bạn có thể sử dụng POSIX ACL để đạt được điều này. Đặt ACL mặc định trên một thư mục:

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

Điều này sẽ áp dụng setfaclcho thư mục / path / to / -mParent , loại bỏ các ACL -default - những thứ sẽ được áp dụng cho các mục mới được tạo. (Chữ hoa Xcó nghĩa là chỉ các thư mục sẽ nhận được +xbit.)

(Nếu cần, bạn có thể thêm một u:someuser:rwXhoặc g:someuser:rwX- tốt nhất là một nhóm - vào ACL.)


Lưu ý: Trên các hệ thống cũ sử dụng ext3 / ext4, bạn đã từng cần gắn hệ thống tệp với acltùy chọn, nếu không, nó sẽ bỏ qua tất cả các ACL và không cho phép cài đặt các hệ thống mới.

mount -o remount,acl /

Để thiết lập điều này vĩnh viễn, sử dụng tune2fs -o acl <device>hoặc chỉnh sửa /etc/fstab.


5
Cảm ơn đã dành thời gian trả lời. Thật không may, tôi khá mới với tất cả những điều này, và những gì bạn viết không thể phân biệt được với tiếng Hy Lạp đối với tôi (xin lỗi với bất kỳ SO'ers Hy Lạp nào!). Tôi không hiểu hầu hết những gì bạn viết. Tôi có một quy trình web và tôi muốn cung cấp cho Apache khả năng tạo các thư mục và tệp trong thư mục mẹ, nơi chỉ có Apache (chủ sở hữu) và tôi (nhóm) có khả năng rw các tệp và thay đổi thành các thư mục. Mọi người khác đều bị cấm. đó là tất cả những gì tôi đang cố gắng làm Apache cần có khả năng tạo các thư mục con và lưu trữ các tệp trong đó.
oompahloompah

Điều này không làm việc với unzip?
datan.io

2

Tôi nghĩ rằng bạn đang quá phức tạp vấn đề. Nếu thư mục cấp cao nhất không thể truy cập được cho người khác, thì những người khác sẽ không thể tạo tệp trong cây. Truy cập viết nhóm là không cần thiết nếu chỉ có apache đang thực hiện viết.

Các bước này sẽ làm những gì bạn muốn (thay thế thư mục trong các lệnh bằng thư mục bạn muốn sử dụng):

  • thêm umask 027vào kịch bản mặc định apache /etc/default/apache. Điều này sẽ ngăn người khác truy cập vào bất kỳ tập tin hoặc thư mục apache tạo.
  • thực hiện chown www-data:www-data directorytrên thư mục bạn muốn apache để có thể ghi vào.
  • thực hiện chmod 750 directorytrên thư mục bạn muốn apache để có thể ghi vào.

Cho phép apache ghi vào thư mục sẽ mở ra khả năng tiêm tất cả các loại phần mềm độc hại vào nội dung bạn đang phục vụ. Theo dõi nội dung của cây thư mục này một cách thích hợp.

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.