Linux에서는 루트가 소유한 프로세스의 우선순위를 사용자가 변경하도록 허용할 수 있습니까? 더 구체적으로 IRQ 프로세스는 무엇입니까?
임베디드 실시간 애플리케이션의 경우 더 나은 결과를 얻을 수 있도록 GPIO IRQ의 우선순위를 높이고 싶습니다. 그러나 이들은 루트가 소유합니다. 루트 권한을 사용하지 않고도 루트 프로세스의 우선순위를 높일 수 있다면 좋을 것 같습니다.
답변1
내가 하고 싶은 일은 나를 위해 이 작업을 수행하는 특정 도구를 작성하는 것입니다.
int main(int argc, char * argv[])
{
setuid(0);
system("renice <params>");
}
에서 컴파일하고 설치했습니다 /usr/bin
.
소유자가 루트로 설정되지 않은 경우:
chown root /usr/bin/my-renice
그런 다음 다음을 사용하여 권한을 변경했습니다.
chmod 4755 /usr/bin/my-renice
첫 번째 비트는 누가 호출하든 상관없이 4
소유자의 권한(위에서 설정한 대로)으로 실행하도록 바이너리에 지시합니다 . 자세한 내용은 을 root
참조하세요 man setuid
.
컴퓨터에 액세스할 수 있는 사용자가 renice를 실행해서는 안 된다면 이것이 100% 안전하지 않다는 점에 유의하십시오.
특히:system()
호출 에 명령줄 인수를 전달하지 마세요 .
system(argv[1]); // <-- definitely a total security breach!
저는 이 솔루션이 소수의 프로세스와 소수의 신뢰할 수 있는 사용자만 있는 컴퓨터에서 가장 쉽다고 생각합니다.