Come fare di nuovo / sbin / shutdown, / sbin / reboot ecc. Sudo in 16.04?


18

Per qualsiasi motivo, non è più necessario essere root (o utilizzare sudo) per l'esecuzione /sbin/shutdown, /sbin/rebootecc.

Ciò sembra essere dovuto al fatto che quei file eseguibili sono ora collegamenti simbolici ai /bin/systemctlquali gestisce tutto come un normale utente.

Tuttavia, cosa succede se desidero shutdowne rebootrichiedere nuovamente l'autenticazione root? Come posso raggiungere questo obiettivo?


3
Immagino le regole del polkit. Modifica askubuntu.com/a/570969/158442 secondo necessità (utilizza pkaction | grep login1per altre regole di interesse)
muru

3
(un esempio di regole per richiedere i privilegi di amministratore: askubuntu.com/a/744094/158442 )
muru,

1
Non è questo solo se sei l'unica persona che ha effettuato l'accesso. Se nel sistema è presente qualcun altro, ti verrà chiesto di inserire la password di root.
ognjen,

Potrebbe non essere la risposta che ti aspetti, ma un comportamento simile può essere causato da un altro utente amministratore che ha modificato il tuo '/ etc / sudoers'. Se questo è ciò che sta causando il problema, è possibile modificarlo nuovamente digitando sudo visudoe verificare se esiste una riga con il percorso di questi eseguibili.
Damien,

Risposte:


5

Systemd gestisce effettivamente il shutdown, reboote altri comandi, e i privilegi predefiniti assegnati sono permissivi. Per cambiarlo, devi creare una regola Polkit. Crea un .pklafile in /etc/polkit-1/localauthority/50-local.d(diciamo confirm-shutdown.pkla) contenente:

[Confirm shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.*
ResultActive=auth_admin_keep

I vari spegnimento, riavvio, ecc comandi sono, in termini polkit, azioni org.freedesktop.login1, per esempio, org.freedesktop.login1.power-off, org.freedesktop.login1.reboot, ecc Il problema specifico qui è la configurazione di default, che è in /usr/share/polkit-1/actions/org.freedesktop.login1.policy:

<action id="org.freedesktop.login1.power-off">
        <description>Power off the system</description>
        ...
        <defaults>
                <allow_any>auth_admin_keep</allow_any>
                <allow_inactive>auth_admin_keep</allow_inactive>
                <allow_active>yes</allow_active>
        </defaults>

Si noti che consente all'utente attivo di spegnere, riavviare, ecc.


0

Puoi usare il chmodcomando.

  • Se vuoi dare accesso solo al root, puoi scrivere:

    chmod 700 directory/to/the/file
    
  • Se vuoi dare il permesso alla radice e al gruppo sudo, puoi scrivere:

    chmod 770 directory/to/the/file
    
  • Se vuoi cambiare il gruppo del file da sudo a un altro (come un utente o amministratori) devi digitare:

    chown owner:group directory/to/the/file
    
  • Se vuoi tornare indietro, esegui:

    chown root:sudo filedirectory 
    

Nota : potrebbe essere necessario utilizzare sudoquesti comandi o aver effettuato l'accesso all'account root


Si noti che il tentativo di modificare le autorizzazioni del collegamento modificherà le autorizzazioni della destinazione (in questo caso /bin/systemctl), quindi l'esecuzione di chmod / sbin / shutdown avrà un impatto su tutti i collegamenti che indicano /bin/systemctlcome le autorizzazioni bin/systemctlverranno modificate come confermato dal comando $ ll /bin/systemctl -rwx ------ 1 radice radice 659848 18 gennaio 16:04 / bin / systemctl *
Elder Geek

Se è necessario ripristinarlo, le autorizzazioni predefinite sono-rwxr-xr-x 1 root root 659848 Jan 18 16:04 /bin/systemctl
Elder Geek,


-1

È possibile creare uno script che controlli se l'utente lo sta eseguendo con autorizzazioni di root o meno.
Quindi eseguirà il comando systemctl o restituirà un errore.

#! / Bin / bash
if ["$ (whoami)"! = "root"]; poi
    echo "Siamo spiacenti, non sei root."
    uscita 1
altro
    (comando di spegnimento del sistema)
fi

fonte


4
Cosa impedisce a un utente non root di ignorare semplicemente questo script?
Robie Basak,

-1

Prova a cambiare le sue autorizzazioni nel terminale. Potresti renderlo eseguibile solo da un determinato gruppo, come wheel o admin. Purtroppo (o forse per fortuna), un file può avere solo un gruppo di proprietà, quindi chown semplicemente non funzionerebbe da solo. Prova "sudo chown root: wheel / sbin / shutdown" e poi "sudo chmod g + x / sbin / shutdown". Questo renderà il file eseguibile solo da root e gli amministratori (shudder) e i sudoer dovranno inserire le loro password.


2
Il gruppo "wheel" fa parte di Arch Linux e forse di altre distribuzioni, ma sicuramente non su Ubuntu a proposito.
Byte Commander

2
Questo non è efficace. Un utente può semplicemente scaricare un file binario di sistema da qualche altra parte ed eseguirlo invece.
Robie Basak,

@Robie, potresti farlo con qualsiasi soluzione. È possibile tenere premuto il pulsante di accensione. La mia soluzione funziona per quello che chiede.
chevydog,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.