Sử dụng setfacl để tạo các quyền đệ quy cho Apache với rsync


8

Tôi có cài đặt Dokuwiki cục bộ, mà tôi thường xuyên đồng bộ hóa với máy chủ của mình bằng rsync. Tôi cũng sẽ cung cấp cho một người bạn của tôi một tài khoản ssh và lưu trữ bản cài đặt Dokuwiki công khai của anh ta. Tuy nhiên, tôi gặp vấn đề với quyền truy cập - mặc dù máy nhân bản chỉ đọc, Dokuwiki vẫn cần quyền ghi vào thư mục dữ liệu cho bộ đệm, v.v. Máy chủ Apache chạy dưới dạng dữ liệu www của người dùng và mỗi khi tôi làm một rsync, nó đặt lại quyền.

Dựa trên một số câu trả lời khác trên trang web này, tôi đã thử sử dụng setfacl để đặt quyền mặc định, nhưng dường như nó không hoạt động - getfacl chỉ ra rằng các quyền tồn tại, nhưng Dokuwiki sẽ không chạy và khi tôi cố gắng viết một tệp như dữ liệu www của người dùng, nó cũng không hoạt động. Tôi đang thiếu gì?

wiki/data$ sudo su www-data
$ pwd
/var/www/wiki/data
$ whoami
www-data
$ touch hi
touch: cannot touch `hi': Permission denied
$ getfacl /var/www/wiki/data
getfacl: Removing leading '/' from absolute path names
# file: var/www/wiki/data
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Đây là lệnh tôi đã sử dụng để đặt quyền:

setfacl -R -d -m u:www-data:7 /var/www/*

Bạn đang sử dụng lệnh nào với rsync? ACL mặc định nên được áp dụng. Ngoài ra, vui lòng hiển thị ACL của một tệp mẫu.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


3

Vấn đề # 1: Rupync đang giảm ACL

Sau khi áp dụng các quyền ACL, bạn cần lưu ý rằng khi bạn thực hiện rsyncviệc bạn đang sử dụng -Ahoặc --aclschuyển đổi. Điều này hướng dẫn rsyncđể đảm bảo duy trì những thứ này khi thực hiện đồng bộ hóa.

trích từ trang nam rsync

    -A, --acls                  preserve ACLs (implies -p)

Vấn đề # 2: Không có quyền ACL

Nhìn vào ví dụ của bạn, nó có chứa các quyền như sau.

uốn tóc truyền thống

# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x

ACL

default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Nhưng những ACL này là để tạo ra các đối tượng mới và không hoạt động chính xác như bạn nghĩ. Bạn vẫn cần tạo một mục nhập cho người dùng www-datangoài các phép ACL mặc định.

Thí dụ

$ pwd
/tmp/somedir

$ mkdir data
$ setfacl -R -d -m u:gopher:7 data

$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Một thí nghiệm

Bây giờ hãy thử và viết một tập tin vào datathư mục như người dùng gopher.

$ sudo -u gopher touch /tmp/somedir/data/afile
touch: cannot touch `/tmp/somedir/data/afile': Permission denied

Nhìn có quen không?

Thêm quyền ACL bổ sung

Đó là bởi vì bạn cần thêm ACL cho người dùng www-data, các quy tắc mặc định không dành cho quyền truy cập, chúng là để tạo các tệp / thư mục mới.

$ setfacl -R -m u:gopher:7 data

Bây giờ hãy kiểm tra lại datathư mục:

$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
user:gopher:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Sự khác biệt duy nhất hiện nay chúng tôi có ACL nói rằng người dùng gopherrwxquyền truy cập:

user:gopher:rwx

Lặp lại thí nghiệm

Hãy thử viết lại dữ liệu vào thư mục:

$ sudo -u gopher touch /tmp/somedir/data/afile
$

Nó đã làm việc!!! Kiểm tra kỹ tệp kết quả:

$ ls -l /tmp/somedir/data/afile
-rw-rw-r--+ 1 gopher gopher 0 Oct  7 21:36 /tmp/somedir/data/afile

Điều đó có ý nghĩa nhưng nếu bạn nhìn vào đoạn mã trên, sử dụng getfacl, nó có liệt kê rằng tệp có quyền thích hợp không?
Stian Håklev

1
@ StianHåklev Không, tệp không có quyền thích hợp. Nó không có ACL vượt quá quyền unix truyền thống, và thuộc về người sử dụng stian, không phải www-data. Các ACL mặc định chỉ được áp dụng cho các tệp mới được tạo; rsync đặt các quyền dựa trên các quyền ở phía nguồn. rsync -Asẽ sao chép ACL nếu bạn có cùng ACL trên máy nguồn, có phải vậy không?
Gilles 'SO- ngừng trở nên xấu xa'
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.