Launchd non eseguirà un comando bindfs

3

Voglio usare launchd per eseguire i comandi bindfs al login, come root. Ho un plist in /Library/LaunchAgents/loginsftpjailmount.plist (con chmod 600) e uno script di shell in /usr/local/bin/loginsftpjailmount.sh.

Dovrei iniziare dicendo che funziona - se cambio lo script di bash per eseguire

mkdir /Users/Me/Desktop/itworks

quindi crea correttamente la directory "itworks", sia all'accesso che all'esecuzione

sudo launchctl load /Library/launchAgents/loginsftpjailmount.plist

E la cartella creata è di proprietà di root e devo digitare la mia password per cancellarla. Quando eseguo manualmente lo script bash dal terminale usando sudo, il comando bindfs funziona.

Quindi riassumendo: so che la sceneggiatura funziona. So che il plist funziona. So che lavorano insieme a launchd. Ma il comando bindfs non funziona! Ho controllato il registro di sistema con

sudo grep com.user /var/log/system.log

e dice che termina con l'errore 127 (com.user è parte dell'etichetta per il mio plist). Ho cercato online e nessuna delle soluzioni per l'errore 127 funziona per me. Per riferimento, due plists che ho usato sono:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.user.loginitem</string>
<key>ProgramArguments</key>
<array>
    <string>bash</string>
    <string>-c</string>
    <string>bash -c "bindfs /Volumes/BRIGHTRED/ServedDocuments /sftpjail/Documents"</string>
</array>
<key>RunAtLoad</key>
<true/>

e anche

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.user.loginitem</string>
        <key>Program</key>
        <string>/usr/local/bin/loginsftpjailmount.sh</string>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>
    
posta Kyle 23.03.2017 - 00:20
fonte

1 risposta

2

Il processo bindfs deve essere avviato con i privilegi di root. L'avvio come agente impedirebbe questo.

Quindi sudo launchctl unload ... e sudo launchctl remove ... (il sottocomando remove rimuove l'agente dal database launchd - il file non verrà cancellato!) il plist, sposta il plist in / Library / LaunchDaemons / e ricaricalo con sudo launchctl load ... .

Un file org.user.bindfs.sftpjail.plist correttamente denominato e composto sarà simile a questo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>org.user.bindfs.sftpjail</string>
        <key>ProgramArguments</key>
        <array>
                <string>/opt/local/bin/bindfs</string>
                <string>/Volumes/BRIGHTRED/ServedDocuments</string>
                <string>/sftpjail/Documents</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/tmp/org.user.bindfs.sftpjail.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/org.user.bindfs.sftpjail.out</string>
        <key>WatchPaths</key>
        <array>
                <string>/Volumes/BRIGHTRED</string>
        </array>
</dict>
</plist>

Il tasto WatchPath è spesso richiesto (era nel mio caso) per evitare problemi di temporizzazione. Puoi rimuovere le chiavi StandardErrorPath / StandardOutPath e le sue stringhe dopo aver verificato che tutto funzioni correttamente.

    
risposta data 23.03.2017 - 02:25
fonte

Leggi altre domande sui tag