Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von Meillo » 28.03.2018 20:03:43

inception hat geschrieben: ↑ zum Beitrag ↑
28.03.2018 19:39:58
sobald ich versuche eine datei des anderen benutzers zu löschen kommt: "rm: remove write-protected regular empty file 'test'?" woran liegt das?
Na, soweit ist doch alles in Ordnung. Du hast keine Schreibrecht fuer die Datei aber welche fuer das Verzeichnis, darum wirst du gefragt, ob du sie wirklich loeschen willst. (Du kannst sie loeschen, aber die Loeschaktion ist evtl. unplausibel, darum die Frage.)

Wenn du nicht loeschen kannst, dann kommt:

Code: Alles auswählen

rm: cannot remove `/tmp/foo': Operation not permitted

(Der Grund, warum man in /tmp keine fremden Dateien loeschen darf, obwohl man Schreibrechte auf das Verzeichnis hat, ist das Sticky-Bit.)
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von Meillo » 28.03.2018 20:17:54

Ich habe mal im Web nach dem Sinusbot gesucht: Das ist so Teamspeak-Zeugs ...

Wenn man https://wiki.sinusbot.com/en:guides:ins ... tartscript anschaut, dann wird schnell klar, dass das Programm wenig Unix-artig ist und sich folglich nur mit Muehe auf Unix-Art betreiben laesst. Genau an der Stelle haengen wir hier. Das Problem sind nicht Dateiberechtigungen unter Unix, sondern dass die Entwickler des Sinusbots Unix nicht verstanden haben. Wuerden sie ihr Programm so entwickeln wie man das seit Jahrzehnten unter Unix tut, dann gaebe es hier keine Probleme. ich hab wenig Lust ein stimmiges Systemkonzept fuer kaputte Software hinbiegen zu muessen ...
Use ed once in a while!

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von inception » 28.03.2018 22:59:57

ich löse es ganz einfach:

Code: Alles auswählen

#!/bin/sh
SCREEN_NAME="arvlsb"
EXECUTING_USER="arvl"
DIR_NAME="/opt/kunden/arvl"
case "$1" in
start)
	rm /tmp/.sinusbot.lock
	rm /tmp/.X11-unix/X40
	cd ${DIR_NAME}
	sudo -u ${EXECUTING_USER} screen -mdS ${SCREEN_NAME} ${DIR_NAME}/sinusbot -- /usr/bin/Xvfb :1 -screen 0 800x600x16 -ac
	;;
stop)
	sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff '\003' > /dev/null 2>&1
	sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff '\004' > /dev/null 2>&1
	;;
esac
exit 0

Der bot wird über die rc.local beim start des servers gestartet d.h es sind so oder so root rechte vorhanden. Falls ich den manuell starten sollte würde das auch mit root rechten geschehen.

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von inception » 28.03.2018 23:25:05

Meillo kennst du dich mit der rc.local Datei aus da gibt es nähmlich noch eine kleinigkeit

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von Meillo » 29.03.2018 06:52:59

inception hat geschrieben: ↑ zum Beitrag ↑
28.03.2018 22:59:57
Der bot wird über die rc.local beim start des servers gestartet d.h es sind so oder so root rechte vorhanden. Falls ich den manuell starten sollte würde das auch mit root rechten geschehen.
Na, wenn er nun eh mit root-Rechten laeuft ...

Was ich inhaltlich noch nicht verstehe: Warum legt er diese Lock-Datei an? Die braucht man doch nur, wenn man verhindern will, das ein zweiter Bot parallel laeuft. Das scheint also nicht passieren zu duerfen -- warum? Genau das willst du aber tun: zwei Bots parallel zu betreiben. Wozu gibt's diese Lock-Datei? Die ja einfach weggeloescht wird, sowohl in deinem SystemV-Init-Script als auch in dem verlinkten Systemd-Unitfile. Die kann ja keine Wichtigkeit haben, wenn man sie einfach loeschen kann ... obwohl sie, laut Namen, eine Lock-Datei sein soll. Das macht fuer mich noch keinen rechten Sinn.


Um nochmal konstruktiver beizutragen: Mir ist eingefallen, dass du den Bot auch in einer Chroot betreiben koenntest. Dann hat er naemlich sein eigenes /tmp-Verzeichnis.

... ich frage mich nun aber doch, ob das ueberhaupt geht, oder ob die irgendwie kollidieren wuerden, weil sonst braeuchte es diese Lock-Datei ja nicht ...



rc.local ist ein Shellscript, das am Ende des Bootvorgangs als root ausgefuehrt wird. Wenn du Fragen dazu hast, frage. Irgendjemand hier wird dir bestimmt helfen koennen.
Use ed once in a while!

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von inception » 29.03.2018 14:46:26

Der bot läuft nicht mit root rechten um das startscript zu benutzen braucht man rootrechte. Der Bot läuft wie gewollt über einen anderen User. Ich denke es ist nicht gewollt das man mehrere Bots auf einem server laufen lässt da man für mehr Instanzen Normalerweise zahlt. Zur rc.local frage wie kann ich ohne ein weiteres script bewirken das die scripts nacheinander gestartet werden. Sprich Script1(erfolgreich gestartet) dann erst script2 usw.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von Meillo » 29.03.2018 15:04:24

inception hat geschrieben: ↑ zum Beitrag ↑
29.03.2018 14:46:26
Der bot läuft nicht mit root rechten um das startscript zu benutzen braucht man rootrechte. Der Bot läuft wie gewollt über einen anderen User.
Stimmt, hab ich uebersehen.

Zur rc.local frage wie kann ich ohne ein weiteres script bewirken das die scripts nacheinander gestartet werden. Sprich Script1(erfolgreich gestartet) dann erst script2 usw.
Mit `&&' verketten:

