Linux での SELinux を理解する方法

Linux での SELinux を理解する方法

1. SELinux の紹介

SELinux はカーネル レベルのセキュリティ メカニズムです。SELinux は Linux 2.6 以降カーネルに統合されています。SELinux はカーネル レベルであるため、構成ファイルへの変更を有効にするにはオペレーティング システムを再起動する必要があります。

SELinux メカニズムは現在、主流の Linux バージョンに統合されており、CentOS/RHEL ではデフォルトで SELinux メカニズムが有効になります。

システム リソースはプロセスによって読み取られ、変更されます。システム リソースのセキュリティを確保するために、従来の Linux では、ユーザー パーミッションとファイル パーミッションの概念を使用してリソースへのアクセスを制限しています。これは、プロセスの開始ユーザーとファイル パーミッションを比較して、システム リソースのセキュリティを確保することによって行われます。これは、任意アクセス制御方式 (DAC) です。ただし、システム リソースのセキュリティ要件が増加するにつれて、Linux ではセキュリティ強化メカニズム (SELinux) が登場しました。このメカニズムは、パーミッションに加えて、プロセスとファイルにさらに多くの制限を追加して、アクセス条件を強化します。この方法は、強制アクセス制御 (MAC) です。これら 2 つの方法の最も直感的な比較は、従来の DAC ではルートが任意のファイルにアクセスできるのに対し、MAC ではルートであっても設定で許可されたファイルにしかアクセスできないという点です。

動作原理は次のとおりです。

2. SELinuxの基本概念

オペレーティング システムのセキュリティ メカニズムは、実際にはプロセスとシステム リソース (ファイル、ネットワーク ソケット、システム コールなど) の 2 つを制限することがわかっています。

これまでに学んだ知識では、Linux オペレーティング システムは、ユーザーとグループの概念を通じてシステム リソースを制限します。各プロセスを実行するにはユーザーが必要であることはわかっています。

SELinux では、ドメインとコンテキストという 2 つの基本概念が定義されています。

2.1 仕事の種類

SELinux にはさまざまなルールがあります。SELinux は、さまざまな作業タイプに応じてこれらのルールをオンまたはオフ (on|off<ブール値 1|0>) にし、ルールをオンまたはオフにすることで、さまざまなプロセスによるファイルの読み取りを具体的に制限します。

getsebool -a または sestatus -b # 現在の作業タイプで各ルールが有効になっているかどうかを確認します

setsebool -P ルール名 [0|1] # 現在の作業タイプで指定されたルールの開始と終了を変更します。 -P は、ファイルを同時に変更して永続化することを意味します

ドメインはプロセスを制限するために使用され、コンテキストはシステム リソースを制限するために使用されます。

2.2. セキュリティコンテキストの紹介

セキュリティ コンテキストはプロセスとファイルに存在します。コンテキストはプロセスとともにメモリに保存され、ファイルのコンテキストは対応する inode に保存されます。したがって、プロセスがファイルにアクセスするときは、まず inode を読み取り、ファイルにアクセスできるかどうかを判断する必要があります。

ls -Z # ファイルのセキュリティコンテキストを表示する

ps -eZ # すべてのプロセスのセキュリティコンテキストを表示します

ps -Z コマンドを使用すると、現在のプロセスのドメイン情報、つまりプロセスの SELinux 情報を表示できます。

[root@xiaoluo ~]# ps -Z

ラベル PID TTY 時間 コマンド

非制限_u:非制限_r:非制限_t:s0-s0:c0.c1023 2503 ポイント/0 00:00:00 su

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2511 ポイント/0 00:00:00 バッシュ

非制限_u:非制限_r:非制限_t:s0-s0:c0.c1023 3503 ポイント/0 00:00:00 ps

ls -Z コマンドを使用すると、ファイルのコンテキスト情報、つまりファイルの SELinux 情報を表示できます。

[root@xiaoluo ~]# ls -Z

-rw------。ルート ルート system_u:object_r:admin_home_t:s0 anaconda-ks.cfg

drwxr-xr-x. ルート ルート unconfined_u:object_r:admin_home_t:s0 デスクトップ

