Bagaimana mencegah pengguna baru melakukan sesuatu yang berbahaya?


31

Saya baru-baru ini menginstal server Ubuntu di server saya untuk mencoba linux sebagai pengguna baru. Saya mengikuti tutorial tentang cara mengatur server web yang mengatakan saya perlu chmod 777dir server web sehingga dapat ditulis ke dalam.

Ngomong-ngomong, saya membuat akun baru untuk satu pria untuk memungkinkannya melihat beberapa file di server yang saya tempatkan di dir rumahnya:

adduser francis

Setelah membuat akun, saya memeriksa akses apa yang dia miliki

groups francis

Bunyinya "francis: francis", jadi bukan masalah saya pikir, ubuntu belum memasukkannya ke dalam grup apa pun secara default, yang masuk akal, itu membuatnya tanpa izin tambahan dari segi keamanan, sehingga semuanya baik-baik saja dan keren. Seminggu kemudian, dalam kengerian absolut dan penuh, saya mengetahui bahwa meskipun ia tidak dapat melakukan hal-hal seperti SUDO atau mengacaukan dalam direktori sistem, ia memiliki akses penuh ke hampir semua hal lain di server. Misalnya dia memiliki akses baca / tulis penuh ke file server web saya di / var / www (dan dengan demikian kata sandi disimpan dalam file konfigurasi php dll) meskipun direktori tersebut TIDAK ada di direktori rumahnya dan saya tidak pernah menambahkannya ke dalam grup mana pun yang bisa akses direktori itu, atau saya memberinya akses khusus untuk apa pun setelah melakukan adduser.

Lagi pula, apa yang terjadi di sini? Bagaimana cara saya membunuh aksesnya ke sesuatu yang penting? Dia seharusnya tidak dapat mengakses hal-hal seperti / media atau / var / www. Saya pikir pengguna baru secara default dicegah melakukan sesuatu yang berbahaya atau mengintip di tempat yang seharusnya tidak mereka lakukan.

Jadi kesimpulannya, saya hanya perlu memberinya akses ke direktori yang saya tentukan secara manual + ke direktori yang dia perlukan agar berfungsi dengan baik (dir rumahnya, vim, nano dll.)

Terima kasih


30
Anda sedang melakukan chmod 777 dan bertanya mengapa semua orang bisa membaca tulis di sana? baca halaman manual untuk chmod
Anwar

16
Ya, 777 adalah masalah Anda, karena berbagai alasan.
Android Dev

21
@Askerman - Tidak, ketika Anda memberi 777, semua orang dapat mengakses semuanya , tolong beri ini bacaan: linux.com/learn/understanding-linux-file-permissions
Android Dev

11
Kita semua membuat kesalahan, terutama ketika kita belajar di lingkungan yang sama sekali baru. Ini adalah hal yang baik untuk dipelajari, sudah pasti bijak untuk mencurahkan pengertian Anda tentang cara kerja di Windows saat menggunakan OS berbasis Linux. Setelah mengembalikan izin Anda, Anda harus memperhatikan bahwa pengguna tidak dapat mengubah apa pun yang seharusnya tidak dapat mereka ubah. Jika Anda menggunakan chmodtempat lain, Anda mungkin memiliki masalah lain.
Arronical

8
FYI - Saya menjawab pertanyaan ini karena ini adalah pertanyaan yang bagus untuk dicari orang baru. Dan kesalahpahaman ini mungkin lebih umum dari yang kita pikirkan. Ini juga merupakan contoh bagus mengapa Anda tidak harus hanya menyalin perintah yang Anda temukan di internet (bahkan di sini) tanpa mengetahui apa yang mereka lakukan.
Aaron

Jawaban:


40

Ini seperti yang dirancang. Dan lebih buruk. chmod 777 berarti ... "Saya ingin pemilik, siapa pun di grupnya, dan siapa saja yang pernah membaca, menulis, dan mengeksekusi izin"

Itu sangat mengerikan.

Dan untuk server web, 777 tidak optimal. 755 (Pemilik memiliki grup izin penuh dan orang lain telah membaca + mengeksekusi) adalah standar umum tetapi dari apa yang Anda katakan Anda ingin setidaknya baca-tulis, atau eksekusi baca-tulis untuk pemilik (pengguna server web), dan mungkin grup, dan tidak ada izin untuk pengguna. Ada pertanyaan yang lebih lengkap tentang tingkat izin yang sesuai pada serverfault tetapi pertimbangkan sesuatu seperti 640 atau 740.

yang mengatakan, Anda juga bisa menempatkan pengguna di dunianya sendiri - mengatur chroot untuk menjaga pengguna di ruangnya sendiri dalam sistem. Ada panduan yang beredar untuk melakukan ini - misalnya jawaban oli yang sangat baik di sini yang mungkin menjadi pilihan tergantung pada kebutuhan Anda.


