LoginSignup
2
0

More than 1 year has passed since last update.

"The Linux Command Line" 輪読会「9 -- Permissions」レジュメ

Last updated at Posted at 2022-09-08

この記事は、現在会社で行われている輪読会における、筆者の発表担当箇所の要旨をまとめたものです。
輪読会の対象書籍は下記の通りです。

William Shotts (2019) "The Linux Command Line"

本記事では、上記書籍の中の "Part I Chapter 9 -- Permissions" を筆者がまとめた要旨と筆者の感想を記述します。

9 -- Permissions

Owners, Group Members, and Everybody Else

  • Unixシステムはマルチユーザシステム
  • 例えばfile /etc/shadowと入力すると、「権限がない」と怒られる
    • これは自分のユーザに読み込み権限がないため
  • idと入力すると、自分のuser ID (uid)やgroup ID (gid)を見ることができる
  • ユーザアカウントは/etc/passwdに定義されている
  • グループは/etc/groupに定義されている
  • モダンなLinuxは慣習的に、ユニークでメンバー1人のグループをユーザ名と同じ名前で作成する。
    • こうすることで、特定の権限の付与が簡単になる

Reading, Writing, and Executing

  • ファイルやディレクトリへのアクセス権限は3種類
    • read
    • write
    • execution
  • ls -lコマンドで、アクセス権限が分かる。
    • -rw-rw-r--のような10文字でファイル属性(file attributes)が出てくる。

最初の1文字はファイルタイプ(file type

属性 ファイルタイプ
- 普通のファイル
d ディレクトリ
l シンボリックリンク。
ファイル属性は常にrwxrwxrwxになる。
実際の属性はそれが指す実態に従う。
c キャラクタ型のスペシャルファイル
character special file)。
データをバイトストリームとして
扱うデバイス。
e.g. ターミナルや/dev/null
b ブロック型のスペシャルファイル
block special file)。
データをブロックとして扱うデバイス。
e.g. HDDやDVD。