-rw-r--r--+ ルート ルート system_u:object_r:admin_home_t:s0 インストール.log

-rw-r--r--。ルート ルート system_u:object_r:admin_home_t:s0 install.log.syslog

これらのフィールドが何を表しているかについては、後で説明します。

3. 戦略

SELinux では、ポリシーを定義することで、どのドメインがどのコンテキストにアクセスできるかを制御します。

SELinux には、多くの事前設定されたポリシー モードがあります。通常、何らかのサービスやプログラムを保護する必要がない限り、自分でポリシーを定義する必要はありません。

CentOS/RHEL では、ターゲット戦略がデフォルトで使用されます。では、ターゲット戦略とは何でしょうか?

ターゲット ポリシーは、ターゲット プロセスのみが SELinux によって制限され、非ターゲット プロセスは SELinux によって制限されないことを定義します。通常、ネットワーク アプリケーションは httpd、mysqld、dhcpd などのターゲット プロセスです。

CentOS SELinux 設定ファイルは、/etc/sysconfig/ ディレクトリの selinux ファイルに保存されます。その内容は次のように確認できます。

[root@xiaoluo ~]# cat /etc/sysconfig/selinux

# このファイルはシステム上の SELinux の状態を制御します。

# SELINUX= は次の 3 つの値のいずれかを取ることができます。

# enforcing - SELinux セキュリティ ポリシーが適用されます。

# permissive - SELinux は強制する代わりに警告を出力します。

# 無効 - SELinux ポリシーはロードされません。

SELINUX=強制

# SELINUXTYPE= は次の 2 つの値のいずれかを取ることができます。

# 対象 - 対象プロセスは保護され、

# mls - マルチレベルセキュリティ保護。

SELINUXTYPE=targeted // CentOS が使用する戦略はターゲット戦略です

4. SELinux モード

SELinux には、強制、許可、無効の 3 つの動作モードがあります。

①強制モード:ポリシーに違反する行為は禁止され、カーネル情報として記録されます

②許可モード:ポリシーに違反する行為は禁止されないが、警告メッセージが表示される

③無効モード:SELinuxを無効にすると、SELinuxのないシステムと同じです。通常、SELinuxについてよく知らない場合は、一部のネットワークアプリケーションにアクセスする際に問題が発生しないように、モードを無効に設定します。

前述のように、SELinuxの主な設定ファイルは/etc/sysconfig/selinuxです。

[root@xiaoluo ~]# cat /etc/sysconfig/selinux

# このファイルはシステム上の SELinux の状態を制御します。

# SELINUX= は次の 3 つの値のいずれかを取ることができます。

# enforcing - SELinux セキュリティ ポリシーが適用されます。

# permissive - SELinux は強制する代わりに警告を出力します。

# 無効 - SELinux ポリシーはロードされません。

SELINUX=enforcing // SELinuxのデフォルトの動作モードはenforcingであることがわかります

# SELINUXTYPE= は次の 2 つの値のいずれかを取ることができます。

# 対象 - 対象プロセスは保護され、

# mls - マルチレベルセキュリティ保護。

SELINUXTYPE=ターゲット

コマンドを使用して作業モードを変更することは、現時点でのみ有効です。起動時に有効にし、無効モードと他の 2 つのモードを切り替える場合は、構成ファイルのパラメータを変更して再起動するしかありません。構成ファイルは /etc/selinux/config です。/etc/sysconfig/selinux ファイルから変更することもできます。実際、このファイルは /etc/selinux/config のソフト リンク ファイルです。

SELinuxのデフォルトの動作モードはenforcingですが、permissiveまたはdisabledに変更できます。

SELinux の現在の動作ステータスを確認するには、getenforce コマンドを使用します。

[root@xiaoluo ~]# getenforce

施行

現在の動作モードは強制です。現在のSELinuxの動作状態を設定するには、setenforce [0|1]コマンドを使用して変更できます。setenforce 0は許可に設定することを意味し、1は強制することを意味します。

[注意:] setenforceによるSELinuxの設定は一時的な変更であり、システムを再起動すると無効になります。したがって、永続的な変更を行う場合は、SELinuxのメイン設定ファイルを変更してください。

[root@xiaoluo ~]# setenforce 0

