Buat Frontend HTML 5 RDP / SSH Menggunakan Guacamole di Ubuntu 16.04 LTS

Pengenalan

Matlamat tutorial ini adalah untuk menghilangkan sambungan SSH dan RDP awam. Dengan meletakkan semua ini di belakang klien HTML5 yang sangat mudah, kita dapat menambahkan lapisan keselamatan untuk mengakses cloud kita.

Guacamole juga mencatat sebarang akses jauh, jadi akses yang tidak dibenarkan menjadi lebih mudah dikesan.

Catatan: Untuk enkripsi Let's (pilihan B) kita memerlukan nama domain. Jika anda tidak mempunyai satu, anda boleh melangkau langkah ini dan hanya melaksanakan pilihan A .

Langkah 1 - Menyiapkan sistem

Mulakan dengan memutar VPS di zon Vultr yang anda mahukan. A 1024 MBVPS akan cukup, kerana guacamole tidak begitu mendesak.

Mengaktifkan IP peribadi

Mulakan dengan mengaktifkan rangkaian peribadi di VPS. Ini didokumentasikan dengan baik di sini

Menyiapkan firewall

Mula-mula mari mengeraskan imej sedikit. Dan mari kita periksa sama ada gambar yang telah disediakan telah ufwdiaktifkan.

root@vultr:~# ufw status
Status: inactive

Secara lalai ia dilumpuhkan, jadi kami perlu menambahkan beberapa peraturan.

  • Peraturan 1: ssh: TCP port 22
  • Peraturan 2: http: TCP port 8080 (peraturan ujian sementara untuk Guacamole)

Mari mulakan dengan mengkonfigurasi port ini.

ufw allow 22/tcp
ufw allow 8080/tcp

Seterusnya aktifkan firewall.

ufw enable

Jangan risau jika anda menerima amaran. Sekiranya anda menambah port 22, anda tidak akan menghadapi masalah.

root@vultr:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Setelah diaktifkan, minta status firewall dan kami akan melihat konfigurasi port kami.

ufw status

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
8080/tcp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
8080/tcp (v6)              ALLOW       Anywhere (v6)

Langkah 2 - Memasang Guacamole

Memasang semua kebergantungan

Sebelum memulakan pemasangan, kita perlu mengemas kini dan menaik taraf repo. Dengan pakej seperti Tomcat, yang berbasis Java, terdapat aliran bug yang berterusan dan perbaikan bug yang berkaitan. Sebaiknya lakukan ini terlebih dahulu daripada terus masuk ke pemasangan kami.

apt-get update
apt-get -y upgrade 

Selanjutnya adalah semua kebergantungan. Guacamole mempunyai sebilangan besar daripadanya. (Senarai penuh kebergantungan dan fungsinya boleh didapati di sini ). Mari teruskan dengan memasang semuanya.

apt-get -y install build-essential tomcat8 freerdp libcairo2-dev libjpeg-turbo8-dev libpng12-dev libossp-uuid-dev libavcodec-dev libavutil-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvorbis-dev libwebp-dev mysql-server mysql-client mysql-common mysql-utilities libswscale-dev libvncserver-dev libpulse-dev libssl-dev

Apabila pemasang meminta kata laluan root MySQL, berikan kata laluan dan pastikan untuk memperhatikannya. Kami akan menggunakan kata laluan ini di kemudian hari untuk membuat pangkalan data Guacamole.

Memuat turun Guacamole

Sekarang kita mempunyai semua kebergantungan, kita boleh terus memuat turun Guacamole. Guacamole sendiri kebanyakan terdapat dalam bentuk sumber, dan bukan binari. Mula-mula kita akan berpindah ke /tmpfolder untuk mengelakkan kekacauan bahagian lain dari cakera. Kemudian muat turun semua kod sumber.

Terdapat empat fail sumber / binari untuk dimuat turun:

  • guacamole-0.9.13-incubating.war: Ini adalah aplikasi web. A WARfail adalah satu pakej web zip menyediakan satu laman web yang dihoskan di laman web Tomcat
  • guacamole-server-0.9.13-incubating.tar.gz: Fail ini akan memberikan guacdaplikasi backend . Ini mewujudkan aliran melalui RDP dan SSH.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: Kami akan menggunakan pangkalan data MySQL tempatan, jadi kami memerlukan JDBCpenyambung yang berkaitan .
  • mysql-connector-java-5.1.43.tar.gz: Tanpa pemacu pangkalan data, penyambung JDBC tidak melakukan apa-apa. Fail ini disediakan oleh pasukan MySQL sendiri.