Code: Alles auswählen

script1 && script2
Use ed once in a while!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von rendegast » 29.03.2018 15:12:46

Meillo hat geschrieben: Schon doof, dass die Implementierung einen hardgecodeten Dateinamen in /tmp verwendet. Das Betreiben mehrerer Instanzen auf einem Rechner scheint nicht vorgesehen zu sein, obwohl es sinnvolle Usecases dafuer zu geben scheint. Schlechtes Design.
Das Problem sind nicht Dateiberechtigungen unter Unix, sondern dass die Entwickler des Sinusbots Unix nicht verstanden haben. Wuerden sie ihr Programm so entwickeln wie man das seit Jahrzehnten unter Unix tut, dann gaebe es hier keine Probleme. ich hab wenig Lust ein stimmiges Systemkonzept fuer kaputte Software hinbiegen zu muessen ...
steam legt auch eine solche Datei.log in /tmp/ an.



Lösung wären vielleicht auch Container für die Instanzen des Bot.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von inception » 30.03.2018 13:00:41

Miteinander verketten geht nicht es wird ja wie folgt eingetragen:

/home/bsp/script.sh start
/home/bsp1/script.sh start

Dafür müsste ich ein weiteres script anlegen. Vielleicht ist das doch die beste Lösung

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von Meillo » 30.03.2018 17:39:29

inception hat geschrieben: ↑ zum Beitrag ↑
30.03.2018 13:00:41
Miteinander verketten geht nicht es wird ja wie folgt eingetragen:

/home/bsp/script.sh start
/home/bsp1/script.sh start
Geht doch ganz wunderbar:

Code: Alles auswählen

/home/bsp/script.sh start && /home/bsp1/script.sh start
;-)
Use ed once in a while!

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von inception » 31.03.2018 22:56:20

ich probier es einfach mal aus :D

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von inception » 04.04.2018 22:37:54

scheint nicht wirklich zu funktionieren

Code: Alles auswählen

/opt/sinusbot/sbcontrol.sh start && /opt/kunden/arvl/sbcontrol.sh start
Der erste Bot wird ausgeführt der zweite nicht

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von Meillo » 05.04.2018 12:46:06

inception hat geschrieben: ↑ zum Beitrag ↑
04.04.2018 22:37:54
scheint nicht wirklich zu funktionieren

Code: Alles auswählen

/opt/sinusbot/sbcontrol.sh start && /opt/kunden/arvl/sbcontrol.sh start
Der erste Bot wird ausgeführt der zweite nicht
Wenn dem so ist, dann ist der Return-Code des ersten Aufrufs ungleich Null (d.h. ein Fehlercode). Probiere:

Code: Alles auswählen

/opt/sinusbot/sbcontrol.sh start
echo "returncode1: $?"
/opt/kunden/arvl/sbcontrol.sh start
echo "returncode2: $?"
Use ed once in a while!

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von inception » 10.04.2018 00:44:44

scheint immer noch nicht zu funktionieren

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von inception » 10.04.2018 00:50:11