[root@xiaoluo ~]# getenforce

寛容な

[root@xiaoluo ~]# setenforce 1

[root@xiaoluo ~]# getenforce

施行

ls -Z コマンドを使用して、ファイルのコンテキスト情報、つまり SELinux 情報を表示できます。

[root@xiaoluo ~]# ls -Z

-rw------。ルート ルート system_u:object_r:admin_home_t:s0 anaconda-ks.cfg

drwxr-xr-x. ルート ルート unconfined_u:object_r:admin_home_t:s0 デスクトップ

-rw-r--r--+ ルート ルート system_u:object_r:admin_home_t:s0 インストール.log

-rw-r--r--。ルート ルート system_u:object_r:admin_home_t:s0 install.log.syslog

従来の ls コマンドと比較して、system_u:object_r:admin_home_t:s0 が追加されていることがわかりました。このステートメントの意味を分析してみましょう。

システムu:オブジェクトr:管理者ホームt:s0

このステートメントは 4 つのセクションに分かれています。最初のセクション system_u はユーザーを表し、2 番目のセクション object_r はロールを表し、3 番目のセクションは SELinux で最も重要な情報を表し、admin_home はタイプを表し、最後のセクション s0 は MLS と MCS に関連していますが、今のところは気にする必要はありません。

①system_u: SElinuxユーザーを指し、rootはルートアカウントのアイデンティティ、user_uは権限のない一般ユーザー、system_uはシステムプロセスを表します。アイデンティティタイプはユーザーを通じて確認でき、通常はロールと一緒に使用されます。異なるロールで使用される場合、異なる ID には異なる権限があります。su コマンドを使用してユーザーを切り替えることはできますが、SElinux ユーザーには変更はありません。アカウントを切り替えても、ユーザー ID は変更されません。ユーザー ID は、ターゲット ポリシー環境では実質的な影響はありません。

②object_r: object_r は一般的にファイルディレクトリの役割、system_r は一般的にプロセスの役割であり、対象ポリシー環境では、ユーザーの役割は一般的に system_r です。ユーザー ロールは、ユーザー グループの概念に似ています。ロールごとに ID 権限が異なります。ユーザーは複数のロールを持つことができますが、一度に使用できるロールは 1 つだけです。ターゲット ポリシー環境では、ロールは実際の効果を持ちません。ターゲット ポリシー環境では、すべてのプロセス ファイルのロールは system_r ロールです。

③admin_home: ファイルやプロセスにはタイプがあり、SElinux は関連するタイプの組み合わせに基づいてアクセス権限を制限します。

5. 例

例を通してコンテキスト値とSELinuxアクセス制御を見てみましょう

たとえば、Web サーバーを構築した場合、www サーバーのデフォルトの Web ページの保存場所は /var/www/html ディレクトリにあることがわかっています。ここで新しい index.html テスト ページを作成し、www サーバーを起動して更新すると、そのコンテンツが表示されます。この時点で、/home ディレクトリに index.html ページを作成し、それを /var/www/html ディレクトリに移動してページを更新すると、正常に表示されますか?

まず、httpd サービスを開始します。

[root@xiaoluo ~]# サービス httpd を再起動します

httpdを停止しています: [ OK ]

httpd を起動しています: httpd: apr_sockaddr_info_get() が xiaoluo で失敗しました

httpd: ServerName に 127.0.0.1 を使用しても、サーバーの完全修飾ドメイン名を確実に特定できませんでした

[ わかりました ]

次にブラウザを開き、127.0.0.1 を入力してアクセスします。現在表示されているインターフェースは Apache テスト インターフェースです。

現時点では /var/www/html の下にページがないため:

[root@xiaoluo ホーム]# ll /var/www/html/

合計 0

次に、/homeディレクトリにindex.htmlページを作成し、それを/var/www/htmlディレクトリに移動します。

[root@xiaoluo ホーム]# vi index.html

これはSELinuxに関するテストです

[root@xiaoluo ホーム]# mv index.html /var/www/html/

[root@xiaoluo html]# cd /var/www/html/

[root@xiaoluo html]# ls

インデックス.html

