Mengapa sudo ganda memodifikasi izin?

3

Konteks:

sshed menjadi AWS t1.micro contoh menjalankan Amazon Linux 2.013,09, menggunakan default ec2-user. Saya mencoba daftar isi direktori postgresql default:

Apa yang ada di sana?

$ ls /var/lib/pgsql9/

ls: cannot open directory /var/lib/pgsql9/: Permission denied

Baik. Siapa pemilik ini?

$ ls -l /var/lib | grep pgsql
drwx------ 4 postgres postgres 4096 Jun 22 16:06 pgsql9

Ah. Saya konyol.

$ sudo -u postgres ls /var/lib/pgsql9/

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for ec2-user:

... Apa? ec2-userpunya kata sandi? Waktunya untuk senjata yang lebih besar.

$ sudo sudo -u postgres ls /var/lib/pgsql9/
backups  data

Keberhasilan! Sekarang, buka superuser.com untuk mencari tahu apa yang terjadi.

Mengapa sudo sudoberperilaku berbeda dari sudo?

kdbanman
sumber
3
Anda tahu, sudo ls /var/lib/pgsql9akan berhasil juga. rootdapat mengakses hal-hal bahkan jika itu tidak ada dalam izin
Nathan C
Terima kasih! Saya merasa sangat konyol karena tidak mencobanya.
kdbanman

Jawaban:

5

Amazon EC2 dibangun seperti Ubuntu: tidak ada rootakses dan semuanya dilakukan sudosebagai gantinya.

Apa yang sudodilakukan perintah Anda adalah mencoba menyamar postgres, meminta izin untuk melakukannya. ec2-usertidak memiliki izin ini, jadi sudoakan meminta kata sandi (yang akan gagal karena tidak memilikinya).

Ketika Anda melakukannya sudo sudo, Anda memanggil yang kedua sudosebagai root yang memiliki izin untuk menyamar sebagai pengguna lain, sehingga perintah itu berfungsi. Karena cara sudoini dikonfigurasikan (baris NOPASSWD di sudoers) tidak perlu kata sandi untuk dieksekusi sebagai root.

Nathan C
sumber
Saya harus membaca itu beberapa kali. Jadi, [email protected] $ sudo <command>jalankan <command>as root, dan sudoperintah itu melihat myusersebagai eksekutor dari sudo. Merantai mereka sebagai [email protected] $ sudo sudo ...sarana yang sudodilihat batin rootsebagai pelaksana, yang memiliki izin untuk menyamar sebagai pengguna. Apakah saya benar?
kdbanman
Itu betul.
Nathan C
ini menyelamatkan hari saya.
Soorena