Auto-generate Flow Chart from Java/C++ Codes:

Raptor Flowchart Tutorial For Beginners

Showing posts with label server. Show all posts
Showing posts with label server. Show all posts

Monday, November 05, 2018

Lindungi Keselamatan Laman Web Menggunakan Java Spring Boot

Boot Spring sebenarnya sangat mudah ...


.
Dalam tulisan ini, saya akan menerangkan bagaimana Spring menguruskan keselamatan. Saya tidak akan meliputi segala-galanya, sudah tentu - isu keselamatan akan menjadi buku besar, tetapi kami sekurang-kurangnya akan melihat bagaimana untuk mendapatkan laman web.
Seperti biasa, saya ingin bermula dengan mengatakan bahawa kod sumber boleh didapati di halaman GitHub saya. Program ini dibuat di Java menggunakan Spring Boot.
Nah, mari kita mulakan dengan melihat cara untuk mendapatkan laman web di Spring.
Boot Spring sebenarnya sangat mudah kerana kami akan menggunakan apa yang permulaan permulaan Spring, yang tidak lain hanyalah kumpulan pakej yang dikelompokkan oleh fungsi yang mereka tawarkan. Jadi dalam kes ini, pakej itu akan termasuk Web, Thymeleaf, dan, tentu saja, Keselamatan.
Berikut adalah sekilas Eclipse untuk memilih pakej yang diperlukan.
Tajuk imej
Sebilangan besar daripada anda sudah tahu, dependensi fail pom.xml membolehkan anda melihat lebih terperinci.
Thymeleaf adalah perisian yang mengintegrasikan dengan lancar dengan Spring dan mencipta templat laman web. Ini serupa dengan JSP, tetapi Thymeleaf adalah versi yang lebih baik. Atau, jika anda lebih suka JavaServer Faces, ia akan kelihatan seperti JavaEE. Kesnya adalah bahawa ia membolehkan halaman HTML untuk mengintegrasikan dengan lancar dengan kelas kami yang dibangunkan di Spring.
Oleh kerana kami ingin melihat di laman web kami, nama pengguna yang kami rakamkan membolehkan kami menggunakan keselamatan perpustakaan Thymeleaf untuk Spring. Untuk melakukan ini, kami akan memasukkan baris berikut dalam fail pom.xml kami.
 org.thymeleaf.extras   thymeleaf-extras-springsecurity4   3.0.3.RELEASE   