この時点で、通常の状況では、html ディレクトリに index.html ページがあるため、この時点でブラウザ ページを更新すると、index.html ページにジャンプするはずです。

しかし、実際には、ページはまだこのテスト ページのままであることがわかりました。なぜでしょうか?これは SELinux セキュリティ ポリシーに関連しています。/var/log/audit ディレクトリに移動して、audit.log ファイルを表示し、エラー情報を見つけることができます。

[root@xiaoluo html]# tail /var/log/audit/audit.log

type=CRED_DISP msg=audit(1369575601.957:289): ユーザー pid=3637 uid=0 auid=0 ses=44 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:setcred acct="root" exe="/usr/sbin/crond" ホスト名=? addr=? ターミナル=cron res=success'

type=USER_END msg=audit(1369575601.957:290): ユーザー pid=3637 uid=0 auid=0 ses=44 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_close acct="root" exe="/usr/sbin/crond" ホスト名=? addr=? ターミナル=cron res=success'

type=AVC msg=audit(1369575729.534:291): avc: pid=3619 comm="httpd" path="/var/www/html/index.html" dev=sda2 ino=538738 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:home_root_t:s0 tclass=file の { getattr } が拒否されました

タイプ=SYSCALL メッセージ=監査(1369575729.534:291): arch=c000003e syscall=4 成功=いいえ 終了=-13 a0=7f34198634f8 a1=7fffbc87bee0 a2=7fffbc87bee0 a3=7f341985ff60 項目=0 ppid=3612 pid=3619 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(なし) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 キー=(null)

type=AVC msg=audit(1369575729.535:292): avc: pid=3619 comm="httpd" path="/var/www/html/index.html" dev=sda2 ino=538738 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:home_root_t:s0 tclass=file の { getattr } が拒否されました

タイプ=SYSCALL メッセージ=監査(1369575729.535:292): arch=c000003e syscall=6 成功=いいえ 終了=-13 a0=7f34198635c8 a1=7fffbc87bee0 a2=7fffbc87bee0 a3=1 項目=0 ppid=3612 pid=3619 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(なし) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 キー=(null)

type=AVC msg=audit(1369575736.549:293): avc: pid=3618 comm="httpd" path="/var/www/html/index.html" dev=sda2 ino=538738 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:home_root_t:s0 tclass=file の { getattr } が拒否されました

タイプ=SYSCALL メッセージ=監査(1369575736.549:293): arch=c000003e syscall=4 成功=いいえ 終了=-13 a0=7f34198634f8 a1=7fffbc87bee0 a2=7fffbc87bee0 a3=7f341985ff60 項目=0 ppid=3612 pid=3618 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(なし) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 キー=(null)

type=AVC msg=audit(1369575736.549:294): avc: pid=3618 comm="httpd" path="/var/www/html/index.html" dev=sda2 ino=538738 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:home_root_t:s0 tclass=file の { getattr } が拒否されました

タイプ=SYSCALL メッセージ=監査(1369575736.549:294): arch=c000003e syscall=6 成功=いいえ 終了=-13 a0=7f34198635c8 a1=7fffbc87bee0 a2=7fffbc87bee0 a3=1 項目=0 ppid=3612 pid=3618 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(なし) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 キー=(null)

このログ ファイルから、更新時に index.html ページが表示されない理由は、SELinux セキュリティ ポリシーによるものであることがわかります。

ls -Z コマンドを使用して、移動したばかりの index.html のコンテキスト情報を確認してみましょう。

[root@xiaoluo html]# ls -Z

-rw-r--r--。ルート ルート unconfined_u:object_r:home_root_t:s0 index.html

3 番目のフィールドの型は home_root_t であることがわかりました。これはなぜでしょうか?この index.html ファイルは /home ディレクトリに作成したばかりなので、デフォルトで上位ディレクトリの SELinux タイプ情報を継承します。/home ディレクトリのコンテキスト情報を確認できます。

[root@xiaoluo html]# ls -Z -d /home/

drwxr-xr-x. ルート ルート system_u:object_r:home_root_t:s0 /home/

