Berechtigung verweigert beim Versuch, mv auszuführen (sudo su userName)

Berechtigung verweigert beim Versuch, mv auszuführen (sudo su userName)

Ich arbeite derzeit an einem Backup-Skript, um mich bei meinem Produktionsserver anzumelden und die neuesten SQL-Dumps auf meinen Staging-Server zu ziehen. Ich habe kein Problem damit, die SQL-Dumps zu ziehen, aber ich habe ein Problem damit, die letzten Backup-Dateien in einen temporären Ordner zu verschieben.

Mein Backup-Skript-Benutzer:mysqlBackupUser

Ich verwende das Home-Verzeichnis dieses Benutzers als Speicherort für dieses Skript und zum Speichern der Backups. Die Ordnerstruktur ist:

/home
   |- mysqlBackupUser
       |- .ssh
       |- backups
       |- bin

Mein Skript sitzt drin binund die Backups werden in das backupsVerzeichnis heruntergeladen

Das backupsVerzeichnis enthält außerdem andere Ordner zum Organisieren des Servers und der Art der Sicherungen. Beispiel:

/backups
   |-mysql
       |- production1
       |- production2
   |-misc
       |- production1
       |- production2

Bisher ist alles in Ordnung und funktioniert wie erwartet. Das Problem ist, wenn ich mich in folgendem Zustand befinde (nicht darauf beschränkt):

/home/mysqlBackupUser/backups/mysql/production1/

wenn ich das temporäre Verzeichnis mit dem Namen erstelle _lastBackUpund versuche, meine vorherigen Backups dorthin zu verschieben, erhalte ich:

find: Failed to change directory: Permission denied

Mein Code hierfür ist:

local tmpBackUpDir="${LOCAL_LOCATION_DIR}/_lastBackUp/"

# Ensure the directory exist
mkdir -p "${tmpBackUpDir}"

# move any previous files to bak
find "${LOCAL_LOCATION_DIR}/" -type f -exec mv -t "${LOCAL_BAKUP_DIR}" {} \+;;

Zur Klarheit:

LOCAL_LOCATION_DIR = /home/mysqlBackupUser/backups/mysql/production1
tmpBackUpDir = /home/mysqlBackupUser/backups/mysql/production1/_lastBackUp/

Um zu verstehen, wie das Skript verwendet wird: Derzeit bin ich als mein Benutzer angemeldet und ich bin

sudo su mysqlBackupUser

Als Benutzer. Ich bin nicht sicher, ob dies das Problem ist, und ich kann es nicht testen, indem ich mich als dieser Benutzer anmelde. Das Skript wird von Cron ausgeführt und verhält sich als dieser Benutzer (Schlüssel sind so eingerichtet, dass die Automatisierung für diesen Benutzer einfacher ist), um den Vorgang auszuführen. Daher bin ich nicht sicher, ob dies wirklich das Problem ist.

Ich habe die Eigentümerschaft und Berechtigungen aller Ordner überprüft, auch die des Ordners, der _lastBackUpmir gehört mysqlBackupUser. Ich habe _lastBackUpzum Testen sogar 777 eingestellt und trotzdem wurden mir die Berechtigungen verweigert ...

Mein kompletter Fehler ist:

find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: failed to restore initial working directory: Permission denied

Jeder find: Failed to change directory: Permission deniedist für jede Datei, die ich verschieben möchte_lastBackUp

Vielen Dank für alle Einblicke in dieses Thema.

Antwort1

Der Fehler scheint darin zu liegen, dass keine Berechtigung fürändernVerzeichnis.

  • Stellen Sie sicher, dass der Benutzer mindestens Zugriff r-xauf alle Ordner hat, die zu dem Pfad führen, von dem aus das Skript ausgeführt wird.
  • Überprüfen Sie, ob der Benutzer mindestens rwxüber den Ordner und die Dateien verfügt, in denen sich die Sicherungen befinden.
  • Überprüfen Sie, ob der Benutzer eine Login-Shell hat, $HOMEund $PATH. Wenn ja, speichern Sie das Skript cdan einem relevanten Ort, bevor Sie den Vorgang starten. Wenn nicht, definieren Sie alle Befehle und Speicherorte mitabsolutPfade.

Andere mögliche Ursachen fallen mir nicht ein.

Antwort2

Wenn mkdir funktioniert (was anscheinend der Fall ist), und Sie ein ls -al über das übergeordnete Verzeichnis ausführen, wer ist dann der Eigentümer der Verzeichnisse? Für mich klingt das so, als ob irgendwo etwas mit den Berechtigungen schief läuft.

verwandte Informationen