그래서 오늘 저는 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 유형을 변경하는 것만으로는 충분하지 않은 경우가 많습니다.
답변2
SElinux는 내 레이더에 없었습니다. SElinux를 끄면 문제가 해결되었습니다.