Làm cách nào tôi có thể thay đổi đệ quy các quyền của tệp và thư mục?


65

Tôi đã cài đặt Ubuntu trên máy tính cục bộ của mình với apache / php / mysql.

Bây giờ tôi có một thư mục tại / var / www - bên trong tôi có một số dự án đang thực hiện. Tôi cũng làm việc với nguồn mở (drupal, magento, sugarcrm).

Vấn đề tôi gặp phải là thay đổi quyền tập tin với thiết bị đầu cuối. Thỉnh thoảng tôi cần thay đổi quyền của toàn bộ thư mục và các thư mục con và tệp tiếp theo của nó. Tôi phải thay đổi cá nhân bằng cách sử dụng

sudo chmod 777 foldername

Làm thế nào tôi có thể làm điều này đệ quy.

Ngoài ra tại sao tôi phải luôn luôn làm điều đó 777 , tôi đã thử 755 cho các thư mục và 644 cho các tệp, nhưng điều đó sẽ không hoạt động.

Câu trả lời:


90

Chỉ cần thêm -Rtùy chọn để thay đổi đệ quy các quyền của tệp. Một ví dụ, đệ quy thêm quyền đọc và ghi cho chủ sở hữu và nhóm trên foldername:

chmod -R ug+rw foldername

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

Việc đặt quyền thành 777 rất không được khuyến khích . Bạn gặp lỗi trong Apache hoặc trình soạn thảo của mình về các quyền vì apache chạy dưới một người dùng khác ( www-data) so với bạn.

Nếu bạn muốn viết thư /var/www, hãy thêm chính mình vào www-datanhóm và đặt umask + quyền tương ứng.

  • Thêm chính mình vào www-datanhóm:sudo adduser $USER www-data
  • Thay đổi quyền sở hữu của các tệp trong /var/www:sudo chown -R www-data:www-data /var/www
  • Thay đổi ô, do đó, các tệp mới được tạo bởi Apache cũng cấp quyền ghi cho nhóm. Thêm umask 007vào /etc/apache2/envvars.
  • Cấp cho chính bạn (về mặt kỹ thuật, nhóm www-data) viết quyền : sudo chmod -R g+w /var/www.

yeah Tôi đã thêm cờ r ở sai vị trí, tôi đã thêm nó sau o + w cho chmod.
JohnMerlino

Ngoài ra, nếu bạn cố gắng sử dụng chmod -r blablabla(nhỏ -r thay vì -R) Bạn có thể sẽ xóa quyền đọc cho mọi người ...
Cyril Duchon-Doris

1
Sau các hướng dẫn này, bạn nên kiểm tra xem không có .htaccesstệp nào có quyền ghi cho apache. find /var/www/ | grep .htaccess | xargs ls -l.
reynoldsnlp

23

lực lượng vũ phu:

sudo find foldername -exec chmod a+rwx {} ";"

Điều gì không làm việc? Hãy cụ thể hơn!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"

khi bạn ở trong thư mục, hãy xóa "tên người dùng"
Enrique

4
... và thay thế nó bằng.
djjeck

4

Bạn không cần 777 cho bất cứ điều gì. Trường hợp xấu nhất, bạn sẽ cần thay đổi chủ sở hữu của một số tệp và thư mục nhất định thành người dùng "dữ liệu www".

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

Nếu bạn đang sử dụng phương thức thành viên nhóm của Lekensteyn, hãy thay đổi 755 thành 775 và 644 thành 664 tương ứng ở trên, sau đó buộc độ dính của nhóm:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s

3

Bạn có thể thay đổi các thư mục con và tệp trên Nautilus. Như bạn có thể thấy trên hình ảnh dưới đây. Để có các cho phép trên các nút, bạn có thể bật tùy chọn trên Ubuntu Tweak.

nhập mô tả hình ảnh ở đây


Sử dụng LANG=C [command]để có được bản dịch tiếng Anh.
Lekensteyn

1

Nếu bạn muốn tất cả các tệp của mình có thể đọc được trên toàn thế giới (nghĩa là nó chỉ là một tập hợp các tệp / hình ảnh HTML tĩnh), thì hãy sử dụng lệnh này:

chmod -R a+r <base directory>

Điều đó sẽ đệ quy đi qua tất cả các tệp & thư mục con và thêm quyền đọc cho chúng.

CẢNH BÁO : Đừng làm điều này đối với các tệp có thể thực thi được! Chỉ những tập tin mà mọi người nên nhìn thấy.


Bạn đang nói "không làm chmod -R a+xgì cả" hay "không làm chmod -R a+rtrên thực thi"?
aleclarson

Tôi sửa nó rồi. Điều này là đúng. Hãy cẩn thận về việc cho phép người khác truy cập vào các tệp thực thi mà bạn đã tạo.
Ryan Shillington
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.