Vô tình làm hỏng cấu trúc cấp phép đĩa của tôi - tại sao?


23

Tôi đã cố gắng để chownbên trong /optvà vì một số lý do chownđã nhảy lên với cha mẹ và đuổi theo tất cả mọi thứ.

Bất cứ ai có thể đề nghị tại sao / làm thế nào điều này có thể xảy ra, và làm thế nào để tránh làm điều đó trong tương lai? Có một chút liên quan đến việc chạy một lệnh trong một thư mục đã cho có hiệu quả có thể nhảy lên và chạy nó trong thư mục gốc.

ubuntu: /opt > sudo chown -R root:www-data .*
chown: changing ownership of '../var/lib/lxcfs/proc/cpuinfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/meminfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/stat': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/uptime': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/diskstats': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/swaps': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/devices': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/blkio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/hugetlb': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/rdma': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/pids': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/freezer': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpuset': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/memory': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/perf_event': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpu,cpuacct': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/net_cls,net_prio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/name=systemd': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/unified': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs': No such file or directory
^C
:ubuntu: /opt >

2
Tôi đã làm điều đó như thế này: sudo chown -R root:wwwdata /opttheo hộp thoại --help ... có lẽ việc sử dụng đường ống đó gây ra một số vấn đề ???
Joshua Besneatte

13
.*phù hợp ..(thư mục mẹ, là /) - xem Is chmod 777. * -Rỏ chmod thư mục cha mẹ (..)?
Steeldo

7
@steel ấn mà nghe có vẻ như nên được đăng lên như một câu trả lời;)
Joshua Besneatte

2
Vì vậy, cách chính xác để đặt quyền trên các tệp ẩn, đó là những gì tôi đã cố gắng để làm gì?
Công tước Dougal

4
@JoshuaBesneatte Tôi cố gắng tránh chạy các lệnh đệ quy trên các đối số bắt đầu bằng / vì hầu hết các bàn phím đặt / khá gần với phím Enter và quá dễ dàng để vô tình nhấn Enter trước khi gõ phần còn lại của lệnh. Để giảm thiểu rủi ro này, người ta có thể cdvào thư mục gốc và bỏ qua lệnh nhảy /, hoặc bắt đầu lệnh (, điều đó có nghĩa là lệnh sẽ không được thực thi cho đến khi khớp )được nhập, tạo cơ hội để nhấn Ctrl-C và bảo lãnh của một lỗi sai (chẳng hạn như rm -rf /tmp/foo-installvà nhấn Enter thay vì T).
Monty Harder

Câu trả lời:


25

Điều này xảy ra vì bạn đã sử dụng:

sudo chown -R root:www-data .*

khi nào bạn nên sử dụng cái này thay thế:

