루트가 아닌 사용자로 ircd-hybrid 서버를 실행하십시오.

루트가 아닌 사용자로 ircd-hybrid 서버를 실행하십시오.

새 CentOS 7 시스템에 ircd-hybrid를 설치했고 일반 사용자를 통해 실행할 수 있지만 더 낮은 권한을 가진 내 사용자로 실행하고 싶습니다(예: /etc/ircd 외부에서는 쓰기 액세스가 없음). Google과 몇 시간의 시행착오 끝에 다음 방법을 찾았습니다.

su - <user> -c <command>

"nobody"와 같은 셸이나 비밀번호 없이 사용자로 실행하고 싶고 비밀번호가 필요하기 때문에 이 작업은 실패합니다(그래서 항상 실패합니다).

daemon --user=<user> <command>

"데몬"은 명령이 아닌 의 함수이므로 /etc/init.d/functionssudo(스크립트 실행에 필요) 또는 시작 스크립트를 통해 실행할 때 찾을 수 없기 때문에 실패합니다.

runuser -u <user> <command>
sudo -u <user> <command>

이것들은 내가 아는 한 가깝고 동일한 방식으로 작동합니다. 옵션 없이 실행하면 작동합니다.

sudo -u nobody '/etc/ircd/ircd'

그러나 구성 파일이 없기 때문에 ircd는 즉시 종료됩니다. 또는 적어도 제 생각엔 그런 일이 일어나고 있다고 생각합니다. ps -aux | grep irc일반 사용자로 실행해도 grep 프로세스만 반환됩니다.

sudo -u nobody '/etc/ircd/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log'

그러나 인수가 1개 또는 2개 있으면 다음을 반환합니다.

sudo: /etc/ircd/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log: command not found

동일한 명령 빼기를 실행하면 sudo -u nobody예상대로 정확하게 작동합니다.

내가 놓친 게 무엇입니까? 대체 다른 사용자로 데몬을 시작하는 것이 왜 그렇게 어려운가요?

고쳐 쓰다: Arthur2e5의 의견 덕분에 이것은 데몬을 "nobody"(따옴표 생략)로 시작하는 직접적인 명령으로 작동합니다.

sudo -u nobody /etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log

그러나 원래 목표는 이것을 시작 스크립트로 실행하는 것이었고 sudo는 옵션이 아닙니다( Jun 13 07:03:00 coldcandor.com sudo[5335]: sudo: sorry, you must have a tty to run sudo). 이 경우 runuser가 유일한 방법인 것처럼 보이지만 동일한 방법을 시도하면 다음과 같은 결과를 얻습니다.

$ runuser -u nobody /etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log
runuser: invalid option -- 'o'

Usage:
 runuser [options] -u <USER> COMMAND
 runuser [options] [-] [USER [arg]...]

대체 구문을 시도해도 도움이 되지 않았습니다(runuser가 실행하려면 루트가 필요하므로 루트 계정에서 실행할 때).

$ runuser - nobody /etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log
runuser: invalid option -- 'o'


$ runuser - nobody '/etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log'
This account is currently not available.

마지막 마술은 무엇입니까?

답변1

대체 구문으로 더 많은 작업을 수행하고 매뉴얼 페이지를 다시 파고들면서 -s 옵션을 찾았습니다. 할렐루야! 스타트업 서비스로 실행됩니다!

/sbin/runuser -s /bin/sh - nobody -c '/etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log'

내가 걱정하는 유일한 것은 이것입니다. 누군가 지금 쉘을 사용하여 실행하도록 강요하면 보안이 손상됩니까? 그렇지 않은 것 같고 매뉴얼 페이지에도 경고가 없습니다.

이것이 로그 파일에 쓰기를 허용하지 않는다는 것을 알고 있으므로 /var/log/ircd 디렉토리를 소유하는 irc라는 새 사용자:그룹을 만들고 홈을 /etc/ircd로 설정하고 쉘을 /로 설정합니다. 스빈/노로그인.

관련 정보