Nota: muat turun diselesaikan ke pelayan terdekat .

cd /tmp
wget http://apache.belnet.be/incubator/guacamole/0.9.13-incubating/binary/guacamole-0.9.13-incubating.war
wget http://apache.cu.be/incubator/guacamole/0.9.13-incubating/source/guacamole-server-0.9.13-incubating.tar.gz
wget http://apache.cu.be/incubator/guacamole/0.9.13-incubating/binary/guacamole-auth-jdbc-0.9.13-incubating.tar.gz
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.43.tar.gz

Setelah kami memuat turun semua fail ini, ekstrak fail tersebut tar.gz.

tar -xzvf guacamole-server-0.9.13-incubating.tar.gz
tar -xzvf guacamole-auth-jdbc-0.9.13-incubating.tar.gz
tar -xzvf mysql-connector-java-5.1.43.tar.gz

Menyusun Guacamole

Sekarang kita telah mengekstrak semua kod sumber, mari kita buat beberapa guacamolefolder, ini akan digunakan oleh aplikasi guacamole dan kebergantungannya.

mkdir -p /etc/guacamole/lib
mkdir -p /etc/guacamole/extensions

Semuanya sudah siap untuk binari Guacamole baru kami. Kita sekarang boleh memulakan proses penyusunan dan pemasangan. Pindah ke folder Guacamole Server yang diekstrak.

cd /tmp/guacamole-server-0.9.13-incubating

Konfigurasikan aplikasi untuk juga membuat init.dfail untuk menjalankannya sebagai perkhidmatan di kemudian hari.

./configure --with-init-dir=/etc/init.d

Perintah harus diakhiri dengan 'ya' di semua perpustakaan dan protokol. Sekiranya tidak, kembali dan periksa arahan apt-get untuk memastikan anda tidak terlepas sebarang pakej.

------------------------------------------------
guacamole-server version 0.9.13-incubating
------------------------------------------------

   Library status:

     freerdp ............. yes
     pango ............... yes
     libavcodec .......... yes
     libavutil ........... yes
     libssh2 ............. yes
     libssl .............. yes
     libswscale .......... yes
     libtelnet ........... yes
     libVNCServer ........ yes
     libvorbis ........... yes
     libpulse ............ yes
     libwebp ............. yes

   Protocol support:

      RDP ....... yes
      SSH ....... yes
      Telnet .... yes
      VNC ....... yes

   Services / tools:

      guacd ...... yes
      guacenc .... yes

   Init scripts: /etc/init.d

Type "make" to compile guacamole-server.

Seterusnya susun dan pasang pelayan Gucamole.

make && make install

Setelah semua ini selesai, jalankan ldconfiguntuk membina semula jalan pencarian perpustakaan yang telah ditambahkan.

ldconfig

Teruskan dengan menggunakan systemctlsetup guacd(Guacamole Daemon) untuk memulakan boot.

systemctl enable guacd

Binari Guacamole kini dipasang. Sekarang kita akan menyiapkan aplikasi web untuk Tomcat.

Mulakan dengan memindahkan warfail ke guacamolefolder yang baru kita buat, setelah ini dibuat, buatlah pautan logik di direktori tomcat untuk menunjuk ke warfail kita .

cd /tmp
mv guacamole-0.9.13-incubating.war /etc/guacamole/guacamole.war
ln -s /etc/guacamole/guacamole.war /var/lib/tomcat8/webapps/

Maka kita memerlukan penyambung mysql dan JDBC. Pemacu JDBC diperlukan dalam extensionsfolder, penyambung dalam libfolder.

cp mysql-connector-java-5.1.43/mysql-connector-java-5.1.43-bin.jar /etc/guacamole/lib/
cp guacamole-auth-jdbc-0.9.13-incubating/mysql/guacamole-auth-jdbc-mysql-0.9.13-incubating.jar /etc/guacamole/extensions/

Mengkonfigurasi Guacamole dan Tomcat

Setelah penyambung dan JDBC dipasang, kita perlu mengedit tocamt8fail. Fail ini mengandungi banyak tomcat8tetapan, dan dalam kes kami, kami perlu menambahkan GUACAMOLE_HOMEpemboleh ubah di akhir fail.

nano /etc/default/tomcat8

Lampirkan dengan perkara berikut.

GUACAMOLE_HOME=/etc/guacamole

Membuat pangkalan data