sudo chown -R root:www-data ./*

Đầu tiên, -Rlà đệ quy cho tất cả các thư mục trong thư mục đích.

Ngoài ra, *sẽ phù hợp với tất cả các tập tin và thư mục trong thư mục hiện tại. Tiếp theo, .*sẽ khớp tất cả các tệp và thư mục một cấp trên thư mục hiện tại.

Để tránh điều này trong tương lai, bạn có thể sử dụng lslệnh để xác minh đường dẫn trước khi bạn thực hiện chownlệnh như trong các ví dụ sau:

ls -a ./*
ls -a *
ls -a .*
ls -a ../*

Một cách khác để tránh điều này là luôn sử dụng đường dẫn đầy đủ đến thư mục bạn muốn chạy lệnh.

Đây là một ví dụ:

sudo chown -R root:www-data /opt/*

Chỉnh sửa:

Bạn có thể sử dụng lệnh sau cho chmodtất cả các tệp hoặc thư mục bị ẩn ngay bên dưới /opt(giả sử ký tự đầu tiên sau ký tự .ẩn chúng là một chữ cái, số, dấu gạch ngang hoặc dấu gạch dưới nên đúng với hầu hết các tệp).

for i in /opt/.[A-Za-z0-9-_]*; do sudo chmod root:www-data "/opt/$i"; done

Bạn có thể xác minh những tập tin này sẽ chmodbằng cách chạy lệnh sau:

ls /opt/.[A-Za-z0-9-_]*

Phần đầu tiên của lệnh : for i in /opt/.[A-Za-z0-9-_]*nói rằng, đối với tất cả các kết quả của quả cầu /opt/.[A-Za-z0-9-_]* gán từng kết quả cho biến "i".

Quả cầu ở đây nói rằng ký tự đầu tiên phải là .ký tự tiếp theo [A-Za-z0-9-_] phải là bất kỳ ký tự nào là AZ hoặc az hoặc bất kỳ số 0-9 hoặc a -hoặc a _.

Điều này sẽ loại trừ các kết quả ...đại diện cho thư mục hiện tại và thư mục phía trên thư mục hiện tại và sẽ chỉ bao gồm các tệp và thư mục ẩn.

Phần thứ hai của lệnh : do sudo chmod root:www-data "/opt/$i"nói để chạy lệnh cho tất cả các biến khớp với giá trị hiện tại của $i.

Phần thứ ba của lệnh : donenói rằng tôi đã hoàn thành.


Ngoài ra, bạn đã sử dụng -Rtùy chọn với chmod-Rtùy chọn là đệ quy và sẽ áp dụng cho tất cả các thư mục tệp.

Khi bạn chỉ sử dụng chmodlệnh không có tùy chọn, lệnh sẽ chỉ áp dụng cho tệp hoặc thư mục cụ thể mà bạn đã cung cấp và sẽ không áp dụng đệ quy cho các thư mục.


5
Mục đích của tôi là nhắm mục tiêu các tập tin ẩn. Tôi đã nhầm tưởng rằng cú pháp được sử dụng để lấy các tệp ẩn như được mô tả ở đây stackoverflow.com/questions/10375689/, nói chung là cú pháp hợp lệ cho các tệp ẩn. Có vẻ không.
Công tước Dougal

2
@DukeDougal Bạn không nên chấp nhận câu trả lời đầu tiên xuất hiện ngay lập tức. Nói chung, tốt hơn là đợi 24 giờ trước khi chấp nhận. Trong thời gian đó, những câu trả lời bằng văn bản hữu ích hơn hoặc tốt hơn có thể được đưa ra sẽ xứng đáng được chấp nhận. Bạn có thể upvote tất cả các câu trả lời bạn nghĩ là hữu ích. StackExchange không phải (hoặc không nên) về "ai trả lời trước" mà là "ai cung cấp câu trả lời tốt nhất" (cả về nội dung và sự rõ ràng).
Giacomo Alzetta

11
Chỉnh sửa là khủng khiếp. Nó gợi ý để phân tích lsđầu ra và rất chậm trong khi câu trả lời là sử dụng find.
val nói Phục hồi

9
(1) Không có ký tự đại diện (hình cầu / mẫu) được đệ quy trong bash ngoại trừ **, và thậm chí điều đó phải được kích hoạt rõ ràng. IMHO, bạn nên rõ ràng hơn về vai trò của  -R. (2) Mọi người nên tránh sử dụng đơn giản *vì nó có thể khớp với tên tệp bắt đầu bằng -, sau đó sẽ được hiểu là các tùy chọn.  nên bảo vệ chống lại điều đó, nhưng tôi không chắc tất cả các lệnh tôn vinh quy ước đó. Tiết (Cont'd)command -- *
Scott

6
(Tiếp theo) ... (3)  *,  ./* và thậm chí  /opt/* thất bại trong việc tìm “chấm file” ( .*) trừ khi dotglobtùy chọn được thiết lập. Như  Joshua Besneatte và  ilkkachu nói, chown -R /optchown -R .tốt hơn. Tiết (Cont'd)
Scott

45

Vỏ quả cầu .*khớp ..(thư mục mẹ) trong trường hợp này không may là /:

steeldriver@t400s:/opt$ ls .*
.:

..:
bin  boot  cdrom  dev  etc  home  initrd.img  initrd.img.old  lib  lib32  lib64
libx32  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  swapfile  sys
tmp  usr  var  vmlinuz  vmlinuz.old

Để thảo luận thêm, xem:


6
Đây là câu trả lời đúng và đơn giản hơn nhiều
abligh

5

Khó khăn của bạn đến vì .*phù hợp với tất cả mọi thứ bắt đầu bằng một dấu chấm. Bối cảnh là thư mục hiện tại, vì biểu thức này không bao gồm một đường dẫn. Vì vậy, nếu có bất kỳ tệp hoặc thư mục ẩn nào như .gittrong thư mục hiện tại, bạn sẽ khớp chúng. Nhưng (như bạn sẽ thấy bằng cách chạy ls -atrong thư mục đó), bạn cũng sẽ khớp ...

.., tất nhiên, là thư mục mẹ, vì vậy chmod -Rđệ quy nhắm mục tiêu mọi thứ trong thư mục cha.


Một đường dẫn tuyệt đối như /opt/.*sẽ không giúp ích, /opt/..giống như ..với CWD = /opt.
Peter Cordes

@Peter: Có, đó là chính xác: Nếu biểu thức bao gồm một đường dẫn, điều đó sẽ đưa ra bối cảnh (điểm bắt đầu), thay vì nó là thư mục hiện tại. OP có nghĩa là sử dụng .làm bối cảnh, nhưng nó không hoạt động theo cách đó do dấu gạch chéo bị mất ...
alexis
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.