sudo izin ditolak tetapi su memberikan izin

11

ini adalah kejadian pertama di mana su diperlukan untukku.

Saya membaca sebuah artikel tentang mengubah nilai pada / sys / devices / virtual / backlight / acpi_video0 / brightness untuk mengubah kecerahan layar laptop saya.

Saya pertama kali memperhatikan bahwa ketika saya melakukannya $ sudo echo 10 > brightnesssaya akan mendapat izin ditolak.

Saya beralih ke root menggunakan su dan # echo 10 > brightnessmengubah kecerahan saya hampir secara instan.

Hal aneh terakhir yang saya alami terjadi ketika saya mencoba # echo 20 > brightness(file maxbrightness memiliki nilai 15) dan saya mendapat kesalahan tulis

Bisakah seseorang menjelaskan perbedaan antara sudo dan su kepada saya? Memahami kesalahan tulis akan menjadi bonus tambahan. Setiap bantuan, petunjuk, dan / atau tautan akan sangat dihargai.

cacat
sumber
1
Terkait unix.stackexchange.com/q/1416/250
phunehehe

Jawaban:

17

Pengalihan tidak berfungsi seperti itu. Menambah >perintah akan menjalankan pengalihan itu sebagai pengguna yang memohon (Anda) dan bukan sebagai root. Lakukan dengan tee:

echo 20 | sudo tee /sys/devices/virtual/backlight/acpi_video0/brightness

atau dengan menjalankan perintah dalam shell istimewa yang terpisah:

sudo bash -c "echo 20 > /sys/devices/virtual/backlight/acpi_video0/brightness"
mengibaskan
sumber
Seperti ujung tee. Tidak terpikir oleh saya selama 15 tahun saya unix sysadmining :-) Jelas ketika dilihat.
Tuan Shark
8

Ini bukan karena sudo, itu karena cara perintah Anda diproses; Saya sebenarnya menjelaskannya dalam pertanyaan ini . Saat kamu melakukan

$ sudo echo 10 > brightness

shell menjalankan perintah sudo echo 10, yang berjalan echo 10sebagai root. Shell kemudian mencoba untuk membuka brightnesssehingga dapat mengarahkan output dari echo 10ke dalamnya, tetapi tidak bisa - shell Anda berjalan dengan izin Anda, bukan root. Ada solusi yang diposting sebagai jawaban atas pertanyaan yang saya tautkan; yang bagus adalah:

$ echo 10 | sudo tee brightness

Sekarang teeyang harus dibuka brightness, dan karena itu berjalan sebagai root berhasil

Michael Mrozek
sumber
3

su = s witch u ser: Gunakan shell sebagai pengguna yang berbeda

sudo = s uper u ser do : mengeksekusi perintah berikut sebagai user root.

Dalam kasus Anda, perintah berikut ini hanya echo 20, maka hanya echo 20 yang dieksekusi sebagai root (seperti yang dikatakan sebelumnya). Redirect dijalankan seperti Anda lagi.

Michael Niemand
sumber
2

Anda mungkin ingin melihat /etc/sudoersfile. Jika a / c Anda tidak terdaftar di sana, maka Anda tidak akan bisa sudo.

Yousouser
sumber
Benar, tetapi Anda akan mendapatkan pesan kesalahan khusus dalam kasus itu ("nama pengguna tidak ada dalam file sudoers")
Michael Mrozek