Yanonoblog!

こつこつと

ファイルの各権限の見方・操作・sudoについて

はじめに

多少は実践的にLinux使えるようになりたいと思い書籍「新しいLinuxの教科書」を読み進めています。

本記事では「新しいLinuxの教科書」で学んだ内容と別途気になって調べた内容や知識も含めアウトプットしていきます。

前回の記事の続きとなっております。

【エンジニア必読】コマンドのalias設定

ファイルのオーナーとグループ

Linuxにおいて、ファイルには所有者とグループという概念があります。

自身で作成したファイルからシステムが提供するライブラリや実行コマンドまで、すべてに所有者が設定されています。

ファイルのオーナー(所有者)

ls -lコマンド - ファイルオーナーの確認

lsコマンドに-lオプションをつけることでファイルのオーナーを含む詳細を確認することができます。

以下はcatコマンドのファイルのオーナーを見ています。

# 実行
~/w/gig ❯❯❯ ls -l /bin/cat

# 結果
-rwxr-xr-x  1 root  wheel   148K  7 14  2022 /bin/cat*

この例でいうとrootファイルのオーナーで、wheelがファイルが所属するグループ名になります。

グループ

グループとは、ユーザをまとめた集まりを指します。

システム管理を行うwheelというグループに複数の管理者ユーザを所属させ、wheelグループに対して許可を与えることで、同じ役割を持つ複数のユーザに同一の権限を与えることができます。

下記のファイルは所有者がroot、グループがwheel、パーミッションがrwxr-xr-xとなっておりますが

仮に自分のユーザー名がuserだとした場合、読み込み・実行の権限はありますが、書き込みの権限はありません。

-rwxr-xr-x 1 root wheel 148K 7 14 2022 /bin/cat*

もしwheelというグループにuserが追加された場合は、ファイルの所有者がwheelグループに所属している場合は、そのグループに所属するユーザーにはファイルの読み書き権限が与えられる可能性があります。

