저는 Cloud9IDE의 SSH 작업 공간을 사용하고 있으며 다양한 이유로 해당 SSH 터널을 루트로 생성해야 합니다. 이것은 실제로 문제가 되지 않습니다. 그러나 우리가 생성하는 파일과 디렉터리는 실제로 사용자 폴더 아래에 있습니다(이 경우 사용자가 "foobar"이므로 파일은 /home/foobar/public_html/에 생성됩니다) 개발자).
문제는 "root" 사용자가 실제로 파일을 생성하고 있기 때문에 브라우저에서 해당 파일을 탐색하면 404가 반환된다는 것입니다. 서버가 "foobar" 사용자를 사용하여 페이지를 제공하기 때문입니다.
루트 사용자가 파일을 생성했더라도 사용자 foobar가 해당 사용자가 파일을 생성한 것처럼 파일을 읽고 실행할 수 있도록 보장하는 방법이 필요합니다.
나는 루트와 foobar를 포함하는 그룹과 함께 setfacl -Rdm을 사용해 보았으며 이로 인해 foobar가 더 이상 해당 디렉토리의 파일을 제공할 수 없게 되었습니다.
예를 들어:
-rw-r--r-- 1 foobar foobar 125 May 15 11:26 die.html
-rw-r--r-- 1 root root 127 May 15 12:20 dies.html
이 경우 "die.html" 파일은 제대로 제공되지만 "dies.html"은 소유자 및 그룹으로 인해 404가 발생합니다.
이 문제를 해결하는 방법에 대한 의견이 있으십니까? 다시 말하면, 현재 존재하는 파일뿐만 아니라 향후 모든 파일에 대해 이 작업이 수행되어야 합니다.
답변1
골라보세요:
chown foobar:foobar *
chown foobar:foobar dies.html
chown foobar *
chown foobar dies.html
따라서 생성된 모든 파일을 foobar가 소유하게 하려면 다음을 수행해야 합니다.
실행 crontab -e
하고 다음을 입력하세요.
* * * * * while true; do chown foobar:foobar -R /home/foobar/public_html/dev/* & sleep 1; done
저장하고 cron이 권한을 인수하도록 하세요.
답변2
su foobar
foobar의 비밀번호를 입력하고 입력하여 SSH 터널을 구축한 후 사용자 ID를 foobar로 변경합니다 .
답변3
새 그룹 만들기, 말하기개발자 파일에 대한 읽기/쓰기 액세스가 필요한 모든 사용자를 해당 그룹에 넣습니다. 그런 다음 해당 디렉토리의 그룹을 다음으로 변경하십시오.개발자.
이 명령을 사용하면:
chgrp -R devs /home/foobar/public_html/dev
그 세트 이후설정다음 명령을 사용하여 해당 디렉터리에 비트를 추가합니다.
chmod -R g+s /home/foobar/public_html/dev
이 시점부터 해당 디렉터리에 생성된 모든 파일은 그룹의 소유가 됩니다.개발자해당 그룹의 모든 사용자는 파일에 대한 읽기/쓰기 액세스 권한을 갖습니다(권한에 따라 다름).
setgid가 무엇인지 알고 싶다면이 링크를 확인하세요.