루트 액세스 권한이 있지만 cat 명령을 사용하면 여전히 권한이 거부됩니다.

루트 액세스 권한이 있지만 cat 명령을 사용하면 여전히 권한이 거부됩니다.

Centos의 nginx에 대한 지침에 따라 SSL 인증서(GoDaddy)를 설치하려고 했습니다. GoDaddy에서 다운로드한 zip에는 기본 인증서, 중간 인증서, PEM 파일 등 3개의 파일이 포함되어 있습니다.
Ubuntu VPS에 대한 루트 액세스 권한이 있습니다.

하지만 내가 사용할 때

sudo cat f84e19a2f44c6386.crt gd_bundle-g2-g1.crt >> coolexample.crt

나는 얻다

bash: coolexample.crt: Permission denied.  

답변1

실행 되면 sudo cat a파일의 내용은 권한을 가지고 stdout에서 읽고 인쇄되었습니다 sudo. 텍스트 리디렉션은 쉘에 의해 처리되었으며 파일에 추가되었습니다.(이후 >>사용되었습니다). 이 특별한 경우에는 슈퍼유저가 아닌 사람이 파일을 수정할 수 있는 권한이 없는 것 같습니다.

sudo su, sudo -i또는 를 사용하여 루트로 쉘을 실행하는 것이 sudo -s이러한 제한을 극복하는 좋은 아이디어인 것 같지만,하지만그것은 제안되지 않습니다. 쉘이 sudo권한을 가지고 실행 중이었고 자신도 모르게 루트 쉘을 종료하지 않고 다른 명령이 사용되는 일이 발생할 수 있습니다 . 그리고 해당 명령을 잘못 입력하면 시스템에 심각한 피해를 줄 수 있습니다.

이러한 경우 cat의 출력은 파이프로 연결될 수 있으며tee사용할 수 있습니다. 표준 입력 및 출력의 입력을 파일 및 표준 출력으로 읽어들이는 유틸리티입니다. 파일을 추가하고 싶기 때문에 -a옵션을 사용할 수 있습니다. 따라서 명령은 다음과 같습니다.

sudo cat f84e19a2f44c6386.crt gd_bundle-g2-g1.crt | sudo tee -a coolexample.crt

나는 그것을 가정했다f84e19a2f44c6386.crt그리고gd_bundle-g2-g1.crt일반 사용자가 읽을 수 있는 권한이 없습니다..

답변2

다음을 사용하여 슈퍼유저로 로그인해 보세요.

sudo -s

그런 다음 처음에는 sudo 없이 명령을 다시 시도하세요.

작동하지 않는 이유는 리디렉션이 고양이가 아닌 쉘에 의해 수행되기 때문입니다. 자세한 내용은 이 답변을 참조하세요.https://askubuntu.com/a/230482

관련 정보