hab das script noch etwas verbessert

Code: Alles auswählen

#!/bin/sh
APPLICATION_NAME="Sinusbot"
SCREEN_NAME="arvlsb"
EXECUTING_USER="arvl"
DIR_NAME="/opt/kunden/arvl"
case "$1" in
start)
	if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
		echo -e "Der ${APPLICATION_NAME} läuft bereits!";
	else
		echo -e "Der ${APPLICATION_NAME} wird gestartet..."			
		cd ${DIR_NAME}
		sudo -u ${EXECUTING_USER} screen -mdS ${SCREEN_NAME} ${DIR_NAME}/sinusbot -- /usr/bin/Xvfb :1 -screen 0 800x600x16 -ac &
		PID=$!
		ps -p ${PID} > /dev/null 2>&1
		if [ "$?" -ne "0" ]; then
			echo -e "Fehler beim von dem ${APPLICATION_NAME}!"
		fi
	fi
	;;
stop)
	if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
		echo -e "Der ${APPLICATION_NAME} wird gestoppt..."
		sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff '\003' > /dev/null 2>&1
		sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff '\004' > /dev/null 2>&1	
	else
		echo -e "$Der {APPLICATION_NAME} läuft nicht!"
	fi
	;;
restart)
	if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
		echo -e "Der ${APPLICATION_NAME} wird neugestartet! Bitte warte einige Sekunden......"
		sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff '\003' > /dev/null 2>&1
		sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff '\004' > /dev/null 2>&1
		sleep 3
		sudo -u ${EXECUTING_USER} screen -mdS ${SCREEN_NAME} ${DIR_NAME}/sinusbot -- /usr/bin/Xvfb :1 -screen 0 800x600x16 -ac &
		PID=$!
		ps -p ${PID} > /dev/null 2>&1
		if [ "$?" -ne "0" ]; then
			echo "Fehler beim von dem ${APPLICATION_NAME}!"
		fi
	else
		echo -e "$Der {APPLICATION_NAME} läuft nicht!"
	fi
	;;
status)
	if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
		echo -e "Der ${APPLICATION_NAME} läuft!"
	else
		echo -e "Der ${APPLICATION_NAME} läuft nicht!"
	fi
	;;
help)
	case "$2" in
		start)
			echo -e "Benutze: \"${0} ${2}\" um den ${APPLICATION_NAME} zu starten."
		;;
		stop)
			echo -e "Benutze: \"${0} ${2}\" um den ${APPLICATION_NAME} zu stoppen."
		;;
		restart)
			echo -e "Benutze: \"${0} ${2}\" um den ${APPLICATION_NAME} neuzustarten"
		;;
		status)
			echo -e "Benutze: \"${0} ${2}\" um zu sehen ob der ${APPLICATION_NAME} online oder offline ist."
		;;
		*)
			echo -e "Benutze: \"${0} help {start|stop|status|console|cmd}\" für Hilfe"
	esac
	;;
*)
	echo -e "Benutzung: ${0} {start|stop|restart|status|help}"
	exit 1
esac
exit 0
und noch ein weiteres Script geschrieben welches das Problem ganz einfach löst. Ob ich nun den start command für ein neuen bot in die rc.local schreibe oder in mein script ist ja völlig egal.

Code: Alles auswählen

#!/bin/sh
case "$1" in
start)
	sudo /opt/kunden/arvl/sbcontrol.sh start
	sudo /opt/sinusbot/sbcontrol.sh start
	;;
stop)
	sudo /opt/kunden/arvl/sbcontrol.sh stop
	sudo /opt/sinusbot/sbcontrol.sh stop
	;;
esac
exit 0

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Benutzer Berechtigung geben Dateien eines anderen Benutzer zu löschen

Beitrag von eggy » 10.04.2018 06:39:55

Meillo hat geschrieben: ↑ zum Beitrag ↑
29.03.2018 06:52:59
Was ich inhaltlich noch nicht verstehe: Warum legt er diese Lock-Datei an? Die braucht man doch nur, wenn man verhindern will, das ein zweiter Bot parallel laeuft.
Genau das scheint der Grund zu sein: https://forum.sinusbot.com/threads/sinu ... agen.4918/

Leider bekomm ich auf der License Seite nur nen "Oops! We ran into some problems." daher keine Ahnung, ob das stimmt und unter welcher Lizenz der Code steht.

Antworten