실수로 내 디스크 권한 구조를 손상 시켰습니다. 왜 그렇습니까?


23

내가하려고했던 chown내에서 /opt어떤 이유로 것은 chown부모와 chowned 모든 것을 뛰어.

누구나 왜 / 어떻게 이런 일이 일어날 수 있으며 앞으로 어떻게 피할 수 있습니까? 주어진 디렉토리에서 명령을 실행하면 효과적으로 루트 디렉토리에서 명령을 실행할 수 있습니다.

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
나는이처럼했을 것 : sudo chown -R root:wwwdata /opt몇 가지 문제를 야기 아마도 그 파이프를 사용하여 --help 대화 ... 당 ???
— 여호수아 Besneatte


7
@steeldriver는 마치 소리로 답해야합니다.)
— Joshua Besneatte

2
숨겨진 파일에 대한 권한을 설정하는 올바른 방법은 무엇입니까?
— Duke Dougal

4
@JoshuaBesneatte 필자는 /로 시작하는 인수에서 재귀 명령을 실행하지 않으려 고 시도합니다. 대부분의 키보드는 Enter 키에 가깝게 배치되어 있기 때문에 나머지 명령을 입력하기 전에 실수로 Enter 키를 누르기가 너무 쉽습니다. 이 위험을 완화하기 위해 cd루트 디렉토리로 가서 leaing /을 생략하거나로 명령을 시작할 수 있습니다. (즉, 일치하는 )유형을 입력 할 때까지 명령이 실행되지 않으므로 Ctrl-C를 누르고 구제 할 수 있습니다. 나쁜 실수 (예 : rm -rf /tmp/foo-installT 대신 Enter 키를 누르십시오).
— Monty Harder

답변:


25

이것은 다음을 사용했기 때문에 발생했습니다.

sudo chown -R root:www-data .*

대신 이것을 사용해야했을 때 :

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

먼저 -R대상 디렉토리 아래의 모든 디렉토리에 대해 재귀 적입니다.

또한 *현재 디렉토리 아래의 모든 파일 및 디렉토리와 일치합니다. 다음으로, 현재 디렉토리 보다 한 레벨 위 의 .*모든 파일과 디렉토리를 일치시킵니다 .

나중에이를 방지하기 위해 다음 예제와 같이 명령 ls을 실행하기 전에 명령을 사용하여 경로를 확인할 수 있습니다 chown.

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

이를 피하는 또 다른 방법은 항상 명령을 실행하려는 디렉토리의 전체 경로를 사용하는 것입니다.

예를 들면 다음과 같습니다.

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

편집하다:

다음 명령을 사용하여 chmod모든 숨김 파일 또는 디렉토리 바로 아래에 숨길 수 있습니다 ( 숨겨진 /opt첫 문자 .가 문자, 숫자, 대시 또는 밑줄 이라고 가정하면 대부분의 파일에 적용됩니다).

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

chmod다음 명령을 실행하여 파일이 어떤 것인지 확인할 수 있습니다 .

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

명령의 첫 번째 부분 : globfor i in /opt/.[A-Za-z0-9-_]* 의 모든 결과에 대해 각 결과를 변수 "i"에 할당합니다. /opt/.[A-Za-z0-9-_]*

여기서 glob는 첫 번째 문자 여야 .하고 다음 문자 [A-Za-z0-9-_] 는 AZ 또는 az 또는 0-9 또는 a -또는 a 인 문자 여야한다고 말합니다 _.

이 결과를 제외됩니다 .하고 ..있는 현재 디렉토리와 현재 디렉토리 위의 디렉토리를 표시 숨겨진 파일과 디렉토리 만 포함됩니다.

명령의 두 번째 부분 : do sudo chmod root:www-data "/opt/$i"의 현재 값과 일치하는 모든 변수에 대해 명령을 실행한다고합니다 $i.

명령의 세 번째 부분 : done내가 끝났다고 말합니다.


또한, 당신은 사용 -R에 옵션 chmod과 -R옵션은 순환하고 모든 디렉토리에 적용됩니다 및 파일.

chmod옵션없이 명령 만 사용하면 명령은 사용자가 지정한 특정 파일 또는 디렉토리에만 적용되며 디렉토리에는 재귀 적으로 적용되지 않습니다.


5
내 의도는 숨겨진 파일을 대상으로했습니다. 내가 실수로 여기에 설명 된 바와 같이 숨겨진 파일을 grepping에 사용되는 구문 가정 stackoverflow.com/questions/10375689/...이 숨겨진 파일에 대한 올바른 구문이 일반적이다. 그렇지 않은 것 같습니다.
— Duke Dougal

2
@DukeDougal 당신은 즉시 나오는 첫 번째 대답을 받아들이지 말아야합니다. 일반적으로 수락하기 전에 24 시간을 기다리는 것이 좋습니다. 그 당시에는 더 유용하거나 더 나은 서면 답변이 나올 수도 있습니다. 유용하다고 생각되는 모든 답변을 찬성 할 수 있습니다. StackExchange는 "누가 먼저 응답하는지"가 아니라 "콘텐츠 및 명확성 측면에서 가장 좋은 답변을 제공하는 사람"에 관한 것이 아닙니다.
— Giacomo Alzetta

11
편집은 끔찍하다. ls출력 을 구문 분석 하고 응답이 사용되는 동안 매우 느립니다 find.
— val은

9
(1) bash를 제외하고 와일드 카드 (glob / pattern)가 재귀되지 **않으며 명시 적으로 활성화해야합니다. IMHO,의 역할에 대해 명확해야합니다  -R. (2) 사람들은로 *시작하는 파일 이름과 일치 할 수 있으므로 일반 사용을 피하는 것이 좋습니다.이 파일 이름 -은 옵션으로 해석됩니다.  그로부터 보호해야하지만 모든 명령이 해당 규칙을 준수하는지 확실하지 않습니다. … (계속)command -- *
— Scott

6
(계속) (3)  *,  ./* 심지어  /opt/* 찾을 실패는 ( "파일을 점" .*제외) dotglob옵션이 설정되어 있습니다. 마찬가지로  여호수아 Besneatte 및  ilkkachu는 말을 chown -R /opt하고 chown -R .더 나은. … (계속)
— Scott

45

이 경우 쉘 glob .*는 ..(부모 디렉토리) 일치하지만 불행히도 다음과 /같습니다.

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

추가 토론은 다음을 참조하십시오.


6
이것은, 정확한, 그리고 훨씬 더 간단한 대답이다
— abligh

5

점으로 시작하는 모든 항목.* 과 일치 하기 때문에 문제가 발생했습니다 . 이 표현식에는 경로가 포함되지 않으므로 컨텍스트는 현재 디렉토리입니다. 따라서 현재 디렉토리에 숨겨진 파일이나 폴더가 있으면 일치합니다. 그러나 (당신이 실행하여 볼 수 있습니다으로 해당 폴더에), 당신은 또한 일치 와.gitls -a...

그리고 ..물론 부모 디렉토리는 부모 디렉토리이므로 부모 디렉토리의 chmod -R모든 것을 재귀 적으로 대상으로합니다.


/opt/.*도움이되지 않는 절대 경로 /opt/..는 ..CWD =와 동일 /opt합니다.
— Peter Cordes

@Peter : 예, 맞습니다. 만약 표현식에 경로가 포함되어 있다면, 현재 디렉토리가 아니라 컨텍스트 (시작점)를 제공합니다. OP .는 문맥 으로 사용하려고 했지만 슬래시가 없어서 그런 식으로 작동하지 않았습니다 ...
— Alexis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.