안녕하세요. 방금 Ubuntu에서 기술 테스트를 완료했는데 손상된 웹 사이트를 수정하기 위해 PHP 프로세스 사용자를 변경해야 하는 문제를 발견했습니다. 나는 사용자가 "foo"였지만 "www-data"여야 한다고 생각합니다. 마지막에 "프로세스를 chowning"하는 것이 해결 방법이라는 말을 들었습니다. 나중에 참조할 수 있도록 어떻게 해야 하는지 알고 싶습니다.
따라서 동일한 방식으로 파일 사용자를 차단할 수 있지만(제 생각에는) 프로세스에 대해서만 해당됩니다. 찾아보고 찾아봤는데 혹시 잘못된 명령어를 찾고 있는 것은 아닐까요? 아니면 어딘가의 구성 파일에서 변경됩니까?
미리 감사드립니다!
답변1
Linux에서 실행 중인 프로세스의 사용자나 그룹을 외부에서 변경하는 것은 불가능합니다. 당신이 할 수 있는 일은 다음에 실행될 때부터 새 사용자를 사용하도록 실행 중인 모든 구성을 변경하는 것입니다. 이는 PHP를 어떻게 설치하고 구성했는지에 따라 달라집니다(또는 Apache, php-fpm 등 PHP를 실행하는 모든 항목).
답변2
친절하게 우리와 공유할 수 있다면 당신은 그것을 할 수 없습니다. 이 링크를 확인하세요: https://stackoverflow.com/questions/37401774/change-owner-of-a-currently-running-process
답변3
이는 실제로 자격 증명 변경이 디스크에서만 발생하고 메모리에서는 발생하지 않는다는 Linux 커널의 설계 결함입니다. 구체적으로 말하면 자격 증명(UID, GID 또는 추가 그룹 목록)이 변경되면 기존의 모든 프로세스는 계속해서 이전 자격 증명을 사용하고 이전에 부여된 데이터에 액세스할 수 있습니다. 그리고 자격 증명 변경 사항을 시스템 전체(예: 모든 프로세스)에 전파하는 단일 API 기능이 없습니다. 이 결함으로 인해 어떤 사용자 수준 프로그램도 원하는 작업을 수행할 수 없습니다. 이를 위해서는 커널 모듈이 필요합니다. 방금 하나 만들려고했는데 간단한 프로그램에서 작동합니다. (https://github.com/xuancong84/supgroup)
그러나 일반적으로 프로그램은 열린 파일 핸들, 다른 CPU 코어에서 실행되는 하위 프로세스/스레드, 바인딩된 파이프, 열린 장치 등 많은 상호 작용을 가질 수 있기 때문에 그렇게 하는 것은 좋은 생각이 아닙니다. 실행 중에 UID/GID를 변경하면 정의되지 않은 동작이 많이 발생할 수 있으며 그 중 일부는 오류(예: 파이프 파손, I/O 통신 중단)를 일으킬 수 있고 일부는 위험할 수 있습니다(예: 시스템 충돌). 저는 이 프로그램이 간단한 프로그램(예 nc -l 8080
: 일어날 것이다.