cp가 source 속성을 설정하지 않고 -p와 함께 실패하는 이유는 무엇입니까?

cp가 source 속성을 설정하지 않고 -p와 함께 실패하는 이유는 무엇입니까?

다음 파일이 있습니다.

-rw-rw-r-- 1 root   adm    0 Jun 22 11:25 a
-rw-rw-r-- 1 wilmes wilmes 0 Jun 22 11:23 b

사용자 wilmes로 a에 b를 cp할 때 a의 원래 소유자(루트)를 유지하는 이유는 무엇입니까?

저는 이 명령을 사용합니다(별칭 없이): cp ba

-p를 사용할 때 cp -pba 명령이 실패하는 이유는 무엇입니까?

cp: preserving times for 'a': Operation not permitted

나는 ext4를 사용하는 Ubuntu 17.04에서 이것을 발견했습니다. 사용자 wilmes는 adm 그룹의 구성원이며 여기에 포함된 디렉터리는 다음과 같습니다.

drwxrwxr-x 2 wilmes wilmes 4,0K Jun 22 12:09 ../user/

가장 중요한 것은 이 기록이 어디에 있습니까?

답변1

대상(a) 파일 소유자여야 하고 cp가 기본 UNIX 보안을 무시하지 않기 때문에 실패합니다. 사용자는 자신의 파일 wilmes -> wilmes를 유지할 수 있지만 다른 사용자에 대해서는 그렇게 할 수 없으며 루트 사용자에 대해서는 확실히 그렇지 않습니다. 나는 당신이 루트나 wilmes로 로그인하지 않았다고 가정합니다.

이 경우 한 파일은 root가 소유하고 다른 파일은 wilmes가 소유합니다. 보존하려면 다음을 실행해야 합니다.

sudo cp -p b a

관련된 링크들:

예:

루트용 파일 a와 표준 사용자(joe)용 파일 b를 만듭니다.

joe@testbed:~/tmp2$ sudo touch a
joe@testbed:~/tmp2$ touch b

권한이 올바른지 확인하십시오.

joe@testbed:~/tmp2$ ls -l
total 0
-rw-r--r-- 1 root    root    0 Jun 22 13:51 a
-rw-r--r-- 1 joe     joe     0 Jun 22 13:51 b

사용자가 소유한 파일 b를 루트가 소유한 파일로 복사해 보십시오(이렇게 하면 권한을 위반하게 됩니다).

joe@testbed:~/tmp2$ cp -p b a
cp: cannot create regular file 'a': Permission denied

권한을 유지하면서 루트로 반복합니다.

joe@testbed:~/tmp2$ sudo cp -p b a
joe@testbed:~/tmp2$ ls -l
total 0
-rw-r--r-- 1 joe joe 0 Jun 22 13:51 a
-rw-r--r-- 1 joe joe 0 Jun 22 13:51 b

참고: 권한이 거부되었습니다. 아니요허용되지 않는 작업. 사용자 wilmes는 그룹을 통해 파일에 액세스할 수 있기 때문에 허용되지 않는다는 것을 알 수 있을 것입니다.소유자, 그래서 그들은 그것을 완전히 덮을 수 없습니다.

논리적으로 다른 사용자(루트)에 속한 파일을 교체하고 시스템에 해당 파일의 소유자도 만들도록 요청하는 것은 치명적인 보안 결함이 될 수 있습니다.

예를 들어, 오랫동안 일반 사용자로 접속하여 malicious.username01crontab을 루트에 속한 ntp와 같은 것으로 교체하고 싶다면 어떻게 해야 할까요? 당신이 하려는 일이 성공한다면, 나는 단지 내 자신의 악의적인 버전을 작성하고 간단히 cp -p my-malicious-script /etc/cron.daily/ntp... 안타깝습니다. 정말 정말 끔찍해요.

답변2

사용자 wilmes로 a에 b를 cp할 때 a의 원래 소유자(루트)를 유지하는 이유는 무엇입니까?

cp기본적으로( -a또는 -p플래그 없이) 대상 파일의 시간이나 소유자는 수정되지 않기 때문 입니다. 귀하의 경우 파일은 a의 소유이지만 root해당 그룹을 통해 쓰기 액세스 권한이 있으므로 파일을 자르고 완전히 다시 쓰는 것을 포함하여 파일을 수정할 수 있습니다. 타임스탬프를 수정하는 것은 파일 소유자만이 할 수 있으므로 할 수 없는 일입니다.

대상 파일이 없으면 실행 중인 사용자의 uid를 사용하여 생성됩니다 . cpwilmes, 슈퍼유저 권한이 없으면 소유자를 변경할 수 없습니다.

그러나 디렉토리에 대한 쓰기 액세스 권한도 있으므로 대상 파일을 삭제한 다음 다시 생성할 수 있습니다. 이 경우 cp.

관련 정보