Cấp quyền cho người dùng trên dữ liệu www sở hữu / var / www


36

Tôi có một thiết lập máy chủ web đơn giản cho một số trang web, với bố cục như:

trang 1 /var/www/site1/public_html/

trang web 2: /var/www/site2/public_html/

Trước đây tôi đã sử dụng người dùng root để quản lý các tệp và sau đó đưa chúng trở lại www-datakhi tôi hoàn thành (các trang web WordPress, cần thiết để Tải lên WP hoạt động). Đây có lẽ không phải là cách tốt nhất.

Tôi đang cố gắng tìm cách tạo một người dùng khác (hãy gọi nó là user1) có quyền chỉnh sửa các tệp trong site1, nhưng không phải là site2 và không dừng các tệp bị 'sở hữu' www-data. Có cách nào để tôi làm điều này?

Câu trả lời:


70

Nếu chúng tôi kiểm tra quyền sở hữu của trang web1, chúng tôi sẽ tìm thấy một cái gì đó như thế này,

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

Điều này có nghĩa là thư mục được sở hữu bởi người dùng root, nhóm gốc. Trong khi người dùng root có quyền ghi (cộng với quyền đọc và thực thi) vào thư mục, nhóm gốc chỉ có quyền đọc và thực thi.

Chúng tôi sẽ muốn thay đổi quyền sở hữu nhóm thành một nhóm (mới) khác và thêm user1 vào nhóm cụ thể đó. Chúng tôi cũng sẽ cấp phép viết cho nhóm cụ thể đó.

Tạo một nhóm mới,

sudo addgroup site1

Thêm user1 vào nhóm vừa tạo,

sudo adduser user1 site1

Kiểm tra xem user1 có thực sự nằm trong nhóm đó không,

groups user1

Đầu ra phải là một danh sách giống như,

user1 : <other-groups> site1

Bây giờ chúng tôi có thể thay đổi quyền sở hữu nhóm của thư mục dự định của bạn.

sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1

Cấp quyền viết cho chủ sở hữu nhóm mới này,

sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

Kiểm tra xem tất cả các thay đổi có thực sự ở đó không,

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

Vì vậy, thư mục bây giờ thuộc sở hữu của người dùng root, nhóm site1. Cả người dùng root và nhóm site1 đều có quyền ghi (cộng với quyền đọc và thực thi) vào thư mục. Bất kỳ người dùng nào thuộc nhóm site1 sẽ được hưởng tất cả các đặc quyền được cấp cho nhóm đó.

Bây giờ hãy đăng nhập với tên user1, di chuyển đến thư mục site1 và thử tạo một tệp trong thư mục đó,

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

Điều này không thành công vì rất có thể nhóm chính của user1 không phải là site1. Vì vậy, thay đổi nhóm đó.

newgrp - site1

Hãy thử tạo lại tệp (hãy cẩn thận rằng bạn đã được chuyển đến thư mục chính của user1 sau khi thay đổi nhóm), việc này sẽ hoạt động ngay bây giờ. Vì các tệp được tạo sẽ có quyền đọc thế giới, apache (hoặc máy chủ web của bạn) sẽ không gặp phải bất kỳ vấn đề nào khi truy cập chúng.

CHỈNH SỬA

Ngoài ra, như được chỉ ra bởi dan08 trong bình luận, bạn cần thêm dữ liệu www vào nhóm site1.

sudo adduser www-data site1

Trên nhiều bản phân phối (không phải tất cả), dữ liệu www là người dùng mà máy chủ web Apache chạy. Điều này cũng có nghĩa là mọi thứ được thực hiện bởi Apache (đặc biệt là các tập lệnh PHP) sẽ được thực hiện với sự cho phép của dữ liệu www của người dùng (và cả nhóm dữ liệu www) theo mặc định. WordPress sử dụng dữ liệu www của người dùng để ghi tệp.

Nếu bạn muốn xem máy chủ web apache đang chạy như thế nào, hãy ra lệnh,

ps aux | grep apache2 | less

1
Bạn cũng cần thêm dữ liệu www vào nhóm site1. Khi tải lên và thay đổi tệp trong giao diện web Wordpress. Các thay đổi được thực hiện bởi Apache bằng cách sử dụng người dùng dữ liệu www. vì vậy đọc đặc quyền là không đủ hầu hết thời gian.
Dan

3
Các Permission deniedthông điệp không phải là do "nhóm chính", nhưng thay vì người dùng vẫn chưa thực sự là trong nhóm đó (như xa như hệ điều hành là có liên quan). Nếu bạn đăng xuất và đăng nhập trở lại, nó sẽ hoạt động như mong đợi (không cần chạy newgrp - site1).
0b10011

Chính xác thì điều này sẽ khác với việc cấp www-dataquyền ghi nhóm như thế nào nếu cuối cùng bạn phải thêm www-datavào site1dù sao?
Matt

