Siapa "orang lain" dalam izin Linux, dan apa artinya "mengeksekusi"?

13

Saya tidak dapat menemukan jawaban pada tiga pertanyaan ini:

  • Siapa "orang lain", jika kita memberikan semua pengguna layanan di server kita, "orang lain" tidak ada, kan? Sebagai contoh, jika kita meletakkan Apache ke pengguna, dan kita menetapkan hak /var/wwwmiliknya apache, dan kita memasukkannya chmod 700harus bekerja, bukan?

  • Apa perbedaan antara "eksekusi" dan "baca"?

  • Apa izin file default untuk seluruh sistem setelah instalasi bersih (mis. Di Ubuntu)?

randomKek
sumber

Jawaban:

16

Siapa "orang lain", jika kita memberikan semua pengguna layanan di server kita, "orang lain" tidak ada, kan? Sebagai contoh, jika kita meletakkan Apache ke pengguna, dan kita menetapkan hak /var/wwwmiliknya apache, dan kita memasukkannya chmod 700harus bekerja, bukan?

Begini cara izin bekerja, dijelaskan dengan cara yang sangat singkat:

  • The digit pertama adalah bagi pemilik yang sebenarnya dari sebuah file (lihat siapa yang memiliki file dengan ls -ldan memodifikasinya dengan chown)

  • The digit kedua adalah untuk kelompok file (meskipun pemilik file tidak harus selalu berada dalam kelompok yang sama yang memiliki file)

  • The digit ketiga adalah orang lain, berarti tidak pemilik file dan setiap orang tidak dalam kelompok.

Jadi, jika Anda chmodmemiliki file hingga 700 dan dimiliki oleh apache, bahkan pengguna "normal" Anda tidak akan dapat membaca, menulis, atau menjalankannya. Ini sangat membatasi dan hanya diperlukan dalam kesempatan yang jarang - misalnya, ketika Anda ingin mengamankan kunci pribadi SSH Anda, itu mendapat 600izin. Untuk Apache, ini bahkan dapat mengakibatkan masalah lain, terlepas dari kenyataan bahwa dengan akun pengguna normal Anda, Anda tidak akan dapat mengedit file /var/wwwlagi.

Jadi, secara umum, Anda tidak perlu menghapus izin baca ( x00) untuk orang lain.

Anda dapat membiarkan apachememiliki /var/wwwdirektori, tetapi dengan 644(read-only untuk orang lain) mungkin. Pendekatan lain yang sering saya gunakan adalah menambahkan pengguna Anda sendiri dan pengguna Apache ke www-usersgrup baru , dan kemudian chmodding file /var/wwwke 775. Dengan cara ini, Anda dan Apache dapat menulis ke file. Lihat di sini untuk info lebih lanjut: Izin grup untuk apache


Apa perbedaan antara "eksekusi" dan "baca"?

File yang dapat dieksekusi dapat dijalankan langsung oleh pengguna - langsung dari shell. Untuk mendemonstrasikan ini, mari kita menulis file pendek dan menyebutnya "test". Tambahkan konten berikut:

echo "I am executable"

Simpan file. Sekarang, di shell Anda, coba masuk ./test. Anda akan mendapatkan kesalahan " -bash: ./test: Izin ditolak ". Ini karena secara default, file yang baru dibuat tidak membawa izin eksekusi. Jika Anda menambahkan izin eksekusi, itu akan berhasil.

$ chmod +x test
$ ./test
I am executable

Sekarang, ini hanyalah skrip pengujian, tetapi biasanya, semua file biner (seperti program yang dikompilasi) juga memerlukan set izin eksekusi, sehingga Anda dapat benar-benar menjalankan dan melakukan sesuatu dengannya, dan tidak hanya membaca.

Ini misalnya, program sistem yang kebanyakan ditemukan di /bin. Jalankan ls -l /binuntuk memeriksa izin mereka. Seperti yang Anda lihat, mereka dimiliki oleh root, dan Anda tidak dapat mengubahnya, tetapi Anda selalu dapat menjalankannya.

Jadi, ini juga merupakan fitur keamanan, karena Anda dapat membatasi eksekusi skrip dan binari tertentu untuk beberapa pengguna.

Untuk mempelajari lebih lanjut tentang izin Unix, baca artikel Wikipedia . Izin dasar yang Anda kenal sebagai "baca-tulis-jalankan" telah ada sejak lama, tetapi hanya bagian dari apa yang Anda sebut Daftar Kontrol Akses - yang menawarkan fungsionalitas jauh lebih dari ini.


Apa izin file default untuk seluruh sistem setelah instalasi bersih (mis. Di Ubuntu)?

Mereka bervariasi berdasarkan direktori dan pemilik. Beberapa file dan direktori dilindungi oleh sistem dan dimiliki oleh root. Namun, dalam kebanyakan kasus, Anda dapat membacanya dengan akun pengguna normal Anda.

Direktori lain seperti folder rumah Anda jelas milik pengguna Anda. Masuk akal untuk menolak izin baca untuk pengguna lain di mesin jika itu dibagikan di antara banyak orang - lagipula, Anda tidak ingin barang pribadi Anda terbuka.

Akhirnya, beberapa file dapat dieksekusi secara default (misalnya dalam /bin), tetapi yang lain tidak (misalnya file konfigurasi dalam /etc).

