Bagaimana membuat / sbin / shutdown, / sbin / reboot dll. Memerlukan sudo lagi di 16.04?

18

Untuk alasan apa pun, kita tidak perlu lagi menjadi root (atau menggunakan sudo) untuk menjalankan /sbin/shutdown, /sbin/rebootdll.

Ini sepertinya karena executable tersebut sekarang merupakan symlink /bin/systemctlyang menangani semuanya sebagai pengguna normal.

Namun, bagaimana jika saya ingin shutdowndan rebootmemerlukan otentikasi root lagi? Bagaimana saya bisa mencapai ini?

Komandan Byte
sumber
3
Saya kira aturan polkit. Ubah askubuntu.com/a/570969/158442 sesuai kebutuhan (gunakan pkaction | grep login1untuk aturan menarik lainnya)
muru
3
(contoh aturan untuk mewajibkan hak istimewa admin: askubuntu.com/a/744094/158442 )
muru
1
Bukankah ini satu-satunya jika Anda adalah satu-satunya orang yang login. Jika ada orang lain yang masuk dalam sistem, Anda akan diminta untuk memasukkan kata sandi root.
ognjen
Itu mungkin bukan jawaban yang Anda harapkan, tetapi perilaku serupa dapat disebabkan oleh pengguna admin lain yang telah mengedit '/ etc / sudoers' Anda. Jika ini yang menyebabkan masalah Anda, maka Anda dapat mengubahnya kembali dengan mengetik sudo visudodan memeriksa apakah ada garis dengan jalur ke executable ini.
Damien

Jawaban:

5

Systemd memang menangani shutdown, rebootdan perintah-perintah lain, dan hak-hak default yang diberikan bersifat permisif. Untuk mengubah ini, Anda perlu membuat aturan Polkit. Buat .pklafile di /etc/polkit-1/localauthority/50-local.d(katakanlah confirm-shutdown.pkla) yang berisi:

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

Berbagai shutdown, reboot, dll perintah yang, dalam hal Polkit, tindakan dalam org.freedesktop.login1, misalnya, org.freedesktop.login1.power-off, org.freedesktop.login1.reboot, dll Masalah spesifik di sini adalah konfigurasi default, yang dalam /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>

Perhatikan bahwa ini memungkinkan pengguna aktif untuk mematikan, me-reboot, dll.

muru
sumber
0

Anda bisa menggunakan chmodperintah.

  • Jika Anda ingin memberikan akses ke root saja, Anda dapat menulis:

    chmod 700 directory/to/the/file
    
  • Jika Anda ingin memberikan permisson ke root dan grup sudo maka Anda dapat menulis:

    chmod 770 directory/to/the/file
    
  • Jika Anda ingin mengubah grup file dari sudo ke yang lain (seperti pengguna atau admin), Anda perlu mengetik:

    chown owner:group directory/to/the/file
    
  • Jika Anda ingin kembali, jalankan:

    chown root:sudo filedirectory 
    

Catatan : Anda mungkin harus menggunakan sudoperintah ini, atau telah login di akun root

Yakusho
sumber
Perhatikan bahwa upaya mengubah izin tautan akan mengubah izin target (dalam kasus ini /bin/systemctl) sehingga menjalankan chmod / sbin / shutdown akan memengaruhi semua tautan yang menunjuk /bin/systemctlsaat izin untuk bin/systemctlakan diubah sebagaimana dikonfirmasi oleh perintah $ ll /bin/systemctl -rwx ------ 1 root root 659848 18 Jan 16:04 / bin / systemctl *
Penatua Geek
Jika Anda perlu mengubahnya kembali, izin defaultnya adalah-rwxr-xr-x 1 root root 659848 Jan 18 16:04 /bin/systemctl
Penatua Geek
0

Karena mengubah izin symlink pada sistem Linux tidak mengubah izin tautan melainkan file yang ditunjuknya (setidaknya di Ubuntu). Saya pikir cara teraman untuk mencapai ini adalah dengan menghapus tautan, dan membuatnya kembali dengan umask yang diperlukan untuk mendapatkan hasil yang Anda inginkan.

Pos terkait lainnya dapat ditemukan di sini

Penatua Geek
sumber
-1

Anda dapat membuat skrip yang memeriksa apakah pengguna menjalankannya dengan izin root atau tidak.
Maka itu akan menjalankan perintah systemctl atau mengembalikan kesalahan.

#! / bin / bash
if ["$ (whoami)"! = "root"]; kemudian
    gema "Maaf, Anda tidak root."
    keluar 1
lain
    (perintah systemctl shutdown)
fi

Sumber

Ven3k
sumber
4
Apa yang menghentikan pengguna non-root dari hanya memotong skrip ini?
Robie Basak
-1

Cobalah untuk mengubah izinnya di terminal. Anda bisa membuatnya hanya dapat dijalankan oleh grup tertentu, seperti roda atau admin. Sayangnya (atau mungkin untungnya), sebuah file hanya dapat memiliki satu kepemilikan grup sehingga chown tidak akan bekerja dengan sendirinya. Coba "sudo chown root: wheel / sbin / shutdown" lalu "sudo chmod g + x / sbin / shutdown". Ini akan membuat file hanya dapat dieksekusi oleh root dan admin (bergetar) dan sudoers akan diminta untuk memasukkan kata sandi mereka.

chevydog
sumber
2
Grup "wheel" adalah sesuatu dari Arch Linux dan mungkin distribusi lainnya, tetapi jelas bukan pada Ubuntu btw.
Byte Commander
2
Ini tidak efektif. Seorang pengguna dapat mengunduh biner systemctl dari tempat lain, dan menjalankannya.
Robie Basak
@ Robie, Anda bisa melakukannya dengan solusi apa pun. Anda dapat menekan dan menahan tombol power. Solusi saya berfungsi untuk apa yang dia minta.
chevydog