systemd 서비스가 시작되지 않았습니다(권한이 거부됨)

systemd 서비스가 시작되지 않았습니다(권한이 거부됨)

그래서 오늘 저는 ts3 서버를 이전 Windows 상자에서 새로운 centos8 서버로 옮기기로 결정했습니다. 모든 것이 잘 작동하지만 이제 부팅 시 서버가 자동으로 시작될 수 있도록 systemd 서비스 파일을 만들려고 합니다. 서비스 사용자로 시작하려고 하면 모든 것이 잘 실행되지만 루트(systemctl 사용)로 시작할 수는 없습니다. 추가 정보:

함께 달리고 싶은 사용자

[root@lnxsrv01 opt]# id teamspeak
uid=1000(teamspeak) gid=1000(teamspeak) groups=1000(teamspeak)

내 폴더 구조(권한 확인 및 실행 플래그 확인)

[root@lnxsrv01 teamspeak]# ll
total 16380
drwxr-xr-x. 9 teamspeak teamspeak     4096 Nov  2 17:28 .
drwxr-xr-x. 3 root      root            23 Nov  2 16:11 ..
-rw-------. 1 teamspeak teamspeak      629 Nov  2 17:30 .bash_history
-rw-rw-rw-. 1 teamspeak teamspeak    66724 Jul  2 11:21 CHANGELOG
drwxr-xr-x. 3 teamspeak teamspeak      192 Jun 17 18:27 doc
drwx------. 4 teamspeak teamspeak       45 Nov  2 16:59 files
-rwxr-xr-x. 1 teamspeak teamspeak   947368 Jul  2 15:24 libts3db_mariadb.so
-rwxr-xr-x. 1 teamspeak teamspeak  2174344 Jul  2 15:24 libts3db_sqlite3.so
-rwxr-xr-x. 1 teamspeak teamspeak  1096144 Jul  2 15:24 libts3_ssh.so
-rw-r--r--. 1 teamspeak teamspeak    68141 Jun 17 18:27 LICENSE
drwx------. 2 teamspeak teamspeak      270 Nov  2 17:10 logs
-rw-rw-rw-. 1 teamspeak teamspeak        0 Nov  2 16:59 query_ip_blacklist.txt
-rw-rw-rw-. 1 teamspeak teamspeak       14 Nov  2 16:59 query_ip_whitelist.txt
drwxr-xr-x. 2 teamspeak teamspeak       29 Jul  2 15:24 redist
drwxrwxrwx. 2 teamspeak teamspeak     8192 Jun 24 11:28 serverquerydocs
drwxrwxrwx. 5 teamspeak teamspeak     8192 Jun 17 18:26 sql
-rw-rw-rw-. 1 teamspeak teamspeak     3243 Nov  2 16:59 ssh_host_rsa_key
-rwxr-xr-x. 1 teamspeak teamspeak 12033888 Jul  2 15:24 ts3server
-rw-rw-r--. 1 teamspeak teamspeak        0 Nov  2 16:59 .ts3server_license_accepted
-rwxrwxrwx. 1 teamspeak teamspeak      117 Jun 17 18:26 ts3server_minimal_runscript.sh
-rw-rw-r--. 1 teamspeak teamspeak        6 Nov  2 17:10 ts3server.pid
-rw-r--r--. 1 teamspeak teamspeak   282624 Nov  2 16:58 ts3server.sqlitedb
-rw-r--r--. 1 teamspeak teamspeak    32768 Nov  2 17:22 ts3server.sqlitedb-shm
-rw-r--r--. 1 teamspeak teamspeak     6320 Nov  2 17:21 ts3server.sqlitedb-wal
-rwxrwxrwx. 1 teamspeak teamspeak     2654 Jun 18 11:51 ts3server_startscript.sh
drwxr-xr-x. 2 teamspeak teamspeak       85 Jul  2 15:24 tsdns
[root@lnxsrv01 teamspeak]# pwd
/opt/teamspeak

내 시스템 서비스 파일

[root@lnxsrv01 teamspeak]# cat /lib/systemd/system/teamspeak3.service
[Unit]
Description=TeamSpeak Server Service
After=network.target

[Service]
Type=forking
WorkingDirectory=/opt/teamspeak/
ExecStart=/opt/teamspeak/ts3server_startscript.sh start
ExecStop=/opt/teamspeak/ts3server_startscript.sh stop
User=teamspeak
Group=teamspeak
PIDFile=/opt/teamspeak/ts3server.pid
Restart=always
RestartSec=9
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=teamspeak3

[Install]
WantedBy=multi-user.target

관련 시스템 로그 항목

Nov  2 17:26:36 lnxsrv01 systemd[17585]: teamspeak3.service: Failed to execute command: Permission denied
Nov  2 17:26:36 lnxsrv01 systemd[17585]: teamspeak3.service: Failed at step EXEC spawning /opt/teamspeak/ts3server_startscript.sh: Permission denied
Nov  2 17:26:36 lnxsrv01 systemd[1]: teamspeak3.service: Control process exited, code=exited status=203
Nov  2 17:26:36 lnxsrv01 systemd[1]: teamspeak3.service: Failed with result 'exit-code'.
Nov  2 17:26:36 lnxsrv01 systemd[1]: Failed to start TeamSpeak Server Service.
Nov  2 17:26:43 lnxsrv01 systemd[1]: Stopped TeamSpeak Server Service.

"teamspeak" 사용자에게 su를 요청하고 거기에서 startscript를 실행하면 모든 것이 잘 작동합니다. 하지만 시스템이 제대로 작동하지 않는 것 같습니다.

내가 여기서 놓친 아이디어가 있습니까?

답변1

SELinux를 꺼서 문제를 해결할 수 있다면 좀 더 자세히 살펴보고 원인을 알아내는 것이 좋습니다.

(포트 80을 열기 위해 방화벽을 닫지는 않겠죠?)

이 특별한 경우 시스템 단위 파일을 통해 바이너리나 스크립트를 호출하려면 SELinux 유형 bin_t( 일반 파일 /usr/bin과 유사 )이어야 합니다./usr/sbin

파일 유형을 확인하려면 ls's -Z플래그를 사용하세요. 그런 다음 그에 따라 유형을 설정하십시오.

chcon -t bin_t /opt/teamspeak/ts3server_startscript.sh

SELinux에서 차단하는 작업과 그 이유를 알아보려면 에서 감사 로그를 검토하세요 /var/log/audit/audit.log.

그러나 파일의 SELinux 유형을 변경하는 것만으로는 충분하지 않은 경우가 많습니다.

  • 때로는 semanage fcontext …(맨페이지여기) 영구적인 보안 컨텍스트 변경을 수행하는 명령입니다(디렉터리의 새 파일이 올바른 컨텍스트를 상속하도록).

  • 때로는 하나부울 값당신이 성취하고자 하는 것을 정확히 위해 존재합니다.

  • 최악의 경우에는 SELinux 정책 패키지를 컴파일해야 합니다(저는 다음과 같이 썼습니다).기사제가 얼마전에 말했었습니다.)

답변2

SElinux는 내 레이더에 없었습니다. SElinux를 끄면 문제가 해결되었습니다.

관련 정보