저는 서버/클라이언트 디자인을 갖춘 개인 프로그램을 가지고 있습니다.
서버 데몬 부분은 제한된 사용자로 실행되어야 하며 프로그램은 루트로 시작된 경우 일부 Linux 프로그램처럼 루트 권한을 포기하도록 설계되지 않았습니다.
그래서 내 질문은 시작 스크립트에서 이 데몬을 다른 사용자로 /etc/init.d/
사용 sudo
하거나 실행해야 합니까?입니다. su
이것이 어떤 차이를 가져오나요? 둘 중 하나가 작동합니까? 다른 건 없나요?
운영 체제는 "Linux From Scratch" 지침을 사용하여 구축된 사용자 정의 GNU/Linux 운영 체제이며 두 프로그램 모두 올바르게 실행됩니다.
답변1
su
두 가지 중에서 이 방법은 구성 가능성이 낮고 예측 가능성이 더 높기 때문에 이 목적으로 사용하겠습니다 . sudo
init 스크립트에서 를 사용한 다음 (실수로 또는 의도적으로) 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에 대한 몇 가지 생각을 찾을 수 있습니다.