3 番目のフィールドは、先ほど見た index.html と同じであることがわかります。これは、ファイルのコンテキスト値が親ディレクトリの影響を受けることを示しています。通常、親ディレクトリのコンテキスト値を継承します。ただし、サービスのインストールによって生成される一部のファイル コンテキスト値は例外であり、親ディレクトリのコンテキスト値を継承しません。サービスは自動的にコンテキスト値を作成します。たとえば、http サービスがインストールされていない場合、/var/ ディレクトリの下に www ディレクトリはありません。httpd サービスをインストールすると、サービスは必要なディレクトリを自動的に作成し、サービスに関連するディレクトリとファイルのコンテキスト値を定義します。親ディレクトリのコンテキスト値は継承されません。

[root@xiaoluo html]# ls -Z -d /var

drwxr-xr-x. ルート ルート system_u:object_r:var_t:s0 /var

[root@xiaoluo html]# ls -Z -d /var/www/html/

drwxr-xr-x. ルート ルート system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

この時点で、/var/www/html ディレクトリのコンテキスト タイプは httpd_sys_content_t であるのに対し、移動した index.html のタイプは home_root_t であることがわかります。現時点では SELinux の動作モードが強制されているため、ポリシーに違反するアクションは禁止されています。そのため、ページを更新しても index.html の情報が表示されません。では、現時点でこの問題をどのように解決すればよいでしょうか。

通常、解決策は 2 つあります。

① SELinuxの動作モードを直接無効に設定すると、ポリシー傍受の問題は発生しませんが、この場合、システムにはSELinuxのセキュリティ保護がなくなります。

②restoreconまたはchconコマンドを使用してファイルコンテキスト情報を復元します

restorecon コマンドを使用すると、ファイルのデフォルトのコンテキストを復元できます。

restorecon -R -v /var/www/html/index.html //-R は再帰を意味します。ディレクトリの場合は、ディレクトリの下にあるすべてのサブディレクトリとファイルが復元されます。

chcon コマンドはファイルのコンテキスト情報を変更できます。通常、変更を行うには参照ファイルを使用します。

chcon --reference=/var/www/html/index.html /var/www/html/test.html

ここでは、restorecon コマンドを使用してファイルのデフォルトのコンテキストを復元します。

[root@xiaoluo html]# restorecon -v index.html

restorecon をリセットして /var/www/html/index.html コンテキスト unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 にします。

[root@xiaoluo html]# ls -Z

-rw-r--r--。ルート ルート unconfined_u:object_r:httpd_sys_content_t:s0 index.html

restorecon コマンドを使用した後、index.html のコンテキスト情報が上位ディレクトリ html のコンテキスト情報を継承していることがわかります。この時点で、ページを更新すると index.html の内容を確認できます。

この例を通して、ファイルのコンテキスト情報と SELinux の関係を理解し​​、ログ ファイル /var/log/audit/audit.log の情報を表示してエラーを見つける方法と、restorecon コマンドを使用してファイルのコンテキスト情報を修復する方法を知ります。

6. SELinux ログ管理

SELinux によってブロックされたプロセスのログ レコードは、/var/log/audit/audit.log ファイルに保存されます。ただし、このファイルの内容を読むユーザー エクスペリエンスは非常に悪いです。cat /var/log/audit/audit.log にアクセスして確認できます。そのため、システムでは、ログ ファイルの整理に役立つ sealert ツールが提供されています。sealert ツールがログ ファイルを処理するには、少し時間がかかります。しばらくお待ちください。

また、SELinux のログ機能を使用するには、auditd.service サービスを有効にする必要があります。

例 (Apache SELinux 構成) を使用して、sealert ツールについて学習しましょう。

1. このマシンでhttpdサービスが設定され、オンになっていることを確認します。

2. /usr/sbin/httpd コマンドは、/var/www/html/ ディレクトリ内の .html で終わるファイルを読み取るプロセスを開始します。次に、ホーム ディレクトリに ~/index.html ファイルを作成し、任意のコンテンツを書き込んでから、新しく作成したファイルを /var/www/html/ に移動します。

3. ブラウザを使用して、アドレスバーにローカル IP を入力し、成功したかどうかを確認します。次のインターフェイスが表示された場合、アクセスが失敗したことを意味します。

