Apa tujuan dari pengguna 'tidak ada'?

93

Setelah saya membaca Daftar semua pengguna manusia, saya perhatikan ada akun pengguna bernama 'tidak ada' di sistem Ubuntu saya.

Saya juga memperhatikan bahwa saya dapat masuk di akun ini dari terminal menggunakan perintah berikut dan kata sandi saya:

sudo su nobody

tak seorang pun

Saya sama sekali tidak keberatan, tetapi saya ingin tahu apa tujuan dari pengguna ini? Apakah ini dibuat secara default pada instalasi baru Ubuntu atau dibuat dengan menginstal paket tertentu?

Radu Rădeanu
sumber
8
Perhatikan bahwa ketika Anda masuk menggunakan kata sandi Anda, Anda menggunakan kata sandi Anda untuk langkah sudo, bukan untuk akun siapa pun (dan bahwa alasan itu berfungsi adalah karena pengguna super dapat su kepada siapa pun tanpa perlu memasukkan kata sandi mereka (meskipun sebagai disebutkan di bawah, saya percaya setidaknya pada RH-turunannya, jika shell tidak ada yang diatur ke / sbin / nologin, Anda masih tidak akan bisa login bahkan menggunakan superuser (alias root)
Foon
Itu yang terjadi secara default sekarang (18.04+?). sudo su nobodykembali Akun ini saat ini tidak tersedia. karena shell untuk pengguna nobody diatur ke/usr/sbin/nologin ( getent passwd nobody).
Pablo A
@sarnold - silakan lihat komentar saya pada jawaban yang saya yakin Anda singgung. Ini jawaban yang agak buruk, karena tidak beralasan atau mengutip sumber. Lebih jauh lagi bertentangan dengan yang saya tahu tentang akun siapa pun dan bagaimana NFS bekerja: dengan root_squashitu akan memetakan root ke siapa pun di sistem jarak jauh. Ini kira-kira kebalikan dari apa yang dinyatakan oleh jawaban ini
vidarlo

Jawaban:

85

Itu ada untuk menjalankan hal-hal yang tidak memerlukan izin khusus. Biasanya dicadangkan untuk layanan yang rentan (httpd, dll) sehingga jika mereka diretas, mereka akan memiliki kerusakan minimal pada sisa sistem.

Bandingkan ini dengan menjalankan sesuatu sebagai pengguna nyata, jika layanan itu dikompromikan (server web kadang-kadang dieksploitasi untuk menjalankan kode arbitrer), itu akan berjalan sebagai pengguna itu dan memiliki akses ke semua yang dimiliki pengguna. Dalam kebanyakan kasus, ini sama buruknya dengan mendapatkan root.

Anda dapat membaca sedikit lebih banyak tentang pengguna yang tidak ada di Wiki Ubuntu:

Untuk menjawab tindak lanjut Anda:

Mengapa saya tidak dapat mengakses akun ini su nobody?

sudo grep nobody /etc/shadowakan menunjukkan kepada Anda bahwa tidak ada yang tidak memiliki kata sandi dan Anda tidak bisa sutanpa kata sandi akun. Cara terbersih adalah sudo su nobodysebaliknya. Itu akan membuat Anda dalam shcangkang yang cukup terpencil .

Bisakah Anda memberikan contoh tertentu ketika ditunjukkan untuk menggunakan akun ini?

Ketika izin tidak diperlukan untuk operasi program. Ini paling penting ketika tidak akan ada aktivitas disk apa pun.

Contoh dunia nyata dari hal ini adalah memcached(cache / basis data / memori dalam nilai kunci), duduk di komputer saya dan server saya berjalan di bawah akun siapa pun. Mengapa? Karena itu tidak memerlukan izin dan untuk memberikannya akun yang memang memiliki akses tulis ke file hanya akan menjadi risiko yang tidak perlu.

Oli
sumber
Hanya dua hal lagi jika Anda dapat menjelaskan: 1) mengapa saya tidak dapat mengakses akun ini su nobodydan 2) dapatkah Anda memberikan contoh tertentu ketika ditunjukkan untuk menggunakan akun ini?
Radu Rădeanu
@ RaduRădeanu 1) Saya menduga itu karena tidak memiliki set kata sandi, dan ketika Anda susebagai pengguna biasa, Anda harus memberikan kata sandi pengguna target. Cobalah sudo -ikemudian su nobodydari shell root (yang tidak akan meminta password).
CVn
2
Network File Systempeta rootke nobodyroot lokal sehingga tidak dapat mengakses segala sesuatu seperti root remote.
Sylwester
1
@ RaduRădeanu Harap perhatikan riwayat edit. Ketika saya menguji perintah asli (bukan apa yang ada di sana) ini awalnya saya berakhir di shell dash (/ bin / sh) tapi saya tidak bisa meniru itu sekarang. Hasil edit asli Anda baik-baik saja. Bukan aku yang mengubahnya.
Oli
1
Saya selalu berpikir nobodysebenarnya / terutama digunakan oleh NFS sebagai status linuxstandardbase .
dgonzalez
29

