![루트가 아닌 사용자로 ircd-hybrid 서버를 실행하십시오.](https://linux55.com/image/66887/%EB%A3%A8%ED%8A%B8%EA%B0%80%20%EC%95%84%EB%8B%8C%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%A1%9C%20ircd-hybrid%20%EC%84%9C%EB%B2%84%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
새 CentOS 7 시스템에 ircd-hybrid를 설치했고 일반 사용자를 통해 실행할 수 있지만 더 낮은 권한을 가진 내 사용자로 실행하고 싶습니다(예: /etc/ircd 외부에서는 쓰기 액세스가 없음). Google과 몇 시간의 시행착오 끝에 다음 방법을 찾았습니다.
su - <user> -c <command>
"nobody"와 같은 셸이나 비밀번호 없이 사용자로 실행하고 싶고 비밀번호가 필요하기 때문에 이 작업은 실패합니다(그래서 항상 실패합니다).
daemon --user=<user> <command>
"데몬"은 명령이 아닌 의 함수이므로 /etc/init.d/functions
sudo(스크립트 실행에 필요) 또는 시작 스크립트를 통해 실행할 때 찾을 수 없기 때문에 실패합니다.
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로 설정하고 쉘을 /로 설정합니다. 스빈/노로그인.