4
Poin minor: "pemilik, siapa pun dalam grupnya ..." - pemilik file tidak harus termasuk dalam grup file.
alex_d

2
Bagus. Saya suka bahwa Anda merujuk pada jawaban kanonik tentang servfault.
Penatua Geek

3
Jargon bersejarah untuk situasi ini adalah " dunia dapat dibaca / ditulis".
Kaz

19

Pada dasarnya, itu rusak seperti ini:

R = 4 (read)
W = 2 (write)
X = 1 (execute)

Jadi, izin baca hanya akan menjadi 4, baca dan tulis akan menjadi 6, baca dan eksekusi akan menjadi 5, dan semua (baca, tulis, eksekusi) adalah 7. Ini adalah bagaimana Anda menghitung nilai oktet izin untuk pemilik, grup pemilik , atau semua orang.

Saat menerapkan izin tersebut chmodke lokasi file atau direktori, angka yang dihitung di atas diterapkan seperti ini, dengan masing-masing oktet untuk pemilik, grup, dan semua orang:

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

Jadi jika saya ingin memberi diri saya dan grup saya baca, tulis, dan jalankan izin ke folder yang saya miliki, tetapi saya tidak ingin semua orang bisa membacanya, saya akan menggunakan:

$ chmod 770 myDirectory

Untuk informasi lebih lanjut, periksa halaman manual untuk chmod :

$ man chmod

Jika Anda tidak dapat mengingat bit untuk ditambahkan bersama untuk membuat izin yang tepat dalam urutan yang benar, Anda juga dapat menggunakan yang lebih mudah dibaca chmod ugo+rwx <...>. Karakternya adalah untuk Anda , g roup, atau lainnya ; r benar menyebalkan, w ritus, e x ecute. Anda dapat menggunakan '-' untuk menghapus (misalnya:) chmod go-wx <...>. Perhatikan bahwa ini hanya menambah atau menghapus apa yang Anda ketik. chmod ugo+rwx <file>; chmod u+rwx <file> tidak menghapus akses untuk grup / lainnya.
ReactiveRaven

@ReactiveRaven Itu poin bagus. Tetapi OP jelas bingung tentang apa yang chmod 777terjadi, jadi di situlah saya mengarahkan penjelasan saya.
Aaron

@Zanna Panggilan bagus!
Aaron

6

Seperti yang telah disebutkan orang lain, Anda seharusnya tidak memiliki izin untuk 777

Berikut lembar referensi bermanfaat yang saya gunakan.

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+

1
Bagus! Ini adalah bantuan besar bagi orang-orang (seperti saya) yang merupakan pembelajar visual.
Aaron

3

Untuk berbagi file dengan orang yang Anda beri info masuk, Anda tidak perlu melakukan apa pun secara khusus. Pada instalasi Debian default, pengguna memiliki akses ke direktori home masing-masing.

Contohnya,

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

Izin pada direktori rumah saya dibaca (r) dan akses (x) untuk setiap pengguna di sistem saya. Hanya Aku juga harus menulis (w) akses.

Selain itu, default umaskpada Ubuntu adalah sedemikian rupa sehingga file dan direktori yang dibuat pengguna dapat dibaca dunia secara default . Anda dapat mengatur umaskuntuk 077jika Anda tidak menginginkannya.

Apa artinya ini dalam pengaturan default, jika pengguna youingin berbagi dokumen ~/README.txtdengan saya, maka tidak ada yang youperlu dilakukan. Saya cukup melihatnya:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

Saya tidak dapat mengedit atau menghapus file, tetapi saya dapat menyalinnya ke lokasi di mana saya memiliki izin menulis. Kemudian saya memiliki salinannya:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

Ada alasan bagus mengapa sebagian besar sistem dapat dibaca dunia secara default, seperti yang telah saya jelaskan dalam jawaban lain tentang AskUbuntu . Namun, pada sistem bersama mungkin masuk akal untuk membuat direktori home tidak dapat diakses oleh non-pemilik:

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

... karena banyak pengguna tampaknya tidak mengetahui default - QED ;-). Akan lebih bijak untuk membuat pengguna sadar bahwa izin file tidak melindungi rahasia.


1

Di Ubuntu, setiap pengguna memiliki hak pengguna super yang ditambahkan dalam grup 'sudo', Silakan periksa untuk memastikan bahwa tidak ada pengguna lain yang ditambahkan dalam grup ini.

Untuk mengamankan file dan direktori Anda dari pengguna lain, Anda dapat mengatur izin seperti yang disarankan oleh Mr. Journeyman Geek dalam jawaban di atas.

Anda juga dapat menggunakan izin khusus untuk mengamankan file dan direktori Anda dari orang lain.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.