시작 스크립트에 "sudo" 또는 "su"를 사용해야 합니까?

시작 스크립트에 "sudo" 또는 "su"를 사용해야 합니까?

저는 서버/클라이언트 디자인을 갖춘 개인 프로그램을 가지고 있습니다.

서버 데몬 부분은 제한된 사용자로 실행되어야 하며 프로그램은 루트로 시작된 경우 일부 Linux 프로그램처럼 루트 권한을 포기하도록 설계되지 않았습니다.

그래서 내 질문은 시작 스크립트에서 이 데몬을 다른 사용자로 /etc/init.d/사용 sudo하거나 실행해야 합니까?입니다. su이것이 어떤 차이를 가져오나요? 둘 중 하나가 작동합니까? 다른 건 없나요?

운영 체제는 "Linux From Scratch" 지침을 사용하여 구축된 사용자 정의 GNU/Linux 운영 체제이며 두 프로그램 모두 올바르게 실행됩니다.

답변1

su두 가지 중에서 이 방법은 구성 가능성이 낮고 예측 가능성이 더 높기 때문에 이 목적으로 사용하겠습니다 . sudoinit 스크립트에서 를 사용한 다음 (실수로 또는 의도적으로) init 스크립트의 항목을 삭제하면 init root ALL=(ALL) ALL스크립트 /etc/sudoers가 이상하게 중단됩니다.

또한 구성 공간을 더욱 줄이기 위해 다음 형식을 사용합니다.

su -s /bin/sh -c "my_program my_args etc" my_user

-s옵션은 스크립트를 중단하지 않고 사용자의 기본 셸을 /bin/false 또는 /sbin/nologin 또는 다른 것으로 변경할 수 있음을 의미합니다. /dev/null프로그램이 아직 이 문제를 자체적으로 처리하지 않는 경우 표준 I/O를 다른 적절한 위치로 리디렉션할 수도 있습니다.

답변2

귀하의 편의를 위해 다음을 살펴 보는 것이 좋습니다.CHPSTrunit 하이퍼바이저 스택의 프로그램. 이는 매우 편리하며 sudo/ 의 골칫거리인 명령줄 인수 이스케이프와 같은 혼란을 방지합니다 su.

다른 사용자로 프로그램을 실행하려면 다음과 같이 호출할 수 있습니다.

chpst -u my_user /path/to/program

그것은 실제로 setsid귀하의 프로그램에 있습니다 setgid. execve그게 전부입니다(다른 좋은 기능도 많이 있습니다).

배포판에 다음이 포함된 경우바쁜 상자, 애플릿을 컴파일하는지 확인할 수도 있습니다 chpst. 이미 애플릿이 있고 별도의 패키지가 필요하지 않을 수도 있습니다.

답변3

권한을 포기하도록 프로그램을 쉽게 변경할 수 있다면 이것이 최선의 접근 방식입니다. 시작 스크립트에서 사용자 ID를 전환하는 것은 "작동"하더라도 번거롭고 유연성이 없습니다.

답변4

기술적으로는 둘 다 잘 작동하지만 여기에서는 규칙을 따르는 것이 좋습니다. sudo는 일반적으로 단일 명령을 실행하기 위해 루트로 권한을 높이는 데 사용되는 반면, su는 일반적으로 새 사용자로 변경한 다음 해당 새 사용자로 명령을 실행하는 데 사용됩니다.

즉, 빠른 Google 검색을 수행하면 sudo와 su에 대한 몇 가지 생각을 찾을 수 있습니다.

관련 정보