4. サービスの設定時に問題がないことを確認しました。この時点で、SELinux がアクセスをブロックしている可能性があると考えるべきです。コマンドを渡す

シーラート -a /var/log/audit/audit.log

SELinux ログを確認し、キーワード httpd を見つけます。内容を読んでください。下の図の内容が主に気になる部分です。残りは /var/log/audit/audit.log の内容なので無視してかまいません。最終的に、変更が最も少ないソリューション、つまり SELinux ラベルの変更を優先しました。

5. コマンドを実行する

復元コン -v /var/www/html/index.html

ファイルをhttpdがアクセスできるデフォルトのラベルに変更するだけです

6. ブラウザを使用して再度アクセスし、結果を表示します。今回は成功です。

上記は、Linux での SELinux の理解方法の詳細です。Linux SELinux の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • SELINUXの動作原理の詳細な説明
  • SELinux 入門
  • Linuxにおけるselinuxの基本設定チュートリアルの詳細な説明
  • Android の SELinux TE について簡単に説明します
  • Android Selinux の権限と問題の詳細な説明
  • CentOS 7 システムで SELinux が MongoDB の起動を妨げる問題の詳細な説明
  • SELinux により PHP が MySQL に異常接続する。MySQL サーバーに接続できない問題の解決方法
  • selinux(ファイアウォール)を無効にする方法

<<:  ウェブデザインにおける装飾要素の応用の概要

>>:  MySQLで偽または真を保存する方法

推薦する

MySQL トランザクション制御フローと ACID 特性

目次1. ACIDの特性トランザクション制御構文3. トランザクション同時実行例外1. ダーティリー...

MySQL 8.0 のインストール中に発生した 3 つの小さなエラーの概要

序文これまで当社ではMySQLの5.7シリーズを使用していましたが、バージョン8.0のリリースに合わ...

MySQL で行を列に変換したり、列を行に変換したりする詳細な例

mysql 行から列へ、列から行へ難しい文章ではないので、詳しく説明はしません。文章を読むときは、一...

MySQLデータベースの圧縮バージョンのインストールと設定に関する詳細なチュートリアル

目次1. MySQLをダウンロードする2. 圧縮パッケージを解凍する3. MySQLを初期化する4....

Web フォントの読み込みを最適化する方法をご存知ですか?

タイトル通りです!一般的に使用される font-family はブラウザの組み込みフォントを読み込み...

nginx ロケーション優先度の詳細な説明

場所表現タイプ~ は大文字と小文字を区別して通常の一致を実行することを示します~*は大文字と小文字を...

レスポンシブデザインについての簡単な説明

1. レスポンシブ デザインとは何ですか?レスポンシブデザインとは、ウェブサイトの開発プロセス中に、...

ElementUI コンポーネント el-dropdown (落とし穴)

選択して変更: クリックすると現在の値が表示され、ページ UI が表示され、CSS スタイルが変更さ...

IE8は優れたエクスペリエンスを提供します: アクティビティ

今日は IE8 ベータ 1 (以下、IE8 と略します) をチラ見しました。IE8 は素晴らしい体験...

UbuntuにMySQLをインストールするときにデフォルトのパスワードを変更する詳細な手順

ステップ1: ディレクトリに入ります: cd /etc/mysql、debian.cnfファイルを表...

MySQL 基本チュートリアル パート 1 MySQL5.7.18 のインストールと接続チュートリアル

この記事から、MySQL を紹介し学習するための新しい一連の記事がスタートします。なぜ MySQL ...

Vue プロジェクトを使用して複数のプロキシを構成する際の注意事項

Vue プロジェクトの開発プロセスでは、ローカル デバッグの利便性のため、通常、vue.config...

JavaScript 配列のマージのケーススタディ

方法1: var a = [1,2,3]; var b = [4,5] b を連結します。 コンソー...

Visual Studio Code + Reactをベースに開発環境を構築するプロセス

開発環境ウィンドウ開発ツール Visual Studio Codeノードのインストールとnpm Wi...

JavaScriptの動作メカニズムの詳細な説明とイベントループについての簡単な説明

目次1. JavaScript がシングルスレッドなのはなぜですか? 2. タスクキュー3. イベン...