Selanjutnya adalah membuat pangkalan data. Guacamole menyimpan konfigurasi sambungannya dalam pangkalan data, bukan di dalam fail.

Log masuk dengan yang root passwordanda gunakan semasa pemasangan.

mysql -u root -p

Langkah pertama adalah membuat pangkalan data yang dipanggil 'guacamole_db'.

create database guacamole_db;

Kemudian jalankan create userarahan. Ini akan membuat pengguna dengan kata laluan mysupersecretpassword, pengguna ini hanya dapat berhubung localhost.

create user 'guacamole_user'@'localhost' identified by "mysupersecretpassword";

Berikan CRUDoperasi kepada pengguna ini untuk pangkalan data guacamole_db.

GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';

Bilas hak istimewa dan keluar dari cengkerang.

flush privileges;
exit

Selesaikan dengan menambahkan skema Guacamole ke pangkalan data kami yang baru dibuat.

cat /tmp/guacamole-auth-jdbc-0.9.13-incubating/mysql/schema/*.sql | mysql -u root -p guacamole_db

Setelah ini selesai, kita perlu mengedit guacamole.propertiesfail. Fail ini mengandungi konfigurasi pelayan MySQL yang baru kami buat.

nano /etc/guacamole/guacamole.properties

Lampirkan perincian dan kelayakan sambungan MySQL.

mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: mysupersecretpassword

Selesaikan dengan membuat pautan simbolik ke folder kongsi tomcat, kerana di sinilah WARfail akan mencari sifat ini.

ln -s /etc/guacamole /usr/share/tomcat8/.guacamole

Menguji persediaan

Tamatkan dengan memulakan semula tomcat8pelayan dan mulakan guacddaemon pelayan.

service tomcat8 restart
service guacd start

Anda boleh mengesahkan dengan menggunakan arahan status.

service tomcat8 status
service guacd status

Sekarang anda boleh melihat ke VPS anda di port 8080

http://<yourpublicip>:8080/guacamole/

Gunakan nama pengguna guacadmindan kata laluan yang sama guacadmin. Ini akan memberi anda akses ke pelayan Guacamole kosong.

Klik di sudut kanan atas pada nama pengguna anda guacadmindan pilih Settings. Setelah anda berada di halaman tetapan, pergi ke Userstab dan pilih pengguna guacadmin.

Sekarang ubah kata laluan anda kepada yang lain atau buat pengguna pentadbir baru dan hapus yang lalai guacadmin.

Langkah 3 - Penalaan dan pembersihan yang baik

Ini adalah langkah terakhir: membersihkan diri setelah selesai.

Padamkan kod sumber dan binari yang dimuat turun dari /tmpfolder.

rm -rf /tmp/guacamole-*
rm -rf /tmp/mysql-connector-java-*

Juga, jadikan aplikasi web Guacamole sebagai aplikasi lalai. Dalam ekosistem tomcat aplikasi yang mendapat ROOTfolder adalah aplikasi yang dimulakan secara lalai ketika anda mengakses laman web.

Padamkan tempat ROOTletak lama .

rm -rf /var/lib/tomcat8/webapps/ROOT

Dan jadikan pautan simbolik agar pelayan guacamole menjadi yang ROOTsatu.

ln -s /var/lib/tomcat8/webapps/guacamole /var/lib/tomcat8/webapps/ROOT

Ini memerlukan restart tomcat.

service tomcat8 restart

Langkah 4 (pilihan A) - Berjalan menggunakan HTTP sahaja

  • Sekiranya anda tidak akan menggunakan sijil Let's Encrypt dan tidak menggunakan DNS, jalankan tindakan dalam langkah ini dan kemudian pergi terus ke Langkah 6. - Pilihan A
  • Sekiranya anda ingin membuat laman web yang lebih selamat dan anda mempunyai DNS yang siap, anda boleh melangkau ini dan terus ke pilihan B (Langkah 5).

Edit tomcat8/server.xmlfail dan ubah port penyambung.

nano /etc/tomcat8/server.xml

Cari untuk Connector port.

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443" />

Dan ganti 8080dengan 80.

Secara lalai, tomcat tidak membenarkan pengikatan port di bawah 1024. Untuk mengaktifkannya, kita perlu memberitahu tomcat8 untuk membuat pengikat yang disahkan.

Edit defaultfail tomcat8 dan lepaskan AUTHBINDgaris dan gunakan pilihanyes

nano /etc/default/tomcat8

AUTHBIND=yes

Setelah ini selesai, pasangkan authbind.

apt-get install authbind

Konfigurasikannya supaya port 80dapat dituntut oleh tomcat8.

touch /etc/authbind/byport/80
chmod 500 /etc/authbind/byport/80
chown tomcat8 /etc/authbind/byport/80

Benarkan port 80melalui firewall dan hapus peraturan untuk 8080.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Mulakan semula tomcat.

service tomcat8 restart

Itu sahaja, sekarang Guacamole harus berjalan di port 80.

Langkah 5 (pilihan B) - Menyiapkan Nginx

Pemasangan dan konfigurasi Nginx

Tomcat sebenarnya bukan salah satu aplikasi terbaik dan paling mantap untuk digunakan certbot. Nasib baik Nginx adalah. Kami hanya akan memberikan proksi kepada Nginx. Ia menggunakan fungsi certbot di luar kotak dengan mengorbankan sedikit RAM.

apt-get install nginx

Setelah dipasang, edit konfigurasi lalai.

nano /etc/nginx/sites-available/default

Padam semua konfigurasi contoh dan tambahkan konfigurasi berikut.

server {      
  listen 0.0.0.0:80;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Ini akan membuat proksi untuk laman web yang berjalan di 8080. Restart Nginx, dan aktifkannya pada boot.

systemctl restart nginx
systemctl enable nginx

Periksa sama ada semuanya berfungsi.

systemctl status nginx

Lumpuhkan port ujian 8080dan biarkan lalu lintas di port 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Memasang Let's Encrypt

Sebelum kita dapat menggunakannya certbot, kita perlu menambahkan yang betul ppapada sistem yang mengandungi pakej certbot kami.

add-apt-repository ppa:certbot/certbot

Tekan " ENTER" untuk menerima perubahan konfigurasi.

Kemas kini aptuntuk mengumpul pakej baru.

apt-get update

Akhirnya, pasang modul Nginx untuk memberikan sijil.

apt-get -y install python-certbot-nginx

Konfigurasikan Nginx untuk menggunakan sijil

Konfigurasikan firewall untuk membenarkan HTTPS.

ufw allow 443/tcp

Sebelum kita dapat meminta sijil baru, kita memerlukan nama DNS.

nano /etc/nginx/sites-available/default

Tambah server_nametetapan berikut .

server_name rdp.example.com;

Ubah konfigurasi untuk menggambarkan tetapan baru ini.

server {
  server_name rdp.example.com;

  listen 0.0.0.0:80;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Periksa sama ada semuanya berfungsi dan mulakan semula Nginx.

nginx -t
service nginx restart

Sekarang minta sijil dengan certbot.

certbot --nginx -d rdp.example.com

Berikan e-mel anda dan setuju dengan soalan yang diajukan oleh pemasang. (Anda boleh memilih " No" dengan selamat untuk berkongsi e-mel anda.) Certbot secara automatik akan bertanya apa yang perlu dilakukannya HTTPS. Kami akan menggunakan pilihan 2: redirect to HTTPS.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Perkara terakhir yang akan kita lakukan ialah mengemas kini DHparameter. Ini, secara lalai, sedikit lemah untuk standard 2017.

Buat beberapa yang baru.

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Seterusnya, tambahkan mereka ke laman web lalai di Nginx.

nano /etc/nginx/sites-available/default

Tambahkannya ke konfigurasi pelayan.

server {
  server_name rdp.example.com;

  listen 0.0.0.0:80;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Periksa kesilapan.

nginx -t

Terapkan perubahan dengan memulakan semula pelayan.

service nginx restart

Bersihkan 8080peraturan lama

ufw delete allow 8080/tcp

Catatan: jika anda menerima "502 Bad Gateway", anda perlu memulakan semula tomcat8 .

service tomcat8 restart

Memperbaharui sijil secara automatik

Let's Encrypt sijil memerlukan pembaharuan. Kita boleh membuat pekerjaan cron untuk ini. Mulakan dengan menyunting crontab.

crontab -e

Tambahkan baris berikut.

00 2 * * * /usr/bin/certbot renew --quiet

Perkara ini akan diperiksa pada jam 2:00 pagi jika ada sijil yang memerlukan pembaharuan dan akan memperbaharui jika ada.

Langkah 6 - Menguji semuanya

Pergi ke pelayan Guacamole anda (sama ada http://<ip>/atau https://rdp.example.com)).

Untuk ujian ini, anda memerlukan dua contoh lagi: satu Linux VM dan satu lagi Windows Server 2012 R2 dengan IP peribadi yang diaktifkan pada kedua-duanya.

Menambah sambungan Windows RDP

Klik " username" di sudut kanan atas dan pergi ke " Settings". Kemudian pergi ke " Connections" dan pilih " New Connection".

Isi tetapan berikut (anda boleh membiarkan yang lain lalai).

Name: Windows Server 2012 R2
Location: ROOT
Protocol: RDP
Maximum number of connections: 1
Maximum number of connections per user: 1
Parameters > Hostname: 10.99.0.12
Parameters > Port: 3389
Username: Administrator
Password: <password> (provided by Vultr)
Security mode: Any
Ignore server certificate: <checked>

Tekan " save" dan kembali ke skrin utama. Sekarang anda boleh mengklik Windows Server 2012 R2sambungan " " dan ia akan RDP ke mesin ini.

Menambah sambungan SSH Linux

Tekan " Ctrl+Shift+Alt". Ini akan muncul menu di sebelah. Di sini anda boleh memutuskan sambungan atau melaksanakan tugas pentadbiran lain untuk Guacamole.

Klik usernamedi bahagian atas menu dan pergi ke " Settings". Kemudian pergi ke Connectionstab " " dan pilih " New Connection".

Isi tetapan berikut (anda boleh membiarkan yang lain lalai).

Name: Linux
Location: ROOT
Protocol: SSH
Maximum number of connections: 5
Maximum number of connections per user: 2
Parameters > Hostname: 10.99.0.11
Parameters > Port: 22
Username: root
Password: <password> (provided by Vultr)

Tekan " save" dan kembali ke skrin utama. Sekarang anda boleh mengklik sambungan yang baru dibuat ini dan disambungkan ke pelayan Linux anda melalui SSH.

Kesimpulannya

Anda kini mempunyai gateway RDP / SSH HTML5 web. Sekarang anda boleh firewall akses RDP dan SSH awam platform anda dan mengakses persekitaran anda dari penyemak imbas moden mana pun. Untuk maklumat lebih lanjut mengenai apa yang dapat ditawarkan oleh Guacamole, terdapat video hebat yang menunjukkan semua kemungkinan platform di sini .



Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

Ramai daripada anda tahu Switch akan keluar pada Mac 2017 dan ciri baharunya. Bagi yang tidak tahu, kami telah menyediakan senarai ciri yang menjadikan 'Tukar' sebagai 'gajet yang mesti ada'.

Janji Teknologi Yang Masih Tidak Ditepati

Janji Teknologi Yang Masih Tidak Ditepati

Adakah anda menunggu gergasi teknologi memenuhi janji mereka? semak apa yang masih belum dihantar.

Fungsi Lapisan Seni Bina Rujukan Data Besar

Fungsi Lapisan Seni Bina Rujukan Data Besar

Baca blog untuk mengetahui lapisan berbeza dalam Seni Bina Data Besar dan fungsinya dengan cara yang paling mudah.

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Baca ini untuk mengetahui cara Kecerdasan Buatan semakin popular di kalangan syarikat berskala kecil dan cara ia meningkatkan kebarangkalian untuk menjadikan mereka berkembang dan memberikan pesaing mereka kelebihan.

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA telah menjadi agak sukar untuk diselesaikan oleh pengguna dalam beberapa tahun kebelakangan ini. Adakah ia dapat kekal berkesan dalam pengesanan spam dan bot pada masa hadapan?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Apabila Sains Berkembang pada kadar yang pantas, mengambil alih banyak usaha kita, risiko untuk menundukkan diri kita kepada Ketunggalan yang tidak dapat dijelaskan juga meningkat. Baca, apakah makna ketunggalan bagi kita.

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Apakah teleperubatan, penjagaan kesihatan jauh dan impaknya kepada generasi akan datang? Adakah ia tempat yang baik atau tidak dalam situasi pandemik? Baca blog untuk mencari paparan!

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Anda mungkin pernah mendengar bahawa penggodam memperoleh banyak wang, tetapi pernahkah anda terfikir bagaimana mereka memperoleh wang seperti itu? Mari berbincang.

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Baru-baru ini Apple mengeluarkan macOS Catalina 10.15.4 kemas kini tambahan untuk menyelesaikan masalah tetapi nampaknya kemas kini itu menyebabkan lebih banyak masalah yang membawa kepada pemusnahan mesin mac. Baca artikel ini untuk mengetahui lebih lanjut