未経験からのフルスタックエンジニア

スキルをつけよう!未経験からフリーランスエンジニアへの成長記録

Linux学習履歴(5)~ユーザー管理・権限管理~

以下の記事の続きです

atora1992.hatenablog.com

Linuxコマンドライン入門』が日ごとに6日間分別れているので、今回は5日目の内容についてです。

コマンドの備忘録的になってしまうと思いますので、悪しからず。

5日目

ユーザー管理

Who am I?

LinuxなどのUNIX系OSはマルチユーザーシステムです。つまり、同時に複数のユーザーが使用することを前提としたOSです。よって、ユーザー管理を適切に行う必要があります。

ユーザーには大きく分けて以下の2つがあります。

  • スーパーユーザー:全ての権限をもつ。ルートユーザーともいう
  • 一般ユーザー:スーパーユーザー以外のユーザー

そして、ユーザー一人単位だけでなく、グループ単位でも権限が設定できます。

自分のユーザー名、所属するグループ名を確認するには以下のコマンドを実行します。

$ whoami  #自分のユーザー名を確認
$ groups  #所属するグループ名を確認

所属するグループ名を確認した時に先頭に表示されるグループは、プライマリグループと呼ばれます。最近のLInuxでは、初期状態でプライマリグループはユーザー名と同じ名前のグループ(プライベートグループ)らしいです(自分は確認時点で違いました)。プライベートグループはグループ名のユーザーしか属していないグループです。

上記のコマンド実行結果は英数字で表示されたかと思いますが、システム内部ではそれぞれユーザーID、グループIDで管理されます。このIDを確認するコマンドが下記のコマンドです。

$ id

#結果の具体例
uid = 500(ATORA) gid = 500(ATORA) groups = 500(ATORA), ...

コマンド実行結果は左から順に、「ユーザーID、プライマリグループのID、全てのグループのID」となっています。

別のユーザーになる

ターミナル・エミュレータ内で一時的に別のユーザーになることが可能です

$ su [ユーザー名]  #Switch Userの略

$ exit  #元のユーザーに戻る

ユーザー名はあらかじめ登録されている必要があります。また、そのユーザーのパスワードを知っている必要があります。

ただし、上記のコマンドの場合、ユーザー名(ユーザーID)は変わりますが、ホームディレクトリなどの環境は変わりません。環境も含めて移行するにはハイフンを追加します。

$ su - [ユーザー名]