@MattBorja Truy vấn của bạn không rõ ràng lắm. Bạn có hỏi điều gì sai khi cung cấp cho nhóm có tên www-data' write permissions? If that is the question, www-data 'không phải là một nhóm, đó là một người dùng. Xin vui lòng cho tôi biết nếu tôi hiểu nhầm câu hỏi của bạn.
Masroor

Tôi nghĩ rằng, đây không phải là cấu hình an toàn vì người dùng có thể truy cập các trang web của nhau thông qua tập lệnh php, ví dụ: trình quản lý tệp php.
qdinar

7

Tạo hai nhóm: site1grpsite2grp

sudo groupadd site1grp && sudo groupadd site2grp

Thêm www-datavào cả hai nhóm.

sudo adduser www-data site1grp && sudo adduser www-data site2grp

Thêm user1 và user2 vào các nhóm thích hợp

sudo adduser user1 site1grp && sudo adduser user2 site2grp

Thay đổi quyền của thư mục trang web của bạn để chủ sở hữu người dùng là dữ liệu www và chủ sở hữu nhóm là nhóm thích hợp

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

Bây giờ www-datacó quyền của người dùng và nhóm trên cả hai trang web và mỗi người dùng có quyền nhóm cho trang web tương ứng của họ.


4

Đối với những người có thư mục gốc wordpress trong thư mục nhà của họ:

Ubuntu / apache

  1. Thêm người dùng của bạn vào nhóm dữ liệu www:

    CREDIT Cấp quyền ghi cho nhóm dữ liệu www

    Bạn muốn gọi usermodcho người dùng của bạn. Vì vậy, đó sẽ là:

    sudo usermod -aG www-data yourUserName
    

    Giả sử www-datanhóm tồn tại

  2. Kiểm tra người dùng của bạn có trong www-datanhóm:

    groups yourUserName
    

    Bạn sẽ nhận được một cái gì đó như:

    yourUserName : yourUserGroupName www-data
    

    yourUsergroupName thường giống với tên người dùng của bạn

  3. Thay đổi đệ quy quyền sở hữu nhóm của thư mục giữ quyền sở hữu người dùng của bạn

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. Thay đổi thư mục thành yourWebSiteFolder

    cd yourWebSiteFolder
    
  5. Thay đổi đệ quy tiền đề nhóm của các thư mục và thư mục con để cho phép ghi:

    find . -type d -exec chmod -R 775 {} \;
    

    chế độ /home/yourUserName/yourWebSiteFolder/'thay đổi từ 0755 (rwxr-xr-x)thành0775 (rwxrwxr-x)

  6. Thay đổi đệ quy tiền đề nhóm của các tệp và tệp phụ để cho phép ghi:

    find . -type f -exec chmod -R 664 {} \;
    

    Kết quả sẽ trông giống như:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    Tương đương với:

    chmod -R ug+rw foldername
    

    Quyền sẽ giống như 664 hoặc 775.


3

Bạn phải tạo một nhóm mới, được gọi là "người dùng mới", sau đó thêm dữ liệu www và "người dùng mới" vào nhóm đó:

sudo gpasswd -a new_user new_group

Sau đó, bạn có thể thay đổi chủ sở hữu thành new_uservà nhóm thành new_group:

sudo chown -R new_user:new_group /var/www/site1

Sau đó, bạn sẽ cần cấp quyền truy cập cấp nhóm cho trang web1. Dữ liệu www vẫn có thể truy cập trang web, vì nó thuộc về new_group, trong khi new_user sẽ không thể truy cập trang web2, vì anh ta sẽ không thuộc nhóm dữ liệu www, sở hữu trang web2.


Câu trả lời của bạn thật khó hiểu, bằng cách "cấp quyền truy cập cấp độ nhóm cho trang web1", bạn có nghĩa là "thay đổi nhóm của trang web1 thành new_group" hoặc thay đổi chế độ ( chmod)? Câu trả lời của bạn không đề cập đến chế độ ở bất kỳ đâu có thể tạo ra sự khác biệt của việc bảo mật (hoặc phá vỡ mọi thứ).
Lekensteyn

Tôi có nghĩa là thay đổi chế độ ( chmod) bằng cách thu hồi tất cả các quyền cho OTHERS.
errikos

1

Giả sử tất cả các tệp đã thuộc về www-datangười dùng (bạn có thể kiểm tra bằng ls -slahlệnh), người thuộc www-datanhóm (cột tiếp theo sau tên người dùng trong danh sách tệp), bạn có thể thêm người dùng của mình vào cùng một www-datanhóm để cho phép chỉnh sửa các tệp này

# usermod -aG www-data username

cho người dùng hiện tại, hoặc

# adduser username www-data

cho một cái mới được tạo ra

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.