Làm cách nào để đặt ô mặc định trong Apache trên Debian?


14

Tôi cần các tệp được tạo bởi apache2 để có umask 002, tức là nhóm rw, theo mặc định.

Tôi đã thử đặt umask 002/ etc / apache2 / envvars và mặc dù tập lệnh này được thực thi khi một phần của apache start up ( apache2ctl graceful) umask không có hiệu lực. Có lẽ ở đâu đó xa hơn trong quá trình khởi động (ví dụ: khi người dùng bị hạ cấp từ rootxuống www-data) thì ở đâu đó tốt hơn để đặt cái này.

Tôi đã đọc các bài đăng về Fedora và một đề nghị đưa umask vào /etc/init.d/apache2nhưng cả hai đều không áp dụng / hoạt động trong Debian (Bóp).

Bạn có thể giúp?


1
Bạn nên thử khởi động lại Apache bằng "/etc/init.d/apache2 restart" hoặc "service apache2 restart"
Jens Bradler

vâng, không làm việc.
artfulrobot

Làm thế nào để bạn tạo các tệp mới (WebDAV, PHP)?
Jens Bradler

Trong thử nghiệm của tôi, tôi đang sử dụng file_put_contents (). nhưng mã tôi đang cố gắng 'sửa chữa' với điều này là mô-đun Ít của Drupal (tạo các phiên bản được lưu trong bộ nhớ cache của các tệp Ít CSS được xử lý). Vấn đề cụ thể của tôi là tôi không thể chạy drush cc allvới tư cách là người dùng của mình vì nó bị lỗi trên tất cả các tệp bộ đệm được tạo dữ liệu www này.
artfulrobot

Câu trả lời:


11

Để chắc chắn rằng cài đặt umask có hiệu lực, vui lòng sử dụng một thử nghiệm đơn giản và không sử dụng bất kỳ ứng dụng web nào khác cho việc này. Đây có thể là trường hợp các ứng dụng này thay đổi các quyền một cách độc lập với cài đặt umask của Apache.

Kịch bản PHP thử nghiệm đơn giản:

<?php
if ($fp = fopen(time() . '.txt', 'w')) {
  fwrite($fp, 'This is a simple test.');
  fclose($fp);
  echo "done";
} else {
  echo "error - cannot create file";
}
?>

Cẩn thận rằng dữ liệu www của người dùng có quyền ghi vào thư mục mà bạn đã cài đặt tệp kiểm tra đơn giản này.

Để chạy ô mới, hãy kiểm tra xem tệp / etc / apache2 / envvars sẽ được sử dụng trong tệp bắt đầu Apache của bạn /etc/init.d/apache2:

...
PIDFILE=$(. /etc/apache2/envvars && echo $APACHE_PID_FILE)
...

Đặt ô của bạn trong / etc / apache2 / envvars:

...
# umask 002 to create files with 0664 and folders with 0775
umask 002

Khởi động lại Apache của bạn:

service apache2 restart

Kiểm tra sự khác biệt:

#> ls -l *.txt
-rw-rw-r-- 1 www-data www-data  14 2012-05-01 15:56 1335880583.txt
-rw-r--r-- 1 www-data www-data  14 2012-05-01 15:55 1335880540.txt

Cảm ơn bạn! Ngay cả khi nó làm tôi cảm thấy như một thằng ngốc khi đọc nó (tôi đã viết sai số bát phân cho nhóm rw) * đỏ mặt *
artfulrobot

Đoạn mã PHP nhỏ của bạn đã tiết kiệm sự tỉnh táo của tôi, plugin PDO Sqlite3 Wordpress sẽ luôn đặt nhóm thành chỉ đọc cho tệp cơ sở dữ liệu của nó.
Daniel Sokolowski

2

Nếu bạn chạy nhiều trang web, bạn có thể đặt quyền nhóm mặc định bằng cách sử dụng Danh sách điều khiển truy cập (ACL) cho mỗi thư mục như sau:

Đặt setidcờ để buộc tất cả các tệp mới vào nhóm kế thừa từ thư mục:

# chmod g+s wordpress

Tạo các tệp mới rwcho các quyền của nhóm, ví dụ: để người dùng www-datacó thể ghi vào các tệp SFTPed:

# setfacl --default --modify group::rwx wordpress 

Xác nhận ACL là như vậy:

# getfacl wordpress
# file: wordpress
# owner: carissacosgrove
# group: www-data
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Tạo một tệp để xác nhận nó hoạt động:

# ll test
-rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test

Điều này sẽ không có vấn đề nếu ứng dụng đang cố gắng ghi các tệp với sự cho phép giảm mục đích?
berbt

Hoàn toàn không, ứng dụng sẽ chỉ viết với các quyền bị giảm mà thực sự làm tôi bối rối một chút ban đầu - stackoverflow.com/questions/28454551/ chủ
Daniel Sokolowski

1
Tôi nghĩ rằng lệnh setfacl --default --modify group:rwx wordpressnày đang thiếu một dấu hai chấm. Nó nên làsetfacl --default --modify group::rwx wordpress
Marcos

2

(Đối với Debian Stretch sử dụng systemd - Cảm ơn womble!)

Đặt UMask=0002vào tệp đơn vị dịch vụ systemd của hệ thống Apache2, tải lại đơn vị dịch vụ và sau đó khởi động lại Apache2.

$ pwd
/etc/systemd/system/multi-user.target.wants

$ mèo apache2.service
[Đơn vị]
Mô tả = Máy chủ HTTP Apache
After = network.target remote-fs.target nss-lookup.target

[Dịch vụ].
.
.
.
UM = 0002

$ sudo systemctl daemon-tải lại
$ sudo systemctl khởi động lại apache2

Debian Squeeze không sử dụng systemd.
womble

À đúng rồi, ở phần cuối của câu hỏi ban đầu họ nói là Debian Squeeze. Vì câu hỏi đã có từ 8 năm trước cho đến ngày hôm nay và khi tôi đang cố gắng giải quyết vấn đề đặt ra trong tựa đề với Debian mới nhất vào cuối năm 2019, đó là những gì tôi đã đăng. Tôi nghĩ rằng hầu hết mọi người tìm kiếm một giải pháp ngày nay trái ngược với tám năm trước có thể được hưởng lợi từ giải pháp của tôi, vì vậy tôi sẽ chỉ để lại những gì tôi đưa vào. Cảm ơn vì đã chỉ ra điều đó.
duplexddaann
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.