Dan di sini, anda dapat melihat bagaimana ia akan menyusun program kami
Tajuk imej
Kini, kami mula mengisytiharkan kelas pertama kami, yang telah dipanggil WebSecurityConfiguration.java:
 @SpringBootApplication @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { public static void main (String [] args) { SpringApplication.run (WebSecurityConfiguration.class, args); } @Bean @Override public AuthenticationManager authenticationManagerBean () throws Exception { super.authenticationManagerBean return (); } @Bean @Override public UserDetailsService userDetailsService () { UserDetails user = User.builder (). Username ( "user"). Password (passwordEncoder (). Encode ( "secret")). roles ( "USER") build ().; UserDetails UserAdmin = User.builder (). Username ( "admin"). Password (passwordEncoder (). Encode ( "secret")). roles ( "ADMIN") build ().; return new InMemoryUserDetailsManager (user, UserAdmin); } @Bean public PasswordEncoder passwordEncoder () { return new BCryptPasswordEncoder (); } @Override protected void set (http HttpSecurity) throws Exception { http .csrf (). disable () .authorizeRequests () .antMatchers ( "/" "/ index", "/ webpublico"). permitAll () .antMatchers ( "/ webprivado"). authenticated () .antMatchers ( "/ webadmin"). hasRole ( "ADMIN"). and () .formLogin () .loginPage ( "/ login") .permitAll () .and () .logout () // get method for I desabilitado CSRF .permitAll (); } } 

Yang pertama ialah menggunakan label @SpringBootApplication  dan @EnableWebSecurity . Teg pertama adalah jelas - sejak permohonan kami, kami mahu bekerja dengan Spring Boot.Yang kedua adalah untuk menentukan bahawa keselamatan web diaktifkan; jujur, label ini tidak diperlukan. Boot Spring sangat pandai, seperti yang kita lihat keselamatan pakej (dalam pom.xml, ingat) dalam projek kami. Ia termasuk mesej ini sekali lagi, yang tidak semestinya sesuatu yang buruk, kerana ia memberikan penjelasan lebih lanjut tetapi, walaupun, berlebihan.
Sekarang, kami menyatakan bahawa kelas kami akan mewarisi dari WebSecurityConfigurerAdapter kerana kita akan menimpa beberapa fungsi kelas itu. Jadi, anda perlu memahami Spring dan melihat apakah terdapat kelas yang mengimplementasikan antara muka WebSecurityConfigurer , yang mengimplementasikan WebSecurityConfigurerAdapterkelas, dan jika ya, ia menggunakan fungsi antara muka itu untuk mengkonfigurasi aplikasi keselamatan.
Sekiranya kita mempunyai kelas yang menggunakan antara muka ini, Spring tidak akan dapat mengakses mana-mana halaman permohonan kami, yang mungkin difahami oleh anda, tidak praktikal.
Kini, kita perlu menulis fungsi authenticationManagerBean  untuk memulangkan kelas yang bertanggungjawab untuk mengurus pengesahan (seperti namanya). Baiklah, anda mungkin tertanya-tanya: tetapi bagaimana pula jika anda hanya memanggil fungsi untuk menentukan? Ini sebenarnya sangat mudah kerana kita menggunakan @Bean   label untuk Spring. Adalah penting untuk mengetahui di mana untuk mendapatkan (menyuntikkan) jenis objek AuthenticationManager   kerana anda perlu mengawal keselamatan.
Dalam fungsi userDetailsService , kami menentukan pengguna yang akan mempunyai akses ke laman web kami. Dalam kes ini, kami mencipta dua pengguna: pengguna dan admin (ya, saya tahu bahawa saya tidak cuba terlalu keras memilih nama itu), masing-masing mempunyai kata laluan dan peranannya sendiri. Jelaskan bahawa ROLE adalah harfiah percuma, yang bermaksud bahawa ini boleh menjadi apa sahaja yang anda mahukan. Contohnya, USER_WITH_EYES - hakikatnya, maka kita akan menggunakan peranan itu, ia harus sepadan dengan surat dengan huruf dengan set.
Juga, ambil perhatian bahawa kata laluan disulitkan, dalam kes ini, dengan Bcrypt algoritma. Kami melakukan ini dengan memanggil passwordEncoder @Bean , yang dijelaskan dengan Spring @Bean   label.
Maksudnya, Spring perlu mengetahui sistem penyulitan yang kita gunakan untuk menyimpan kata laluan, dan ia mencari objek yang menggunakan PasswordEncoder antara muka. Jika kita gagal, kita tidak dapat mencari permohonan itu.
Saya ingin menjelaskan bahawa kami menggunakan cara paling mudah untuk mengisytiharkan pengguna dan menyimpannya, dalam ingatan, dengan kelas InMemoryUserDetailsManager . Dalam program sebenar, ia akan menggunakan JdbcUserDetailsManager , yang membolehkan kami menyimpannya dalam pangkalan data. Atau, ini boleh termasuk mana-mana kelas lain yang melaksanakan antara muka UserDetailsManager , kerana ia boleh menjadi LdapUserDetailsManager   jika kita menggunakan perkhidmatan LDAP.
Dan kerana kita perlu menentukan bahagian mana aplikasi kita akan dilindungi, peranan mesti mempunyai kebenaran untuk mengakses setiap bahagiannya. Ya, saya telah menulis peranan dan bukan pengguna, kerana seperti yang telah kami katakan sebelum ini, apabila anda menentukan pengguna, anda mesti menetapkan peranan. Dan biasanya, peraturan penapisan digunakan oleh kumpulan yang dimiliki pengguna.Untuk menetapkan keizinan untuk setiap sumber, kami akan mengkonfigurasi objek HttpSecurity yang diterima dalam konfigurasi batal fungsi yang dilindungi (HttpSecurity http).
Saya akan menjelaskan garis demi baris apa yang dilakukan dalam fungsi ini:
  • csrf (). disable () 
Pertama, kita melihat CSRF mengawal kawalan. CRSF bermaksud pemalsuan permintaan Cross Site , seperti yang dijelaskan oleh Wikipedia:
Pemalsuan permintaan silang tapak , yang juga dikenali sebagai serangan satu klik atau menunggang sesi dan disingkat CSRF (kadang-kadang disebut surfing laut ) atau XSRF , adalah sejenis eksploit yang berniat jahat di laman web di mana arahan yang tidak dibenarkan dihantar daripada pengguna web amanah permohonan. Terdapat banyak cara di mana tapak web berniat jahat boleh menghantar arahan tersebut; Contohnya, tag imej khusus, bentuk tersembunyi, dan JavaScript XMLHttpRequests, misalnya, semuanya boleh berfungsi tanpa interaksi pengguna atau pengetahuan. Tidak seperti skrip silang tapak (XSS), yang mengeksploitasi kepercayaan pengguna untuk laman web tertentu, CSRF mengeksploitasi kepercayaan bahawa tapak mempunyai dalam pelayar pengguna.
Melumpuhkan CRSF mempunyai kesan sampingan yang boleh melakukan log keluar sesi dengan permintaan HTTP GET jenis, maka lalai hanya dapat dilakukan dengan permintaan POST:
  • .authorizeRequests () .antMatchers ( "/" "/ index", "/ webpublico"). permitAll ()
Kami menyatakan bahawa petisyen di laluan ini dengan mana-mana rentetan "/", "/ index", "/ webpublico" tidak akan mempunyai keselamatan. Itu dibenarkan untuk semua orang.
  • antMatchers ( "/webprivado"). authenticated ()   
Kami menyatakan bahawa permintaan ke laluan "/ webprivado" boleh   hanya diproses jika pengguna disahkan, tanpa menentukan peranan apa yang perlu dimiliki.
  • .antMatchers ( "/webadmin"). hasRole ( "ADMIN")   
Hanya pengguna yang menjadi sebahagian daripada ADMINkumpulan akan mempunyai akses ke URL "/ webadmin."
Fungsi antMatchers   membolehkan penggunaan ungkapan biasa, jadi jika, misalnya, kami ingin memohon peraturan kepada semua yang bergantung pada laluan, kami boleh meletakkan ini:
http.antMatchers ("/ users / **"). hasRole ("USER") untuk menentukan bahawa sebarang permintaan kepada URL / pengguna / XXX hanya mempunyai akses kepada pengguna milik kumpulan USER.
  • .formLogin(). loginPage( "/login"). permitAll()   
Kami menyatakan bahawa halaman masuk akan " / login " dan dibenarkan untuk sampai kepada semua orang.
  • logout(). permitAll()   
Kami menyatakan halaman logout harus dibenarkan untuk mencapai semua orang. Secara lalai, halaman ini jawapan dalam URL " / logout ."
Sempurna. Kami telah menentukan keselamatan laman web kami. Kini, kami hanya menetapkan titik masuk ke halaman.Ini dilakukan di kelas WebController.java .
 @Controller public class WebController { @RequestMapping ({ "/", "index"}) public String start () { return "index"; } @RequestMapping ( "/webprivado") public private String () { "Private" return; } @RequestMapping ( "/webpublico") public String loginpub () { "Public" return; } @RequestMapping ( "/webadmin") public String admin () { return "admin"; } @RequestMapping ( "/login") public String login () { return "login"; } } 

Seperti yang dilihat di atas, kelas mempunyai banyak misteri.W hanya tentukan label @Controller untuk menjadi kelas di mana kita boleh menentukan titik kemasukan untuk permintaan web.
Kami mempunyai fungsi yang berlainan dalam label @RequestMapping   untuk menentukan URL dan diproses oleh setiap fungsi. Oleh itu, permulaan fungsi akan dipanggil apabila permintaan kepada URL, " / " atau " / indeks ."Perhatikan bahawa kita perlu dimasukkan ke dalam bar awal.
Rentetan yang dikembalikan akan menjadi template yang Thymeleaf dikembalikan supaya fungsi mula panggilan akan mengembalikan templat "index.html", seperti ditunjukkan di bawah:
 <! DOCTYPE html>    Home Page </ title> </ Head> <body> <h1>
 Home Page </ h1> <p>
 <a th:href="@{/webpublico}"> Click here to view a page </a> public. </ P> <p>
 If you are a regular user clicks </a> <a th:href="@{/webprivado}"> here to view a private page </ p> <p>
 If you are a regular administrator </a> click <a th:href="@{/webadmin}"> here to see the profile Administrator </ p> <div sec: Authorize = "isAuthenticated ()">
 Hello <span sec: authentication = "name"> someone </ span> <p>
 <a th:href="@{/logout}"> Disconnect </a> </ p> </ Div> </ Body> </ Html></code> </pre>
<p pid="40" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<br style="box-sizing: border-box;"></p>
<p pid="41" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Bagaimanakah ia kelihatan seperti HTML tulen?</span> <span class="notranslate" style="box-sizing: border-box;">Ini adalah salah satu kelebihan menggunakan tag HTML standard Thymeleaf.</span> <span class="notranslate" style="box-sizing: border-box;">Saya tidak akan menjelaskan bahasa di sini, tetapi saya akan menerangkan beberapa label yang digunakan:</span></p>
<p pid="42" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;"><strong style="box-sizing: border-box;"><a th: href="@{/webpublico}"></strong> - Buat pautan ke URL " <strong style="box-sizing: border-box;">/</strong>webpublico."</span> <span class="notranslate" style="box-sizing: border-box;">Ia seperti menggunakan "tag <strong style="box-sizing: border-box;"><a href="/webpublico"></strong> .</span></p>
<p pid="43" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;"><strong style="box-sizing: border-box;"><div sec: Authorize = "isAuthenticated ()">
</strong> -</span> <strong style="box-sizing: border-box;"> </strong> <span class="notranslate" style="box-sizing: border-box;">Ini adalah satu-satunya kod yang akan diberikan di DIV jika pengguna disahkan.</span> <span class="notranslate" style="box-sizing: border-box;">Dengan kata lain, jika pengguna tidak log masuk, ia tidak dipaparkan di laman web yang antara tag DIV (sebenarnya, ia tidak akan dipaparkan pada halaman web atau DIV).</span></p>
<p pid="44" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;"><strong style="box-sizing: border-box;"><span sec: authentication = "name"> someone </ span></strong> - Jika pengguna log masuk dengan nama pengguna mereka, ia akan menunjukkan apa yang anda ada di antara tag <strong style="box-sizing: border-box;">span.</strong></span><span class="notranslate" style="box-sizing: border-box;">Dalam kes ini, ia menunjukkan seseorang.</span></p>
<p pid="45" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Dan dengan ini, kami mempunyai aplikasi yang selamat!</span> <span class="notranslate" style="box-sizing: border-box;">Ya, kami mengamankan halaman web dengan hanya dua kelas Java dan fail HTML yang sesuai.</span></p>
<p pid="46" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Untuk menyelesaikan siaran ini, saya meninggalkan beberapa tangkapan skrin aplikasi:</span></p>
<p pid="47" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<img alt="Tajuk imej" class="fr-fin fr-dib" src="https://dzone.com/storage/temp/10534853-captura-12.png" width="655" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; text-align: center; margin: auto; display: block; float: none !important;"></p>
<figure id="attachment_393" style="box-sizing: border-box; margin: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);"><figcaption style="box-sizing: border-box; clear: both; font-size: 16px; margin: 0px 0px 30px 10px; line-height: 1.2; color: rgb(115, 121, 129);"><span class="notranslate" style="box-sizing: border-box;">Ini adalah halaman rumah tanpa mendaftar.</span></figcaption></figure><figure id="attachment_393" style="box-sizing: border-box; margin: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);"><figcaption style="box-sizing: border-box; clear: both; font-size: 16px; margin: 0px 0px 30px 10px; line-height: 1.2; color: rgb(115, 121, 129);"><p style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px;">
<img alt="Tajuk imej" class="fr-fin fr-dib" src="https://dzone.com/storage/temp/10534857-captura1-1.png" width="654" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; text-align: center; margin: auto; display: block; float: none !important;"><span class="notranslate" style="box-sizing: border-box;">Ini adalah halaman awam.</span></p>
<p style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px;">
<img alt="Tajuk imej" class="fr-fin fr-dib" src="https://dzone.com/storage/temp/10534866-captura5.png" width="685" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; text-align: center; margin: auto; display: block; float: none !important;"></p>
</figcaption></figure><p pid="48" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Ini kelihatan di laman utama sebaik sahaja ia mengenal pasti 'pengguna'.</span></p>
<p pid="49" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<img alt="Tajuk imej" class="fr-image-dropped fr-fin fr-dib" src="https://dzone.com/storage/temp/10534867-captura2.png" width="600" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; text-align: center; margin: auto; display: block; float: none !important;"></p>
<p pid="50" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Sekarang, kami mengenal pasti pengguna "pengguna:"</span></p>
<p pid="51" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<img alt="Tajuk imej" class="fr-fin fr-dib" src="https://dzone.com/storage/temp/10534869-captura4.png" width="704" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; text-align: center; margin: auto; display: block; float: none !important;"></p>
<figure id="attachment_397" style="box-sizing: border-box; margin: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);"><figcaption style="box-sizing: border-box; clear: both; font-size: 16px; margin: 0px 0px 30px 10px; line-height: 1.2; color: rgb(115, 121, 129);"><span class="notranslate" style="box-sizing: border-box;">Sekarang, kita dapat melihat ralat mengakses laman web;</span> <span class="notranslate" style="box-sizing: border-box;">" <b style="box-sizing: border-box;">/ admin</b> " didaftarkan dengan pengguna pengguna 'dan tidak mempunyai keizinan untuk laman web itu.</span></figcaption></figure><p pid="52" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<br style="box-sizing: border-box;"></p>
<p pid="53" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Harap ini membantu!</span> <span class="notranslate" style="box-sizing: border-box;">Selamat coding.</span></p>
<p>
.</p>
<p>
<br></p>
<p>
.</p>

Diterjemah dari sumber: https://dzone.com/articles/securing-a-web-with-spring-boot

Maksud Docker Dan Kubernetes


.

Maksud Docker Dan Kubernetes Dari Perspektif Senibina

Memahami kedua-dua Docker dan Kubernetes adalah penting jika kita mahu membina dan menjalankan infrastruktur awan moden. Lebih penting lagi untuk memahami bagaimana penyelesaian arkitek dan pemaju boleh menggunakannya semasa mereka bentuk penyelesaian berasaskan awan yang berbeza. Kedua-dua VM dan Kontena ini bertujuan untuk meningkatkan penggunaan pelayan dan mengurangkan pemisahan pelayan fizikal dan jumlah kos pemilikan untuk jabatan IT. Walau bagaimanapun, jika kita dapat melihat pertumbuhan dari segi penggunaan dalam beberapa tahun kebelakangan ini, terdapat pertumbuhan eksponen dalam penggunaan awan berasaskan kontena.

Asas-asas Konsep VM dan Docker

Mesin maya menyediakan keupayaan untuk mencontohi OS berasingan (tetamu), dan dengan itu komputer yang berasingan, dari dalam OS anda yang sedia ada (tuan rumah).Mesin Maya terdiri daripada ruang pengguna ditambah ruang kernel bagi sistem operasi. VM berjalan di atas mesin fizikal menggunakan "hypervisor," juga dikenali sebagai pengurus mesin maya, yang merupakan program yang membolehkan sistem operasi berbilang untuk berkongsi hos perkakasan tunggal.
Terdapat dua mod operasi dalam CPU, mod pengguna dan mod kernel. Apabila kita memulakan aplikasi mod pengguna, OS mewujudkan satu proses dengan ruang alamat maya peribadi untuk dimainkan. Kami mungkin mempunyai banyak proses pengguna ruang yang berjalan tetapi mereka boleh dibuat untuk dijalankan secara berasingan supaya jika satu proses runtuh maka proses lain tidak terluka. Walau bagaimanapun, proses pengguna mungkin memerlukan perkhidmatan khas dari OS (misalnya, I / O, penciptaan proses kanak-kanak, dan sebagainya) yang boleh dicapai dengan melaksanakan panggilan sistem yang memindahkan proses ke mod kernel secara sementara dengan kaedah yang dikenali sebagai perangkap. Arahan yang hanya boleh dilaksanakan dalam mod kernel (misalnya, panggilan sistem) dipanggil arahan yang sensitif. Terdapat juga satu set arahan yang boleh dijebak jika dilaksanakan dalam mod pengguna dipanggil sebagai arahan istimewa.
Kontena adalah satu cara perisian pembungkusan, terutamanya semua kod aplikasi, perpustakaan dan kebergantungan. Mereka menyediakan persekitaran maya yang ringan yang mengelompokkan dan mengasingkan satu set proses dan sumber seperti memori, CPU, cakera, dan lain-lain, dari tuan rumah dan mana-mana bekas lain. Pengasingan menjamin bahawa apa-apa proses di dalam bekas tidak dapat melihat apa-apa proses atau sumber di luar bekas. Sebuah bekas menyediakan operasi virtualisasi peringkat sistem dengan abstrak ruang pengguna. Kontena juga menyediakan kebanyakan ciri yang disediakan oleh mesin maya seperti alamat IP, pemasangan volum, pengurusan sumber (CPU, memori, cakera), SSH (exec), imej OS, dan imej bekas, tetapi kontena tidak menyediakan sistem init sebagai bekas direka untuk menjalankan satu proses. Secara amnya, kontena menggunakan ciri-ciri kernel Linux seperti ruang nama (ipc, uts, mount, pid, rangkaian dan pengguna), kumpulan untuk menyediakan lapisan abstraksi di atas contoh kernel sedia ada untuk mewujudkan persekitaran terpencil yang serupa dengan mesin maya.
Tajuk imej
Rajah 1: Perbezaan antara VM dan Container
Ruang nama: Salah satu fungsi OS yang membolehkan perkongsian sumber global seperti rangkaian dan cakera untuk proses iaitu sumber global dibungkus dalam ruang nama supaya ia hanya dapat dilihat oleh proses-proses yang berjalan dalam ruang nama yang sama. Kita boleh mengambil contoh di mana pengguna perlu mendapatkan sepotong cakera dan meletakkannya di ruang nama "A" dan kemudian memproses berjalan di ruang nama "B" tidak dapat melihat atau mengaksesnya. Begitu juga, proses dalam ruang nama "A" tidak dapat mengakses apa-apa dalam memori yang diperuntukkan kepada ruang nama "B." Proses juga dalam "A" tidak dapat melihat atau bercakap dengan proses di ruang nama "B." Fungsi namespace ini memberikan pengasingan untuk sumber global dan inilah cara kerja Docker. Kernel OS mengetahui ruang nama yang diberikan kepada proses dan semasa panggilan API ia memastikan proses itu hanya dapat mengakses sumber dalam ruang nama sendiri. Docker menggunakan ruang nama ini bersama-sama untuk mengasingkan dan memulakan penciptaan bekas.
Terdapat beberapa jenis ruang nama dalam kernel yang digunakan oleh Docker, sebagai contoh:
BERSIH: Ia menyediakan bekas dengan pandangan sendiri tentang susunan rangkaian sistem (contohnya alamat IP, jadual Routing, nombor port, yang lain.
PID (ID Proses): Ruang nama PID (arahan Linux " ps -aux  "PID lajur) menyediakan kontena pandangan imbasan mereka sendiri proses termasuk init independen (PID 1), yang merupakan nenek moyang semua proses.
MNT: Ia menyediakan kontena pandangan sendiri tentang "mount" pada sistem. Oleh itu, proses-proses dalam ruang nama gunung berlainan mempunyai pandangan yang berbeza mengenai hirarki sistem fail.
UTS ( UNIX Timesharing System): Ia menyediakan satu proses untuk mengenal pasti pengenal sistem (iaitu nama host, nama domain, dll.). UTS membolehkan bekas mempunyai nama hos mereka sendiri dan nama domain NIS yang bebas daripada bekas lain dan sistem tuan rumah.
IPC (Komunikasi Interprocess) : Ruang nama IPC bertanggungjawab untuk mengasingkan sumber IPC antara proses yang berjalan di dalam setiap bekas.
USER: Ruang nama ini digunakan untuk mengasingkan pengguna dalam setiap bekas. Ia berfungsi dengan membenarkan kontena mempunyai pandangan yang berbeza dari julat UID (ID pengguna) dan gid (kumpulan ID) yang boleh berbeza di dalam dan di luar ruang nama pengguna yang menyediakan proses untuk mempunyai pengguna yang tidak berharga di luar bekas tanpa mengorbankan keistimewaan akar di dalam bekas.
Kumpulan kawalan (kumpulan): Ini adalah ciri kernel Linux yang mengasingkan dan menguruskan sumber yang berbeza seperti penggunaan CPU, memori, cakera I / O, rangkaian, dan sebagainya. Cgroup juga memastikan bahawa satu bekas tidak membuang salah satu daripada sumber tersebut dan membawa keseluruhan sistem ke bawah.

Bekas Docker

Docker adalah teknologi berasaskan bekas dan bekas hanya ruang pengguna sistem operasi. Pada tahap yang rendah, sebuah bekas hanyalah satu set proses yang terpencil dari seluruh sistem, berjalan dari imej yang berbeza yang menyediakan semua fail yang diperlukan untuk menyokong proses. Ia dibina untuk menjalankan aplikasi. Dalam Docker, bekas yang menjalankan berkongsi kernel OS tuan rumah.Docker adalah projek sumber terbuka berdasarkan bekas Linux. Ia menggunakan ciri-ciri Linux Kernel seperti ruang nama dan kumpulan kawalan untuk membuat bekas di atas sistem pengendalian. Docker melampirkan perisian aplikasi ke dalam kotak yang tidak kelihatan dengan semua yang diperlukan untuk berjalan seperti OS, kod aplikasi, Run-time, alat sistem dan perpustakaan dan lain-lain. Bekas docker dibina dari imej Docker dan imej hanya baca, So Docker menambahkan sistem fail baca-tulis melalui sistem fail baca sahaja imej untuk membuat bekas. Docker pada masa ini merupakan bekas yang paling popular dan mengapa komponen-komponen seni bina yang sangat popular dan berbeza, menggunakan kes akan menerangkan secara terperinci di bawah seksyen.

Komponen Docker:

Docker terdiri daripada enam komponen yang berbeza iaitu:
  • Docker Client;
  • Docker Daemon;
  • Docker Images;
  • Pendaftar Docker;
  • Kontena
  • Enjin Docker
Tajuk imej
Rajah 2: Komponen Docker Container Tahap Tinggi

Docker Client: Ini adalah alat CLI (Command Line Interface) yang digunakan untuk mengkonfigurasi dan berinteraksi dengan Docker. Apabila pemaju atau pengguna menggunakan arahan seperti docker run , klien menghantar arahan ini kepada Docker daemon (dockerd) yang membawa mereka keluar. Perintah docker menggunakan API Docker dan pelanggan Docker boleh berkomunikasi dengan lebih daripada satu daemon.
Docker Daemon: Ini adalah pelayan Docker yang berjalan sebagai daemon. Daemon ini mendengarkan permintaan API dan menguruskan objek Docker (imej, bekas, rangkaian, dan jumlah). Daemon juga boleh berkomunikasi dengan daemon lain untuk menguruskan perkhidmatan Docker.
Imej: Imej adalah templat / snapshot baca sahaja yang digunakan untuk membuat bekas Docker dan Imej-imej ini boleh ditarik dan ditarik dari repositori awam atau swasta.Inilah komponen pembina dermaga. Imej ringan, kecil, dan pantas berbanding dengan Imej Mesin Maya.
Fail dok: Digunakan untuk membina imej
Kontainer: Aplikasi yang dijalankan menggunakan bekas dan kontena adalah contoh yang menjalankan imej. Kita boleh membuat, menjalankan, berhenti, bergerak, atau memadamkan bekas menggunakan CLI dan juga boleh menyambungkan bekas ke satu atau lebih rangkaian, melampirkan storan ke sana, atau membuat imej baru berdasarkan keadaan semasa.
Pendaftar Docker: Ini adalah komponen pengedaran docker atau dipanggil sebagai repositori Pusat imej Dock yang menyimpan imej Docker. Hab Docker dan Docker Cloud adalah pendaftaran awam yang boleh digunakan sesiapa sahaja, dan Docker dikonfigurasikan untuk mencari imej di Hab Docker secara lalai. Apabila kami menggunakan perintah pelarik tarik atau pelindung pantau maka imej yang diperlukan ditarik dari pendaftaran yang dikonfigurasikan kami. Apabila kami menggunakan perintah push docker, imej kami akan didaftarkan ke registry dikonfigurasikan kami. Kami boleh menaik taraf aplikasi dengan menarik versi baru imej dan mengimport semula bekas.
Enjin Docker: Gabungan daemon Docker, API Rehat dan alat CLI

Kelebihan Docker

  • Mudah untuk mengalihkan aplikasi antara platform awan
  • Mengedarkan dan berkongsi kandungan
  • Mempercepat pemaju onboarding
  • Memberi kreativiti pemaju
  • Menghapuskan ketidakkonsistenan persekitaran
  • Perisian kapal lebih cepat
  • Mudah untuk skala permohonan
  • Isu pemantauan dengan cekap
  • Ringan
  • Mudah dimulakan (beberapa saat)
  • Mudah untuk berhijrah
  • Penyelenggaraan OS yang sangat kurang

Kes Use Key Docker

  • Memodenkan Aplikasi Tradisional
  • DevOps (CI / CD)
  • Awan Hibrid
  • Microservices
  • Pengoptimuman Infrastruktur
  • Data besar

Orkestra Container Docker Menggunakan Kubernetes

Dalam persekitaran kluster Docker, terdapat banyak tugas yang diperlukan untuk mengurus seperti penjadualan, komunikasi, dan kebolehkerjaan dan tugas-tugas ini dapat dijaga oleh mana-mana alat orkestrasi yang terdapat di pasaran tetapi beberapa alat yang diakui industri adalah Swap Docker yang Alat penyusun alat docker asli dan "Kubernetes" yang merupakan salah satu projek halaju tertinggi dalam sejarah sumber terbuka.
Kubernetes adalah alat pengurusan kontena (alat orkestrasi) sumber terbuka. Ia adalah tanggungjawab pengurusan kontena termasuk penggunaan kontena, penskalaan, dan penyingkiran bekas dan keseimbangan beban kontena.Terdapat perkhidmatan Kubernet berasaskan Awan yang dipanggil KaaS (Kubenetes sebagai Perkhidmatan) juga tersedia iaitu AWS ECS, EKS, Azure AKS, dan GCP GKE.
Tajuk imej
Rajah 3: Pandangan Aras Tinggi Kubernetes

Komponen Induk: Komponen induk menyediakan satah kawalan kluster dan bertanggungjawab untuk aktiviti global mengenai kluster seperti penjadualan, mengesan dan menanggapi peristiwa cluster.
  • Server API: Mengekspos API Kubernetes dan merupakan bahagian depan untuk pesawat kawalan Kubernetes.Server API adalah titik masuk untuk semua arahan REST yang digunakan untuk mengawal kluster. Ia memproses permintaan REST, mengesahkannya dan melaksanakan logik perniagaan terikat.
  • dan lain-lain: Semua data kluster disimpan dalam penyimpanan dll dan kedai kunci-kunci yang sederhana, diedarkan, konsisten. Ia digunakan terutamanya untuk penemuan konfigurasi dan penemuan perkhidmatan. Ia menyediakan API REST untuk operasi CRUD.
  • Pengawal-pengurus: Pengurus pengawal menjalankan pengawal yang mengendalikan tugas-tugas rutin dalam kluster seperti Pengawal Replikasi, Pengawal Akhir Pengawal dan lain-lain Pengawal menggunakan pelayan API untuk melihat keadaan bersama kluster dan membuat perubahan pembetulan pada keadaan semasa untuk mengubahnya kepada yang dikehendaki satu.
  • Penjadual: Penjadual mempunyai maklumat mengenai sumber yang tersedia pada anggota kelompok. Penjadual juga menonton pod baru yang tidak mempunyai nod yang ditugaskan dan memilih nod untuk dijalankan.
Komponen Nod: Komponen nod berjalan pada setiap nod, mengekalkan polongan dan menyediakannya kepada lingkungan runtime Kubernetes.
  • kubelet: Ejen nod utama yang mengawasi pod yang ditugaskan ke simpulnya dan melakukan tindakan untuk menjaga kesihatan dan berfungsi seperti vols pod volum, memuat rahasia pod, mengendalikan bekas, melakukan pemeriksaan kesihatan dan lain-lain. Kubelet mendapat konfigurasi pod dari apiserver dan memastikan bahawa bekas yang diletupkan itu berjalan dan berjalan. Ini adalah perkhidmatan pekerja yang bertanggungjawab untuk berkomunikasi dengan nod induk. Ia juga berkomunikasi dengan etcd, untuk mendapatkan maklumat tentang perkhidmatan dan menulis butiran mengenai yang baru dicipta.
  • kube-proxy: Membolehkan abstraksi perkhidmatan Kubernetes dengan mengekalkan peraturan rangkaian pada hos dan melaksanakan penghantaran sambungan.kube-proksi bertindak sebagai proksi rangkaian dan pengimbang beban untuk perkhidmatan pada satu nod pekerja tunggal. Ia menangani routing rangkaian untuk paket TCP dan UDP.
  • Docker: Ia digunakan untuk sebenarnya menjalankan bekas. Docker berjalan pada setiap nod pekerja, dan menjalankan pod dikonfigurasi. Ia mengambil alih memuat turun imej dan memulakan bekas.
.
Diterjemah dari sumber: https://dzone.com/articles/docker-containers-and-kubernetes-an-architectural
.

Monday, March 26, 2012

Windows 2008 Active Directory Exercise





Memasang Active Directory pada Windows Server 2008


Diterjemah dari Daniel Petri - January 8, 2009
(
http://www.petri.co.il/installing-active-directory-windows-server-2008.htm)


dan


---------------------------------------------------------------------------------------------
Microsoft Active Directory menyediakan struktur untuk memusatkan pengurusan rangkaian dan menyimpan maklumat sumber rangkaian dalam sesebuah domain. Active Directory menggunakan Domain Controllers untuk menyimpan pusat storan ini dan menyebarkannya kepada pengguna rangkaian.

Untuk membuat konfigurasi mesin Windows Server 2008 sebagai Domain Controller, beberapa pertimbangan dan prasyarat perlu diambil kira, dan beberapa langkah perlu dilakukan. Artikel ini mengandaikan mesin Windows Server 2008 yang terbabit akan menjadi Domain Controller bagi Active Directory(AD) untuk domain baru dalam forest baru.

Apabila memasang AD sebagai domain controller pertama dalam Windows Server 2008 forest yang baru, ambilkira hal berikut:
  • Tentukan functional level untuk forest and domain samada mahu melibatkan Windows 2000 Server, Windows Server 2003, atau keduanya.
  • Domain controllers yang berlandaskan Microsoft Windows NT Server 4.0 operating system TIDAK DISOKONG oleh Windows Server 2008.
  • Servers yang menjalankan Windows NT Server 4.0 TIDAK DISOKONG oleh domain controllers (DC) yang menjalankan Windows Server 2008, maka DC tambahan diperlukan untuk menyokong NT 4.0 servers.
  • DC yang pertama dalam forest mestilah bertindak sebagai global catalog server dan tidak boleh menjadi RODC.

Pertimbangan apabila memasang Windows Server 2008 domain baru dalam Windows 2000/2003 forest sedia ada


Ambilkira:
  • Sediakan forest untuk Windows Server 2008 dengan mengembangkan schema (i.e., run ADPREP /forestprep). Rujuk "Windows Server 2008 ADPREP" .
  • Domain functional level – samada mahu melibatkan Windows 2000 Server, Windows Server 2003, atau kedua-duanya.
  • Dicadangkan agar PDC emulator operations master role dicipta pada forest root domain dalam DC yang menjalankan Windows Server 2008. Maklumat lanjut tentang FSMO Roles, rujuk "Understanding FSMO Roles in Active Directory" dan "Transferring FSMO Roles" .

Perimbangan Umum


Pastikan syarat "Active Directory on Windows Server 2008 Requirements" dipenuhi.

Memasang Active Directory Domain Services (AD-DS)


Proses dimulakan dengan memasang Role Active Directory Domain Services (AD-DS) pada server. AD-DS role yang akan menjadikan server sebagai Domain Controller, namun program DCPROMO mesti dijalankan selepas ini.
AD-DS boleh dipasang dalam 3 kaedah:

Kaedah 1 – Server Manager/Initial Configuration Tasks


(Secara default , pengguna akan melihat Initial Configuration Tasks wizard sejurus selepas login ke sistem. Pengguna juga boleh memasang melalui Wizard ini).
  1. Jalankan Server Manager dengan meng klik icon pada Quick Launch toolbar, atau dari Administrative Tools folder.
  2. Tunggu hingga selesai loading, kemudian tekan pautan Roles > Add Roles .
  3. Dalam “Before you begin” window, klik Next.
  4. Dalam “Select Server Roles” window, klik untuk pilih Active Directory Domain Services, dan kemudian klik Next.
  5. Dalam “Active Directory Domain Services” window baca maklumat yang disertakan, dan klik Next.
  6. Dalam “Confirm Installation Selections”, baca maklumat yang disertakan dan klik Next.
  7. Tunggu hingga proses tamat.
  8. Bila tamat, klik Close.
  9. Pergi semula ke Server Manager, klik Active Directory Domain Services link, dan perhatikan tiada maklumat yang dikaitkan padanya, kerana arahan DCPROMO belum dilaksanakan.
  10. Klik pautan DCPROMO, atau terus membaca.
    1. Untuk menjalankan DCPROMO, taipkan dcpromo pafa Run command (pada Start Menu), atau klik pautan DCPROMO dalamServer Manager> Roles>Active Directory Domain Services.
    2. Bergantung samada AD-DS pernah dipasang atau tidak, “Active Directory Domain Services Installation Wizard” akan muncul selepas beberapa ketika. Tekan Next.
    3. Dalam “Operating System Compatibility window”, baca maklumat yang disertakan dan klik Next.
    4. Dalam “Choosing Deployment Configuration window”, klik "Create a new domain in a new forest" dan klik Next.
    5. Masukkan nama yang sesuai untuk domain baru. Pastikan anda pilih nama domain yang betul kerana proses untuk menamakannya semula tidak mudah. Klik Next.

Nota: JANGAN GUNA label tunggal seperti "mydomain" atau seumpamanya. Anda MESTI menulis nama domain penuh seperti "mydomain.local" atau "mydomain.com" dan seterusnya.
Wizard akan memeriksa samada nama domain telah digunakan atau tidak dalam rangkaian komputer.
  1. Pilij “forest function level” yang betul; Windows 2000 mode (default), atau Windows Server 2003 dan Windows Server 2008 Domain Controllers kepada forest yang anda mahu cipta. Baca "Understanding Windows Server 2008 Active Directory Domain and Forest Functional Levels" untuk pengetahuan lanjut.
  2. Pilih “domain function level” yang betul ; Windows 2000 Native mode (default), Windows Server 2003 and Windows Server 2008 Domain Controllers terhadap domain yang mahu dicipta.

Nota: Jika anda pilih "Windows Server 2008" untuk “forest function level”, anda tidak akan diminta lagi untuk memilih “domain function level”. Baca "Understanding Windows Server 2008 Active Directory Domain and Forest Functional Levels".
  1. Wizard akan memeriksa jika DNS telah menurut konfigurasi dalam rangkaian. Wizard akan memeriksa dahulu sekiranya konfigurasi DNS wujud dalam rangkaian. Jika tiada konfigurasi DNS wujud dalam rangkaian, Wizard akan memasang DNS secara automatik.

Nota: DC pertama mesti menjadi “Global Catalog”. Juga, DC pertama dalam forest tidak boleh menjadi RODC.
  1. Kemungkinan anda akan menerima mesej amaran bahawa server mempunyai dynamic IP Address. Ia barangkali akibat dari alamat IPv6 yang tidak diedit. (run ipconfig /all untuk semak). Jika IPv6 sememangnya tidak digunakan dalam rangkaian anda, abaikan mesej ini.
  2. Anda mungkin menerima mesej amaran tentang “DNS delegation”. Memandangkan tiada DNS yang telah dibuat konfigurasi, abaikan mesej ini, tekan “Yes”.
  3. Seterusnya, tentukan laluan untuk “AD database”, “log files” and “SYSVOL” folder. Boleh diterima sahaja input yang dicadangkan. Untuk pemasangan skala besar, rancang teliti konfigurasi DC agar nanti mendapatkan prestasi baik. Klik Next.
  4. Masukkan password untuk Active Directory Recovery Mode. Password mesti disimpan secara sulit. Panjangnya kira2 7 karakter. Jika boleh, jangan guna password dari kelas Administrator.
    Klik
    Next.
  5. Dalam “Summary window” semak pilihan anda. Jika perlu, save kan ke unattend answer file. Seterusnya, click Next.
  6. Wizard ini memulakan “Active Directory domain”, dan apabila tamat, tekan Finish dan reboot komputer.

Nota: Anda boleh membuat reboot automatic dengan menanda checkbox “Reboot on Completion checkbox”.
Untuk membuat automasi pemasangan Domain Controller, anda boleh gunakan answer file atau anda taipkan “unattended installation parameters” pada “command line”. Baca "Creating an Unattend Installation File for DCPROMO in Windows Server 2008".
Nota: Sebagaimana disebut dalam "Installing Active Directory on Windows 2008 Server Core", konfigurasi pada Windows Server 2008 Server Core machine MENGHENDAKI anda membuat pemasangan automatic kerana TIADA “DCPROMO GUI” pada Server Core.
Server anda telah menjadi Domain Controller sekarang. Pastikan ianya di Back Up. Semak fungsinya menggunakan “AD management tools” seperti “Active Directory Users and Computers”, periksa “Event Logs”, “services and folders” dan “shares” yang telah dicipta.

Links

AD DS Installation and Removal Step-by-Step Guide

Kaedah 2 – Servermanagercmd.exe


Servermanagercmd.exe adalah command prompt setara dengan “Add Roles and Add Features wizards” dalam Server Manager. Through the use of various command line options, you can quickly and easily add or remove features and roles to or from your server, including the AD-DS role.
Taip seperti berikut:
Servermanagercmd.exe –I ADDS-Domain-Controller
Tunggu hingga proses selesai dan AD-DS akan terpasang pada server.

Kaedah 3 – DCPROMO


Jalankan DCPROMO melalui “Run command” dan sebelum ia dijalankan, Server akan memeriksa samada AD-DS binaries telah terpasang. Jika tiada, Server akan melaksanakan auto-install.
Setelah selesai “Add Roles Wizard”, klik samada pautan untuk mulakan “Active Directory Domain Services Installation Wizard”, atau tutup dan jalankan DCPROMO dari “Run command”.

Running DCPROMO


Setelah selesai memasang AD-DS role, kita perlu menjalankan DCPROMO untuk membina Active Directory database dan memasang fungsinya.
Nota: Panduan ini mengandaikan bahawa ini adalah Domain Controller pertama di dalam forest, justeru mencipta domain baru dalam forest baru. Sekiranya domain telah wujud, rujuk "Installing Additional Windows Server 2008 Domain Controllers in your Existing Active Directory Domain".