上記コマンドでユーザー名を入力しなければスーパーユーザーになれます。ただし、スーパーユーザーのパスワード入力が必要です。(macでは初期でスーパーユーザーは設定されていないので https://support.apple.com/ja-jp/HT204012の内容を確認して設定してみてください)

この方法では、一時的であってもスーパーユーザーになってしまい、元のユーザーに戻ることを忘れたままにすると危険です。そこで、スーパーユーザーの権限が必要なコマンドをより安全に実行する方法として、以下のコマンドがあります。

$ sudo [コマンド名]

このコマンドでもパスワードを聞かれますが、そこで入力するのは自分のパスワードです。スーパーユーザーのパスワードではないことに注意してください。

ファイル・ディレクトリの権限

全てのファイル・ディレクトリにはその所有者と所有グループが決められています。また、ファイル・ディレクトリのアクセス権は「所有者」「所有グループ」「その他のユーザ」という単位で設定できます。

コマンドで権限を確認するには以下の方法が簡単です。

$ ls -l

実行結果の例
drwxrwxr-x 10 ATORA staff 3000 8 8 10:00 Documents 

初めの英字の羅列(先頭の1文字はファイルの形式を表しています。この場合はディレクトリです)がアクセス権を表し、"ATORA staff"が所有者・所有グループを表しています。

まず簡単な方から説明すると、"ATORA staff"の前者が「所有者」、後者が「所有グループです」

アクセス権は9文字の英字で表されています。先頭から3文字ずつがセットで、順に「所有者」「所有グループ」「その他のユーザー」のアクセス権を表しています。つまり、所有者のアクセス権=rwx、所有グループのアクセス権=rwx、その他のユーザーのアクセス権=r-xとなります。それぞれの英字には以下の意味があります。

要素 説明
r 読み出し
w 書き換え
x 実行
- 不許可

よって、上記の例では「所有者」「所有グループ」は全て許可されており、「その他のユーザー」だけ書き換えができないということになります。

ファイルのアクセス権

ファイルの「実行」とは、そのファイルをコマンドとして実行できることを意味しています。なので、ls自体のアクセス権を見ると、全てに対して実行が許可されています。

$ ls -l /bin/ls
-rwxr-xr-x ...

アクセス権を変更するには記号または数値で指定する方法があります(まずは記号で指定する方法)。

$ chmod [利用者を表す記号] [オペレーター] [アクセス権] [ファイルのパス]  #チェンジモード

利用者を表す記号

記号 説明
u 所有者
g 所有グループ
o その他のユーザー
a 全て

オペレーター

記号 説明
+ 許可を与える
- 許可を取り消す
= 元の設定をクリアして、新たに設定する

具体例

$ chmod a+w [ファイルのパス]  #全てのユーザーに書き換えを許可する
$ chmod ug-rw [ファイルのパス]  #所有者と所有グループの読み出しと書き換えを不許可にする
$ chmod a=r [ファイルのパス]  #全てのユーザーに読み出しのみを許可する 

※所属するグループに許可されていても、所有者に許可されていない場合は、所有者はアクセス権がないことになります
※アクセス権を変更できるのは、所有者かスーパーユーザーの権限が必要です。

ファイルの書き換えを不許可にした場合でも、削除・移動ができてしまいます。ファイルの削除・移動をできなくするには、ディレクトリの権限を変える必要があります。

ディレクトリのアクセス権

ディレクトリのアクセス権は、ファイルのアクセス権と意味合いがちょっと違います。

要素 説明
r(読み出し) ディレクトリ内のファイル一覧を表示できる
w(書き換え) ディレクトリ内にファイルを作成・名前の変更・移動が可能
x(実行) ディレクトリの下に進める
読み出し不許可

読み出しが不許可の場合でも、そのディレクトリにファイルを作成できますし、ディレクトリに進むこともできます。

書き換え不許可

書き換えが不許可というのは、ディレクトリに格納されているファイルの一覧を変更できなくするということです。よって、書き換え不許可のディレクトリでファイルを作成することはもちろん、ディレクトリに属しているファイルの削除や移動もできません。

ディレクトリもディレクトリファイルであることを考えれば、ファイルの変更が効かない=ディレクトリのファイル構成(直下にあるもの)をいじれないということがわかるかと思います。

ただし、ディレクトリに属するファイルを他のディレクトリにコピーしたり、内容を表示することは可能です。

実行不許可

実行不許可の場合、cdでそのディレクトリ、さらにはサブディレクトリにも移動できません。また、findによる検索もできなくなります。

数値でのアクセス権設定

chmod [3桁の8進数] [ファイルのパス]
8進数への変換
  1. 許可されていれば「1」、不許可なら「0」とします
  2. 記号でのアクセス権の考えを元に、rwxのぞれぞれに対し許可・不許可を考え、1か0に置き換えます(e.g. rw- = 110:実行のみ不許可)
  3. 置き換えた3桁の数値が2進数です
  4. 所有者、所有グループ、その他のユーザー全てで2進数に置き換えます
  5. 2進数を8進数します(最小000=0、最大111=7)
  6. 8進数を所有者、所有グループ、その他のユーザーの順に並べます

例えばrwxrw-r-xの場合、2進数だと111110101、8進数に3桁ずつ変換すると765となります。

以下の2つのコマンドは同じ結果となります

$ chmod a=rw [ファイルのパス]
$ chmod 666 [ファイルのパス]
ディレクトリ以下をまとめてアクセス権を設定

ディレクトリ以下のアクセス権をまとめて変更するにはRオプションをつけて実行します。

$ chmod -R [利用者を表す記号] [オペレーター] [アクセス権] [ファイルのパス]
$ chmod -R [3桁の8進数] [ファイルのパス]

所有者・所有グループの変更

所有者の変更

$ chown [ユーザー名] [ファイルのパス]
※スーパーユーザーの権限が必要です

所有グループの変更

$ chgrp [グループ名] [ファイルのパス]
※ファイルの所有者かつ変更するグループに属しているか、スーパーユーザーの権限が必要です

所有者・所有グループをまとめて変更するには

$ chown [ユーザー名] : [グループ名] [ファイルのパス]

上記コマンドどちらもRオプションをつけることで、ディレクトリ以下の所有者・所有グループをまとめて変更できます。

ファイル・システム情報

ファイル情報

ファイルサイズを調べる

$ ls -l  #サイズがバイト単位で確認できる
$ ls -lh  #サイズにK(キロバイト)やM(メガバイト)といった単位がつく
$ ls -s  #サイズのみを左に表示する
※lsコマンドの出力はデフォルトでアルファベット順

$ ls -shS  #サイズの大きい順に表示
$ ls -shSr  #サイズの小さい順に表示

上記のコマンドでは、ディレクトリの合計サイズまではわかりません。そこで以下のコマンドが使えます。

$ du -k [ファイルのパス]  #キロバイト単位で表示
$ du -h [ファイルのパス]  #単位を表示

$ du -h [ディレクトリのパス]  #ディレクトリ以下のディレクトリそれぞれの合計サイズを表示
$ du -sh [ディレクトリのパス]  #指定したディレクトリ以下の合計サイズを表示
$ du -ah [ディレクトリのパス]  #ディレクトリだけでなく、ファイルのサイズも表示

上記のコマンドと他のコマンドを組み合わせることも可能です。

$ du -k ~ | sort -nr | head  #ホームディレクトリ以下の各ディレクトリサイズを調べて(du)、その数値で大きい順に並び替え(sort)、上位10個を表示する(head)
※sortコマンドで数値で並び替えをしたいので、duにhオプションを指定して単位をつけてはいけません

パーティションごとの使用状況を表示するには以下のコマンドを使用します。

$ df -h  #Size=容量、Used=使用している領域、Avail=空き領域、Use%=パーセンテージ

ファイルの種類を調べる。

$ file [ファイルのパス]

システム情報

$ uname  #OSの名前を表示
$ uname -r  #OSのバージョンを表示
$ uname -p  #プロセッサの種類を表示
$ uname -a  #全ての情報を表示

$ uptime  #稼働時間を表示(左から順に、現在時刻・システムが起動してからの経過時間・現在ログインしているユーザー数・最近1分、5分、15分間のシステムの平均負荷)

$ top  #macのメモリ使用量を1秒更新で表示(qで終了)

次の記事へ

atora1992.hatenablog.com