残りの9文字はファイルモード(file mode

  • ファイルオーナー(file owner)、グループオーナー(group owner)、その他誰でも(world)の別にread, write, executeを表す
オーナー グループ その他
rwx rwx rwx
属性 ファイル ディレクトリ
r 開いて読める xがセットされていれば中身を表示できる
w 書き込んだり切り取ったりできる
削除したりリネームしたりできるかはディレクトリの属性による
xがセットされていれば、中にファイルを作成したり削除したりリネームしたりできる
x プログラムとして実行できる。
スクリプトファイルを実行するにはrもセットされている必要がある
ディレクトリの中に進入できる
e.g. cd directory

chmod -- Change File mode

  • ファイルモードや権限を変えるには、chmodを使う
  • ファイルオーナーかスーパーユーザーのみが使用できる
  • 先ほどのrwxのシンボルか、8進数が使える
8進数 2進数 モード
0 000 ---
1 001 --x
2 010 -w-
3 011 -wx
4 100 r--
5 101 r-x
6 110 rw-
7 111 rwx
  • e.g. chmod 600 foo.txtとすると、
    foo.txt-rw-------になる
  • chmodは「誰に適用するか」をu, g, o, aというシンボルで表すことができる
シンボル 意味
u ファイルオーナー(user)
g グループオーナー(group owner)
o その他(others)
a 上記全て(all)
  • 省略すると、a(全て)が指定されたとみなされる
  • +は権限の追加を表す
  • -は権限の剥奪を表す
  • =はその権限が適用され、それ以外は剥奪されることを表す
意味
u+x ファイルオーナーに実行権限を付与
u-x ファイルオーナーから実行権限を剥奪
+x 全員に実行権限を付与(=a+x
o-rw オーナー・グループオーナー以外から読み書き権限を剥奪
go=rw ファイルオーナー以外を読み書き権限に設定
u+x,go=rx ファイルオーナーに実行権限を付与、それ以外は読み込み・実行権限に設定

umask -- Set Default Permissions

  • umaskコマンドはデフォルトのパーミッションを設定するコマンド
  • デフォルト値はたいてい0002もしくは0022
  • オリジナルのファイルモード(--- rw- rw- rw-)からマスクしてデフォルトのパーミッションを決める
  • 最初の0は今は置いておく(後で説明する)と、後の3桁がそれぞれファイルオーナー・グループオーナー・その他に対応する
オリジナル --- rw- rw- rw-
マスク(0022) 000 000 010 010
結果 --- rw- r-- r--
  • 大抵の場合、デフォルトのマスクから変えることはないよ
  • 高いセキュリティが求められる状況では変えたいことがあるかも

Some Special Permissions

  • 最初の1桁目はあまり使わない権限の設定に使う

  • setuid bit (4000)

    • 実行ファイルに適用することで、実際に実行した人ではなくプログラムのオーナー(大抵はスーパーユーザー)のユーザIDで実行される
  • setgid bit (2000)

    • setuidと似ているが、グループIDに対して作用する
  • sticky bit (1000)

    • 実行ファイルを「交換不可能」とする。ファイルに対しては無視される。ディレクトリに対して適用されると、中のファイルを削除できるのはファイルのオーナー、ディレクトリのオーナー、スーパーユーザーに限定される。
  • e.g. 実行ファイルprogramに対してsetuidを付与する場合: chmod u+s-rwsr-xr-x

  • ディレクトリdirにsetgidを付与する場合: chmod g+sdrwxrwsr-x

  • ディレクトリdirにsticky bitを付与する場合chmod +t dirdrwxrwxrwt

Changing Identities

  • ユーザを変更したい場合、3つの方法がある
  1. ログアウトして別のユーザでログインする
  2. suコマンドを使う
  3. sudoコマンドを使う

su -- Run a Shell with Substitute User and Group IDs

  • suは他のユーザとしてシェルを開始するコマンド
  • ユーザを省略するとスーパーユーザーとみなされる
  • -lもしくは-を付けると指定されたユーザのログインシェルを開く
  • スーパーユーザーのパスワードが要求される
  • -c 'コマンド'でコマンドを実行できる

sudo -- Execute a Command as Another User

  • sudosuと似ているが、いくつか重要な機能が追加されている
  • /etc/sudoersという設定ファイルで使えるユーザとコマンドを設定できる
  • sudoは使用に際してスーパーユーザーのパスワードを要求せず、ユーザ自身のパスワードを使用する
  • -lで付与される権限の一覧を確認できる

Ubuntu and sudo

  • Windowsでは一般ユーザに管理者権限を付与するやり方が取られる→危ない
  • Unixでは慣習的に、管理者ユーザと一般ユーザを分けるやり方を取っていた
  • しかし、surootになって作業することが常習化した→危ない
  • Ubuntuはrootへのログインを無効にし、代わりにsudoでスーパーユーザーに昇格できるようにした

chown -- Change File Owner and Group

  • chownコマンドはファイルやディレクトリのオーナーやグループオーナーを変更するコマンド
  • chown [オーナー][:[グループ]] ファイルで指定する

chgrp -- Change Group Ownership

  • 古いUnixではchownコマンドではグループオーナーを変えられなかったので、chgrpコマンドを使ったよ

Changing Your Password

  • passwdコマンドでパスワードを変更できる
  • このコマンドは「強力な」パスワードを設定するように強制してくる
    • 短かったり以前のパスワードと似ていたり安易に推測可能なパスワードは拒否される
  • スーパーユーザー権限があれば、引数にユーザ名を指定することで他のユーザのパスワードを設定できる

Summing Up

  • Linuxが基にしているUnixの権限システムは、大昔のUnix初期に考えられたものだよ
  • モダンなシステムにはちょっと粒度に欠けるところもあるよ

Furser Readling

感想とか

  • 今回はファイルのアクセス権やユーザー、管理者権限まわりの話で、比較的普段から目にするものであり親しみやすかった。
  • umaskでデフォルトのパーミッションを変えられる」や、「susudoの違いとその歴史的経緯」といった自分が知らなかった話も色々出てきたので勉強になった。
    • "Ubuntu and sudo"のコラムでは特にUbuntuでsuの代わりにsudoが使われるようになった歴史的経緯が明快に説明されていると同時に、さりげなくWindowsがボロクソに言われていて笑った。
  • ユーザーやグループを追加するコマンドuseraddaddusergroupaddが最後に「こんなコマンドもあるよ」という紹介の数行で済まされていたのが惜しかった。特に自分のような読者は「useraddadduserって何が違うの?」となってしまった。
  • Linuxコマンド全般に言えることであるが、コマンドは声に出して発音するときに何と読めばいいのか分からないことが多い。
    • 勉強会終了後、「sudoコマンドの発音は?」という記事を教えていただいた。
    • この記事によれば「スードゥー」もしくは「スードー」が正しい読み方らしい。須藤さんじゃなかったんですね
2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0