Dalam banyak varian Unix, "tidak ada" adalah nama konvensional dari akun pengguna yang tidak memiliki file, tidak ada dalam kelompok istimewa, dan tidak memiliki kemampuan kecuali yang dimiliki setiap pengguna lainnya.

Adalah umum untuk menjalankan daemon sebagai bukan siapa-siapa, terutama server, untuk membatasi kerusakan yang bisa dilakukan oleh pengguna jahat yang menguasai mereka. Namun, kegunaan teknik ini berkurang jika lebih dari satu daemon dijalankan seperti ini, karena dengan mendapatkan kendali atas satu daemon akan memberikan kendali atas semuanya. Alasannya adalah bahwa tidak ada proses yang dimiliki memiliki kemampuan untuk mengirim sinyal satu sama lain dan bahkan men-debug satu sama lain, memungkinkan mereka untuk membaca atau bahkan memodifikasi memori masing-masing.

Informasi diambil dari http://en.wikipedia.org/wiki/Nobody_(username) .

Paulius Šukys
sumber
-1: nobodyhanya untuk NFS dan tidak boleh digunakan oleh layanan lain dan tentunya tidak oleh administrator sistem. Terima kasih.
sarnold
22

Tidak ada pengguna yang dikhususkan untuk NFS saja.

Jawaban di atas agak salah, karena mereka menganggap itu nobodyadalah id pengguna gaya anonim / tamu "generik".

Dalam model kontrol akses UNIX / Linux, gaya pengguna anonim / gaya id tamu tidak ada dan ini adalah saran buruk:

  • " umum menjalankan daemon sebagai nobody, terutama server, untuk membatasi kerusakan yang dapat dilakukan oleh pengguna jahat yang mendapatkan kendali atas mereka. " karena hal-hal berikut: " Namun, kegunaan teknik ini berkurang jika lebih dari satu daemon dijalankan seperti ini, karena dengan mendapatkan kendali satu daemon akan memberikan kendali atas mereka semua ".
  • " Contoh dunia nyata dari hal ini adalah memcached(cache / database / memori dalam nilai kunci), berada di komputer saya dan server saya berjalan di bawah nobodyakun. Mengapa? Karena itu tidak memerlukan izin apa pun dan untuk memberikannya akun yang memang memiliki akses tulis ke file hanya akan menjadi risiko yang tidak perlu. "

Nama nobodypengguna dengan id pengguna 65534 dibuat dan dicadangkan untuk tujuan tertentu dan harus digunakan hanya untuk tujuan itu: sebagai pengganti bagi pengguna "id" yang belum dipetakan dan id pengguna dalam ekspor pohon NFS.

Yaitu, kecuali jika pemetaan pengguna / id diatur untuk ekspor NFS tree, semua file dalam ekspor tersebut akan tampaknya dimiliki oleh nobody. Tujuannya adalah untuk mencegah semua pengguna pada sistem impor mengakses file-file tersebut (kecuali jika mereka memiliki izin "lainnya"), karena tidak satu pun dari mereka (kecuali root) yang dapat / menjadi nobody.

Oleh karena itu adalah ide yang sangat buruk untuk menggunakan nobodyuntuk setiap tujuan lain, karena tujuannya adalah untuk menjadi pengguna nama / user id untuk file yang tidak boleh diakses oleh siapa pun.

Entri Wiki juga sangat salah.

Praktik UNIX / Linux adalah membuat akun baru untuk setiap "aplikasi" atau area aplikasi yang membutuhkan domain kontrol akses terpisah, dan untuk tidak pernah menggunakan kembali di nobodyluar NFS .

