ウェブサイト検索

ulimit Linuxコマンドでユーザー制限を確認し設定する


ulimit コマンドは、Linuxで個々のユーザーが消費できるシステムリソースの量を制限するために使用されます。

ユーザーの意図であったり、単なる偶然であったり、1人のユーザーがRAMメモリやディスクスペースなどのすべての利用可能なシステムリソースを使い果たすことがあります。あなたのLinuxシステムの性質に応じて、ユーザーが実際に必要とするリソースだけに制限することを検討するかもしれません。

これは、1つのサーバーが数十のユーザーに貸し出される仮想プライベートサーバーやその他の共有ホスティング状況で一般的に行われる重要な調整です。このチュートリアルでは、例を通してLinuxでulimitコマンドの使い方を学びます。以下に従って、このコマンドで使用できるさまざまなオプションについて学びましょう。

このチュートリアルでは、あなたは学びます:

  • Linuxでulimitコマンドを使用する方法

よく使われるオプション

フォーク爆弾、yesのようなコマンド、そしてバグのあるプログラムは、非常に短時間で多数のシステムリソースを容易に消費することができます。これは、システムリソースを悪用する一人のために、システム上の他のすべてのユーザーの体験に影響を与えます(意図的であろうとそうでなかろうと)。

ulimit コマンドはこの問題への解決策です。以下のulimit の例を確認して、ユーザーのためにシステムリソースの消費を制限する方法を見てみましょう。

Linuxのulimitコマンドの基本例

知っていましたか?
以下に示すすべての制限は、現在のbashシェルセッションのみに適用されます。システム全体の使用に永久的な変更を加えるには、/etc/security/limits.conf を変更する必要があります。それについては後のセクションで説明します。

  1. ulimitコマンドを-aオプションと共に使用すると、システム上のユーザーのすべての制限のリストを見ることができます。また、単独のulimitを使用すると、簡単な概要を確認できます。

    ulimit -a
    

  2. ユーザーが生成できるプロセスの最大数を制限するには、-uオプションを使用します。このコマンドは、プロセスを10個に制限します。これによりフォークボムのような問題が解決されます。

    ulimit -u 10
    

    この制限を超えようとすると、エラーが発生します:

    bash: fork: retry: Resource temporarily unavailable
    
  3. -f オプションは、ユーザーが作成できるファイルのサイズを制限することを可能にします。このコマンドは、ユーザーを100KB以下のファイルに制限します。

    ulimit -f 100
    

    そして、もし私たちが今制限を超えようとしたら、どうなるか見てみましょう。

    cat /dev/zero > file
    File size limit exceeded (core dumped)
    ls -lh file
    -rw-rw-r--. 1 linuxconfig linuxconfig 100K Feb 21 18:27 file 
    
  4. ulimitを使用すると、プロセスが使用できる仮想メモリの最大量を制限することも可能です。これを達成するには、-vオプションを使用します。

    ulimit -v 1000
    
  5. ユーザーが同時に開くことができるファイルの数(ファイルディスクリプタ)を制限するには、-nオプションを使用します。

    ulimit -n 10
    

    この制限を超えると、次のようなエラーが表示されます:

    bash: command: Too many open files
    

今のところ、あなたは新しい種類の制限を作成するためにどのオプションでも使用できるというアイデアを持っているべきです。ulimit --help または ulimit -a を使用して、課すことができる制限の種類とそれに対応するコマンドオプションを確認してください。

注意
常に man コマンドを使用して ulimit コマンドおよびその公式ドキュメントについてさらに読むことができます。前のリンクをクリックして、Linux システム上の任意のコマンドのマニュアルページを開く方法を確認してください。

高度な使用法

これまで、私たちはulimitコマンドを使って「ソフト」制限を課してきました。これらはユーザー自身によって作成された制限で、彼らが「ハード」制限が許している範囲まで設定可能です。「ハード」制限を作成するために、/etc/security/limits.confファイルを編集します。

Linuxのulimitコマンドの高度な例

  1. ルート権限を使用して /etc/security/limits.conf ファイルを開いてください。この例では nano を使用しますが、他のテキストエディタを使用してもかまいません。

    sudo nano /etc/security/limits.conf
    
  2. このファイルの最後に、私たちはユーザーに対してシステム全体で施行されるいくつかの厳しい制限を課します。一般的な構文は次のようになります:

    [domain] [type] [item] [value]
    

    [domain] はユーザー名、グループ名、またはワイルドカードとなる可能性があります。[type] は「ソフト」または「ハード」のいずれかを指定でき、適用したい制限の種類によります。[item] は制限したい項目で、例えば「cpu」や「nproc」(プロセスの数)などです。[value] は適用したい数値です。

    この情報はすべてファイル自体に要約されていますので、忘れた場合でも安心です。

  3. 例えば、「corporate」グループのユーザーが生成できるプロセスの数に制限を設けてみましょう。この行をファイルに追加することで、そのグループのユーザーは最大10個のプロセスしか生成できなくなります。

    @corporate        hard    nproc           20
    
  4. もう一つの例として、ユーザー「linuxconfig」が使用できるファイルサイズの量を制限してみましょう。これにより、そのユーザーは10MBに制限されます。サイズはキロバイト単位で表記する必要があるため、10000と記述する必要があります。

    linuxconfig        hard    fsize           10000
    

ユーザー、グループ、またはシステム全体のすべての人に制限を設けるには、/etc/security/limits.confファイルに記載されている制限タイプのいずれかを使用してください。

締めくくりの考え

このチュートリアルでは、Linuxのulimitコマンドについてすべて学びました。ulimitコマンドは、複数のユーザーがいるシステムにとって不可欠であり、すべてのユーザーが公平に活動し、システムリソースの自分の分だけを使用することを確保するために重要です。

制限を持続させる必要がある場合は、上記に示したようにulimit設定ファイルを編集して、ユーザー、グループ、またはシステム上のすべてのアカウントに対してシステムの制限を課すことができます。

関連記事: