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/www
miliknya apache
, dan kita memasukkannya chmod 700
harus 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 -l
dan 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 chmod
memiliki 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 600
izin. Untuk Apache, ini bahkan dapat mengakibatkan masalah lain, terlepas dari kenyataan bahwa dengan akun pengguna normal Anda, Anda tidak akan dapat mengedit file /var/www
lagi.
Jadi, secara umum, Anda tidak perlu menghapus izin baca ( x00
) untuk orang lain.
Anda dapat membiarkan apache
memiliki /var/www
direktori, 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-users
grup baru , dan kemudian chmodding file /var/www
ke 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 /bin
untuk 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.
.php
file biasanya tidak dapat dieksekusi. Mereka, secara sederhana, hanya dibaca oleh Apache ketika Anda mengarahkan browser Anda ke misalnyahttp://example.com/file.php
Sebelum 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 dengantest
file kami , tetapi ini jarang digunakan.Hanya ingin menambahkan bahwa izin eksekusi memiliki makna efektif yang berbeda untuk direktori:
Untuk file :
Untuk folder :
Tidak, tidak ada izin hapus yang terpisah untuk direktori.
(Dapatkan informasi ini di sini .)
sumber
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.
sumber
Untuk memberi Anda jawaban yang layak untuk pertanyaan 2, setidaknya, berikut adalah tabel ringkasan yang menunjukkan apa yang dapat / tidak dapat Anda lakukan:
Yang penting untuk diingat, adalah bahwa itu bukan PENGGUNA membaca file file ke dalam memori untuk menjalankannya, itu adalah KERNEL melakukannya atas nama PENGGUNA.
sumber
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.
sumber