The Filesystem Hierarchy Standard menentukan penggunaan ditujukan untuk direktori ditemukan dalam sistem Linux. Anda hampir dapat "menebak" izin apa yang harus didasarkan pada apa yang ingin Anda lakukan dengan direktori.

slhck
sumber
Terima kasih Anda benar-benar sangat membantu saya! Saya tidak bisa cukup berterima kasih, satu pertanyaan lagi, di mana garis antara "file" dan "executable" misalnya apakah file PHP dieksekusi atau dibaca oleh Apache? Sekali lagi terima kasih banyak!
randomKek
.phpfile biasanya tidak dapat dieksekusi. Mereka, secara sederhana, hanya dibaca oleh Apache ketika Anda mengarahkan browser Anda ke misalnya http://example.com/file.phpSebelum Apache dapat menunjukkan output, mereka harus ditafsirkan oleh instalasi PHP Anda, tetapi Apache yang mengurusnya. Secara teoritis Anda dapat membuat file PHP dapat dieksekusi dan menjalankannya seperti skrip - dalam nada yang sama seperti yang kami lakukan dengan testfile kami , tetapi ini jarang digunakan.
slhck
5

Hanya ingin menambahkan bahwa izin eksekusi memiliki makna efektif yang berbeda untuk direktori:

Untuk file :

  • Baca: Jika konten file dapat dibaca
  • Tulis: Jika pengguna atau proses dapat menulis ke file (ubah kontennya)
  • Jalankan: Jika file dapat dieksekusi

Untuk folder :

  • Baca: Jika daftar direktori dapat diperoleh
  • Tulis: Jika pengguna atau proses dapat mengubah konten direktori: buat file baru atau hapus file yang ada di direktori atau ganti nama file.
  • Jalankan: Jika pengguna atau proses dapat mengakses direktori, yaitu, buka direktori tersebut (jadikan direktori aktif saat ini)

Tidak, tidak ada izin hapus yang terpisah untuk direktori.

(Dapatkan informasi ini di sini .)

LawrenceC
sumber
0

Saya bukan ahli Linux, tetapi saya mencoba menjawab.

Setiap entri sistem file memiliki pengguna dan grup terkait. Izin pengguna ditangani oleh bendera "pengguna". Izin pengguna dari pengguna yang merupakan bagian dari grup yang sama ditangani oleh bendera "grup". Semua pengguna lain ditangani oleh bendera "orang lain".

"Membaca" berarti apa yang tertulis. "mengeksekusi" berarti Anda dapat meluncurkan file (mis. perintah) atau Anda dapat mendaftar direktori.

Mengenai izin default, saya tidak yakin. Saya kira, itu bisa dikonfigurasi entah bagaimana dan karenanya mungkin berbeda untuk setiap pengguna.

Mike L.
sumber
0

Untuk memberi Anda jawaban yang layak untuk pertanyaan 2, setidaknya, berikut adalah tabel ringkasan yang menunjukkan apa yang dapat / tidak dapat Anda lakukan:

+--------------------------------------------------+
| Execute Yes (./file.sh) | Read Yes (vim file.sh) |
|--------------------------------------------------|
| Execute Yes (./file.sh) | Read No (ERROR)        |
|--------------------------------------------------|
| Execute No (ERROR)      | Read Yes (vim file.sh) |
|--------------------------------------------------|
| Execute No (ERROR)      | Read No (ERROR)        |
+--------------------------------------------------+

Yang penting untuk diingat, adalah bahwa itu bukan PENGGUNA membaca file file ke dalam memori untuk menjalankannya, itu adalah KERNEL melakukannya atas nama PENGGUNA.

baru123456
sumber
0

Mungkin rumit jika Anda ingin mengecualikan semua yang lain. Lihatlah daftar ini dari file / etc / passwd saya (izin dan yang lainnya dihapus untuk kejelasan):

root daemon bin sys sync game man lp mail berita uucp proxy www-data backup list irc gnats libuuid syslog messagebus usbmux haldaemon siapa pun

a {ini saya, dan di bawah ini ada beberapa hal yang saya instal, di atas semuanya datang dengan sistem}

avahi mysql pulse rtkit saned timidity didiwiki

Jadi misalnya, hapus izin dari lp atau uucp dan Anda akan merusak pencetakan. menghapus izin dari bin, sys, atau daemon dan mungkin banyak hal akan rusak. irc, game, mail, berita, dan cadangan mungkin bisa dihapus dengan aman (kecuali jika Anda menggunakannya melalui sistem, bukan browser). sisanya saya serahkan kepada keterampilan mesin pencari Anda.

Ini adalah ubuntu / bodhi linux, dan sistem lain mungkin memiliki lebih sedikit tambahan. namun semua ini untuk mencegah keharusan menjalankan semuanya sebagai root. Saya membayangkan itu mungkin untuk membuat sistem di mana setiap file dapat dibaca / ditulis / dieksekusi oleh hanya salah satu pengguna sistem (bar root) tetapi saya tidak yakin itu sudah dicoba.

Execute adalah izin untuk menjalankan kode. Baca adalah izin untuk melihat (dan menyalin?) Saja.

conspiritech
sumber