PeterG
sumber
Jawaban ini tidak mengutip sumber-sumber apapun, dan secara eksplisit bertentangan beberapa jawaban yang lain, yang melakukan mengutip sumber-sumber. Karunia saat ini menunjukkan jawaban ini sangat baik, dalam hal ini harus mengutip beberapa sumber, atau di daftar memiliki beberapa alasan.
vidarlo
@ mook765 Bagian itu baik-baik saja. Paragraf tentang NFS, saya tidak grok. Misalnya dengan root_squashon, rootdipetakan ke pengguna nobody, jadi file yang memiliki pemilik nobodytidak masuk akal. Selain itu pernyataan bahwa file yang dimiliki oleh siapa pun dimaksudkan tidak dapat diakses oleh siapa pun tidak masuk akal, karena izin file terpisah dari kepemilikan di UNIX. Saya tidak mengatakan bahwa segala sesuatu dalam jawaban itu salah, hanya saja unsur-unsurnya sedikit atau tidak masuk akal bagi saya :)
vidarlo
1
@vidarlo, jawaban ini tidak menyarankan Anda untuk mengatur file yang akan dimiliki nobody. Ia memberi tahu Anda bahwa nobodyNFS dapat digunakan saat memetakan izin, dan itulah poin terpenting bagi saya. Bagaimana NFS menggunakan nobodykurang menarik daripada kenyataan bahwa ia tidak menggunakan nobody. Terima kasih.
sarnold
@ katakan jawabannya masih jelas salah dalam hal ini menurut saya. Jika pengguna membaca jawabannya dan man exports, ia mungkin sangat bingung.
vidarlo
17

The nobodypengguna dibuat secara default pada instalasi baru (diperiksa pada Ubuntu Desktop 13.04).

Dalam banyak varian * nix, nobodyadalah nama konvensional akun pengguna yang tidak memiliki file, tidak dalam grup istimewa, dan tidak memiliki kemampuan kecuali yang dimiliki setiap pengguna lain ( nobodypengguna dan grup tidak memiliki entri dalam /etc/sudoersfile) .

Adalah umum untuk menjalankan daemon sebagai nobody, terutama server, untuk membatasi kerusakan yang dapat dilakukan oleh pengguna jahat yang menguasai mereka. Namun, kegunaan teknik ini berkurang jika lebih dari satu daemon dijalankan seperti ini, karena dengan mendapatkan kendali atas satu daemon akan memberikan kendali atas semuanya. Alasannya adalah bahwa nobodyproses yang dimiliki memiliki kemampuan untuk mengirim sinyal satu sama lain dan bahkan men-debug satu sama lain, memungkinkan mereka untuk membaca atau bahkan memodifikasi memori masing-masing.

Sumber : Wikipedia - Tidak ada seorang pun (nama pengguna)


Proses yang nobodydimiliki dapat saling mengirim sinyal satu sama lain dan bahkan saling melacak di Linux, yang berarti bahwa proses yang tidak dimiliki siapa pun dapat membaca dan menulis memori dari proses yang tidak dimiliki orang lain.

Ini adalah contoh entri nobodypengguna dalam /etc/passwdfile:

alaa@aa-lu:~$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

Seperti yang Anda perhatikan, nobodypengguna memiliki /bin/shshell login dan /nonexistentsebagai direktori home. Seperti namanya, /nonexistentdirektori tidak ada, secara default.

Jika Anda paranoid, Anda dapat mengatur nobodyshell default sebagai /usr/sbin/nologindan, sangkal login ssh untuk nobodypengguna.

Sumber : LinuxG.net - Linux dan Unix Nobody User

Alaa Ali
sumber
Jawaban ini akan layak diberi +1 jika paragraf yang salah dari Wikipedia dihapus. Terima kasih.
Sarnold
3

tidak ada yang merupakan akun pengguna dan grup khusus. Karena itu adalah nama pengguna sebenarnya (dan nama grup) dan dapat digunakan oleh proses dan bahkan pengguna, itu bukan siapa-siapa . Sebagai contoh, beberapa konfigurasi Apache tidak memiliki siapa pun sebagai pengguna / grup yang memiliki file dan direktori situs web. Masalahnya muncul ketika beberapa proses mungkin menggunakan pengguna yang tidak ada, seperti direktori NFS dan server web.

jeffmcneill
sumber
0

Koreksi kecil pada ' Tidak ada pengguna yang dicadangkan hanya untuk NFS. jawaban The nobodypengguna juga digunakan untuk wadah unprivileged dengan mengikat tunggangan saat ini.

Ini diambil dari systemd-nspawn, khususnya opsi --bind mount:

Perhatikan bahwa ketika opsi ini digunakan dalam kombinasi dengan --private-pengguna, poin mount yang dihasilkan akan dimiliki oleh siapa pun pengguna. Itu karena mount dan file serta direktorinya terus dimiliki oleh pengguna dan grup host yang relevan, yang tidak ada dalam wadah, dan dengan demikian muncul di bawah wildcard UID 65534 (tidak ada). Jika bind mounts dibuat, disarankan untuk membuatnya hanya-baca, menggunakan --bind-ro =.

systemd-nspawn

ykuksenko
sumber