다음 파일이 있습니다.
-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.username01
crontab을 루트에 속한 ntp와 같은 것으로 교체하고 싶다면 어떻게 해야 할까요? 당신이 하려는 일이 성공한다면, 나는 단지 내 자신의 악의적인 버전을 작성하고 간단히 cp -p my-malicious-script /etc/cron.daily/ntp
... 안타깝습니다. 정말 정말 끔찍해요.
답변2
사용자 wilmes로 a에 b를 cp할 때 a의 원래 소유자(루트)를 유지하는 이유는 무엇입니까?
cp
기본적으로( -a
또는 -p
플래그 없이) 대상 파일의 시간이나 소유자는 수정되지 않기 때문 입니다. 귀하의 경우 파일은 a
의 소유이지만 root
해당 그룹을 통해 쓰기 액세스 권한이 있으므로 파일을 자르고 완전히 다시 쓰는 것을 포함하여 파일을 수정할 수 있습니다. 타임스탬프를 수정하는 것은 파일 소유자만이 할 수 있으므로 할 수 없는 일입니다.
대상 파일이 없으면 실행 중인 사용자의 uid를 사용하여 생성됩니다 . cp
즉 wilmes
, 슈퍼유저 권한이 없으면 소유자를 변경할 수 없습니다.
그러나 디렉토리에 대한 쓰기 액세스 권한도 있으므로 대상 파일을 삭제한 다음 다시 생성할 수 있습니다. 이 경우 cp
.