ただし、ファイルのパーミッション設定によっては、wheelグループに所属するユーザーにも書き込み権限が付与されない場合があります。

  • 所有者は、ファイルを所有するユーザーを指し、UID(ユーザーID)によって識別される
  • グループは、ファイルを所有するユーザーのグループを指し、GID(グループID)によって識別される
  • 所有者やグループには、ファイルへのアクセス権限を制御する役割がある。
  • ユーザー名を確認するコマンド - whoami

    rootユーザーであるか確認するには、以下のコマンドを実行します。

    whoami

    もしくは、以下のコマンドを実行します。

    id -u

    もし結果が0であれば、現在のユーザーはrootユーザーであることを意味します。

    上記のコマンドは、現在ログインしているLinuxユーザーのUID(User ID)を表示するためのものです。

    ファイルのパーミッション

    1つ1つのファイルには「誰に、どのような操作を許可するか」という権限を規定する情報パーミッションが設定されています。

    下記の出力しているファイルは所有者がroot、グループがwheel、パーミッションrwxr-xr-xとなっております。

    -rwxr-xr-x 1 root wheel 148K 7 14 2022 /bin/cat*

    以下は各タイプのパーミッションの例です。

    # 実行
    ~/w/整/linux_test ❯❯❯ ls -l
    
    # 結果
    -rw-r--r--  2 yano  staff   0  4 11 09:06 link # シンボリックリンク
    drwxr-xr-x  2 yano  staff  64  4 11 09:07 test/ # ディレクトリ
    -rw-r--r--  2 yano  staff   0  4 11 09:06 test.txt # ファイル

    ディレクトリは頭文字がdとなります。書籍にはシンボリックリンク**l**になると記載ありましたが私の環境では通常ファイルと同様に**-**となっておりました。

    先頭の1文字はファイルタイプを表し、ファイルタイプの後ろの9文字は3文字ごとのブロックになっており、それぞれが「オーナー」、「グループ」、「その他のユーザ」に対するパーミッションになります。

    パーミッション 読み取り(r) 書き込み(w) 実行(x)
    r
    w
    x
    rw-
    r-x
    -wx
    rwx

    ディレクトリのパーミッション

    ファイルと同様に、ディレクトリにもパーミッションが設定されています。

    -ldオプションをつけることで確認ができます。

    # 実行
    ~/w/整/linux_test ❯❯❯ ls -ld test
    
    # 結果
    drwxr-xr-x  2 yano  staff  64  4 11 09:07 test/

    d rwx r-x r-x 意味は若干ファイルの時とことなります。

    パーミッション 意味
    r ファイルの読み込みが可能
    w ファイルへの書き込みが可能
    x ファイルを実行可能にする
    --- 全てのアクセスを拒否
    --x 実行のみ許可
    -w- 書き込みのみ許可
    -wx 書き込みと実行のみ許可
    r-- 読み込みのみ許可
    r-x 読み込みと実行のみ許可
    rw- 読み込みと書き込みのみ許可
    rwx 全てのアクセスを許可

    chmodコマンド - パーミッションの変更

    chmodはファイルやディレクトリのパーミッション(アクセス権限)を変更するためのコマンドです。

    chmodコマンド - 基本構文

    基本的な使い方は、以下のようになります。

    chmod [オプション] モード ファイル名

    モードは、パーミッションを表す数値または記号のいずれかで指定します。

    数値で指定する場合は、r(読み込み権限)、w(書き込み権限)、x(実行権限)のそれぞれに対応する値を3桁の数値で表現します。たとえば、読み込み権限のみを設定する場合は、以下のように指定します。

    chmod 400 ファイル名

    400というのは読み込み権限の数値である4を3桁で表したものになります。

    他の数値や解説は以下になります。

    数値 記号 パーミッション
    0 --- なし
    1 --x 実行のみ
    2 -w- 書き込みのみ
    3 -wx 書き込み・実行
    4 r-- 読み取りのみ
    5 r-x 読み取り・実行
    6 rw- 読み取り・書き込み
    7 rwx 読み取り・書き込み・実行

    記号を使って指定する場合は、以下のようになります。

    記号 意味
    u ファイル所有者(user)
    g ファイル所有者のグループ(group)
    o その他のユーザー(others)
    a すべてのユーザー(all)
    + 権限を追加する
    - 権限を削除する
    = 権限を指定したものに置き換える

    読み込み権限を持っているグループを追加する場合は、chmod g+r ファイル名のように指定します。

    また、読み込み権限を持っているグループから書き込み権限を削除する場合は、chmod g-w ファイル名のように指定します。

    以下はtest.txtテキストファイルの書き込み権限を削除する例です。

    # 実行 (権限を確認)
    ~/w/整/linux_test ❯❯❯ ls -l
    
    # 結果 (-rw-なのでディレクトリの読み書きと実行権限があることがわかる)
    -rw-r--r--  2 yanokouhei  staff   0  4 11 09:06 test.txt
    
    # 実行 (書き込み権限を削除)
    ~/w/整/linux_test ❯❯❯ chmod u-w test.txt
    
    # 実行 (再度権限を確認)
    ~/w/整/linux_test ❯❯❯ ls -l
    
    # 実行 (-r--なので書き込み権限のwが削除されていることがわかる)
    -r--r--r--  2 yanokouhei  staff   0  4 11 09:06 test.txt
    
    # 実行 (echoコマンドで実際に書き込み)
    ~/w/整/linux_test ❯❯❯ echo 書き込みテスト >> test.txt
    
    # 結果 (パーミッションエラーを確認)
    zsh: permission denied: test.txt

    スーパーユーザ

    Linuxにおいて全ての権限を持つ最高管理者のことを指します。

    スーパーユーザーはrootと呼ばれることが多く、一般ユーザーとは異なり、システム全体に対して操作を行うことができます。

    スーパーユーザーとしてログインすることで、パスワードの変更、システムの設定変更、ファイルやディレクトリの作成・削除など、通常のユーザーではできない操作を行うことができます。

    また、全ての操作が許可されているため、誤った操作や不用意な操作によってシステムが壊れる可能性があります。

    スーパーユーザーの権限を持ったrootでの作業は、必要最低限にとどめることが望ましいです。また、root権限で作業する際は、確認を怠らず、慎重に作業を行うようにする必要があります。

    suコマンド - 一時的にユーザを変更する

    suコマンドは、別のユーザーに切り替えるためのコマンドです。"su"は "switch user" の略です。

    一般的に、suコマンドはrootユーザーに切り替えるために使われます。

    suコマンドを使用するためには、ターミナルで以下のように入力します。

    su [ユーザー名]

    このコマンドを実行すると、パスワードの入力を求められます。

    rootユーザーに切り替える場合、パスワードを求められる前に以下のように入力します。

    su -

    また、suコマンドは、切り替え先のユーザー名を指定しない場合、デフォルトでrootユーザーに切り替わります。

    用途

    suコマンドは、以下のような用途に使われます。

    • rootユーザーで特定の操作を実行する必要がある場合。
    • 他のユーザーに切り替えて、ファイルの編集やプログラムの実行などを行う場合。

    終了するには以下のコマンドを実行します。

    exit

    sudoコマンド - 管理者として実行する

    スーパーユーザー権限でコマンドを実行するためのコマンドです。

    rootユーザーのパスワードを知らなくても、sudoコマンドを使用することで、スーパーユーザー権限でコマンドを実行できます。

    sudoコマンドの基本的な使い方は、次のようになります。

    sudo command

    用途

    管理者権限が必要なタスクを行うときに使用されます。

    例えば、システムの設定を変更する、システムのログを監視する、ファイルやディレクトリの所有者を変更するなどのタスクを行うときに使用できます。

    最初の説明にもありましたがsusudoコマンドを使用する場合には注意点してください。

  • スーパーユーザー権限で実行するコマンドは慎重に選択する
  • rootでの作業は、必要最低限にとどめる
  • コマンドを実行する前に、システムの状態を確認し、不要な操作を避ける
  • 続く…

    コメント

    本記事の内容は以上になります!

    書籍の続きのアウトプットも随時更新したいと思います。


    プログラミングスクールのご紹介 (卒業生より)**

    お世話になったプログラミングスクールであるRUNTEQです♪

    https://runteq.jp/r/ohtFwbjW

    こちらのリンクを経由すると1万円引きになります。

    RUNTEQを通じて開発学習の末、受託開発企業をご紹介いただき、現在も双方とご縁があります。

    もし、興味がありましたらお気軽にコメントか、TwitterのDMでお声掛けください。

    https://twitter.com/outputky

    参考