LoginSignup
2
2

More than 1 year has passed since last update.

Linuxについて [管理者権限とユーザ•アクセス権限]

Last updated at Posted at 2021-10-17

管理者の仕事

システム管理には、ユーザの作成•削除、ユーザパスワードの設定、グループの作成や変更•削除などがある

グループとユーザ

Linuxを利用するにはユーザアカウントが必要であり、取得することでユーザがLinuxというシステムの利用権限を持つことになる
また、グループを使えば複数のユーザを束ねることができる
グループとユーザを適切に設定するとファイルやディレクトリ、任意のプログラムやシェルスクリプトなどを必要なユーザにのみ参照・編集する
権限や実行する権限を与えることができる

ユーザの作成

useradd ユーザ名

新しくユーザを作成する
ユーザには数字であるユーザIDを割り振り、ユーザは必ずグループに所属する

オプション 意味
-c コメント コメント(文字列)を指定
-g グループ名 プライマリグループ名を指定し、グループ名は/etc/groupファイルで定義したグループ名
-G グループ名 補助グループを指定
-d ホームディレクトリを指定
-s シェルを指定し、デフォルトで/bin/bashが指定されているディストリビューションが多く、ログインしないユーザはnologinを指定するなど行う
-u ユーザID番号 ユーザID番号を指定
# useradd owl
# ls /home/
owl

1行目でユーザを作成
2行目でhomeディレクトリを確認し作成されているか見る

これでユーザowlを作成

ユーザIDの指定

ユーザIDを指定するために、まずはユーザID番号1001のユーザが/etc/passwdファイルにすでに登録されていないか調べる
その後にusersグループに所属するユーザIDが1001のpenguinユーザを作り、/etc/passwdファイルにpenguinユーザが作成されたかgrepで確認

# grep 1001 /etc/passwd
# useradd -g users -u 1001 penguin
# grep penguin /etc/passwd
penguin:x:1001:100::/home/penguin:/bin/bash

1行目で当てはまる行がなければユーザIDは未登録
2行目でユーザを作成
3行目で作成されたユーザを表示

ユーザアカウントの変更

usermod ユーザ名

ユーザのアカウントを変更する

オプション 意味
-c コメント コメント(文字列)を変更
-g グループ名 プライマリグループ名を変更。グループ名は/etc/groupファイルで定義したグループ名
-G グループ名 補助グループを変更
-l 既存のユーザ名を変更
-u ユーザID番号 ユーザID番号を変更

ユーザの削除

userdel ユーザ名

ユーザを削除する

オプション 意味
-r ホームディレクトリを削除
# grep penguin /etc/passwd
penguin:x:1001:100:LPIJapan
Certification:/home/penguin:/bin/bash
# userdel penguin
# grep penguin /etc/passwd
#

1行目で登録されているpenguinユーザの情報を確認
4行目でpenguinユーザを削除
5行目でpenguinユーザの情報を確認
6行目でユーザが削除されたので表示されない

グループ

複数のユーザの権限をまとめて扱うためにグループを使う
ユーザは必ず1つ以上のグループに所属しており、主に所属するグループをプライマリグループと呼ぶ
最初から用意されているグループに加え、システム管理者が必要に応じてグループを定義することができる

グループの作成

groupadd グループ名

新しくグループを作成する
グループには数字のグループIDを割り振る

オプション 意味
-g グループID番号 グループID番号を指定
# grep 1001 /etc/group
# groupadd -g 1001 linuc
# grep linuc /etc/group
linuc:x:1001:

1行目でグループIDがすでに利用されていないことを確認
2行目で新しいlinucグループを作成
3行目で作成したグループを表示

グループの登録情報変更

groupmod [-g gid] [-n new-group-name] 変更対象のグループ

グループの定義を変更する

オプション 意味
-n 既存のグループ名を変更する場合に指定
-g 既存のグループIDを変更する100未満のグループIDはシステムで使われているため、指定できない
$ groupmod -n penguin dolphin
$ groupmod -g 777 penguin

1行目でdolphinグループをpenguinグループに名前変更
2行目でpenguinグループIDを777に変更

# grep linuc /etc/group
linuc:x:1001:
# groupmod -n linux linuc
# grep linux /etc/group
linux:x:1001:

1行目で登録されているグループの表示
2行目でグループ名の変更
3行目で変更されたグループ名の表示

グループを削除

groupdel グループ名

グループを削除する
groupdelコマンドでは登録されているグループの情報を削除する
ユーザが所属していないグループのみ削除できる

# grep 1001 /etc/group
# groupadd -g 1001 linux
# grep linux /etc/group
linux:x:1001:
# groupdel linux
#grep 1001 /etc/group
#

1行目で"1001"を鍵としてグループID1001のグループを作成するため/etc/group内を検索
2行目でグループID1001のグループlinuxを作成
3行目で作成したグループを確認
5行目でグループlinuxを削除
6行目で削除されたグループを確認
7行目ではグループが削除されたので何も表示されない

パスワードとパスワードファイル

  • グループの定義
    /etc/groupファイル(グループファイル)に記述

  • ユーザの定義
    /etc/passwdファイル(パスワードファイル)に記述

  • パスワード
    ユーザを利用するにはパスワードが必要
    /etc/shadowファイル(シャドウファイル)に暗号化されて記録
    パスワードの変更はpasswdコマンドを使っておこなう

パスワードファイル

ユーザの情報は/etc/passwdファイル(パスワードファイル)に保存され、1行に1ユーザの情報を:で区切って記述される

account:password:UID:GID:GECOS:directory:shell
項目 内容
account そのシステムでのユーザ名。大文字を含まないようにするpassword
UID ユーザID番号
GID ユーザが属するプライマリグループID番号
GECOS ユーザの名前またはコメントのフィールド
directory ユーザのホームディレクトリ
shell ログイン時に起動されるユーザのコマンドインタプリタ

多くのディストリビューションはセキュリティを考慮してシャドウファイルにパスワードを記述している

グループファイル

グループの情報は/etc/groupファイル(グループファイル)に保存され、1行に1グループの情報を:で区切って記述される

group_name:password:GID:user_list
項目 内容
group_name グループの名前
password 以前は暗号化されたグループのパスワード、またはパスワードが不要なら空欄
GID グループID番号
user_list グループに所属するユーザ名のリスト。それぞれのユーザ名はコンマで区切られる。

グループファイルはエディタで直接編集するべきではない
groupaddコマンドなどのコマンドを使って操作することが推奨されている

パスワード

ユーザ権限を使うにはユーザ名とパスワードを使って認証
パスワードの登録にはパスワードが必要なので、初めてパスワードを変換するのはシステム管理のための
rootユーザ(スーバーユーザ)である必要がある

passwd [ユーザ名]

ユーザのパスワード登録と変更ユーザのパスワードを登録したり、変更したりする

たとえばrootユーザでpenguinユーザのパスワードを変更する場合

# passwd penguin
新しいパスワード:xxxxxxxx
新しいパスワードを再入力してください:xxxxxxxx
passwd:全ての認証トークンが正しく更新できました。
# exit
CentOS release 6.3 (Final)
Kernel 2.6.32279.1.1.el6 on an i686
localhost login: penguin
Password: xxxxxxxx
Last login: Wed Jul 18 10:10:10 from 192.168.1.100
$

1行目でユーザpenguinのパスワードを変更
5行目でrootユーザをログアウト
8行目でユーザ名を入力
9行目でパスワードを入力
10行目ではユーザログインに成功するとプロンプトが表示されている

シャドウファイル

ユーザのパスワードはパスワードファイルではなく、シャドウファイル(/etc/shadow)に保存される

account:password:last_changed:may_be_changed:must_be_changed:warned:expires:disabled:reserved
項目 内容
account ユーザ名
password 暗号化されたパスワード
last_changed 1970年1月1日から、最後にパスワードが変更された日までの日数
may_be_changed パスワードが変更可能となるまでの日数must_be_changed
warned パスワード有効期限が来る前に、ユーザが警告を受ける日数
expires パスワード有効期限が過ぎ、アカウントが使用不能になるまでの日数
disabled 1970年1月1日からアカウントが使用不能になる日までの日数(Linuxシステムが基準としている時間である)
reserved 予約フィールド

用意されているユーザとグループ

Linuxはインストールしてすぐに利用できるように、ユーザとそのユーザが所属するグループが用意されている
ユーザやグループは必要に応じて複数追加可能

一般のユーザとグループ

アカウントを作成するとユーザ名と同様の名前のグループが作られ、ユーザグループに所属している、とシステムに登録される
個別のユーザを所属部署などの単位でグループ化することが可能で、システム上にあるディレクトリのアクセス権を設定し、特定のグループに属したユーザのみアクセスできるディレクトリを作成したり、特定グループに属しているユーザのみrootユーザになることが可能となる

rootユーザ

システム設定の変更や、プログラムのインストールや削除、ユーザを作成・削除する事ができ、利用に制限がなし
また、アクセス権に関係なくすべてのユーザのディレクトリへのアクセス、コンテンツの読み書きが行なえる

suコマンド

suコマンドはすでに別のユーザでログインしているユーザが、一時的に他のユーザになるためのコマンド
カレントディレクトリをrootのホームディレクトリに変更してログインするにはsu-、もしくはsu-rootと実行することでカレントディレクトリを変更した上でrootユーザでログインできる
複数人でLinuxシステムを管理している場合、rootユーザで直接ログインすると、rootユーザとしての履歴だけが残り、誰がどんな作業をしたのかの履歴が残らない
一般ユーザからrootユーザへ切り替えると、rootユーザで作業を開始した時間などはすぐにわかる

su - [ユーザ]

オプション 意味
su - (もしくはsu - root) rootユーザになることができる
su - user 指定ユーザになることができる

ユーザからrootユーザになる

$ cat /var/log/messages
cat: /var/log/messages: 許可がありません
$ su -

パスワード:xxxxxx
# cat /var/log/messages
Mar 20 08:51:46 localhost syslogd 1.4.1:restart.
Mar 20 08:51:46 localhost kernel: klogd 1.4.1, log source =
/proc/kmsg started.
(略)

3行目でrootユーザへ移行

ユーザ権限では見られないログファイルをroot権限になると閲覧できるようになる

rootユーザでコマンドを実行するsudoコマンド

sudoコマンドを使えば、スーパーユーザ(root)権限でコマンドを実行可能
CentOSでは初期設定のままではsudoコマンドは利用できないので、使うにはユーザをwheelグループというスーパーユーザ(root)特権を持つグループに登録する必要がある
sudoの設定は/etc/sudoersファイルを編集することでユーザがsudoコマンドを利用できるようになる
/etc/sudoersファイルはvisudoコマンドを実行すると編集できる

sudo

スーパーユーザ(root)権限でコマンドを実行

オプション 意味
-u ユーザ 指定したユーザでコマンドを実行

sudoを使いたいpenguinユーザをwheelグループの所属にし、visudoコマンドで/etc/sudoersファイルを編集してwheelグループの定義を有効にする

$ visudo
visudo: /etc/sudoers: Permission denied
visudo: /etc/sudoers: Permission denied
# su-
パスワード:xxxxxx
# usermod -G wheel penguin
# vigr
wheel:x:10:root
↓
wheel:x:10:root,penguin
# visudo
# %wheel             ALL=(ALL)     ALL
↓
  %wheel             ALL=(ALL)     ALL
# su - penguin
$ sudo visudo
[sudo] password for penguin:xxxxxx

1行目でユーザpenguinでvisudoを実行
2、3行目では管理権限を持たないユーザではvisudoを実行できていない
5行目でsuコマンドにより管理者権限を使ってwheelグループにユーザpenguinを追加
6行目でwheelグループにユーザ追加されたか確認
9行目でwheelグループを有効に設定
15行目ではrootユーザがsuするときは、パスワード入力不要
16行目ではユーザpenguinは管理グループに所属するユーザなのでvisudoを実行可能
17行目でコマンドを実行するユーザのパスワードを入力する

%wheel             ALL=(ALL)     ALL

/etc/sudoersファイルにあるこのオプションを有効にすると、wheelグループに所属するユーザがsudoコマンドを実行した場合、パスワードを聞かれることなくコマンドを実行できるようになる
この設定はデフォルトでは無効化されている

ユーザ権限とアクセス権限

ファイルの所有者と所有グループ

ファイル作成者のユーザIDとグループIDがファイルの所有者と所有グループとなる

chown ユーザ[.グループ] ディレクトリとchown ユーザ[.グループ] ファイル

ファイルの所有者を変更する
ユーザとグループを変更するには、rootユーザである必要があるが、ディレクトリとファイルは区別なく変更可能
ユーザとグループの区切りに:を使うことも可能

オプション 意味
-R ディレクトリを対象に、ディレクトリの中のディレクトリやファイルを再帰的にたどって変更する
$ touch user
$ ls -l user
-rw-r--r-- 1 penguin linuc 0 2月 9 12:39 user
$ chown nobody user
chown: `users' の所有権を変更中: 許可されていない操作です
$ su
パスワード:xxxxxxxx
# chown nobody user
# ls -l user
-rw-r--r-- 1 nobody linuc 0 2月 9 12:39 user

1行目でファイルを作成
2行目でファイルの所有者と所有グループを表示
3行目で現在の所有者がpenguinで所有グループがlinuc
4行目で一般ユーザでファイルの所有者を変更
5行目で一般ユーザで変更不可エラーが表示される
6行目でrootユーザへ移行
7行目でrootユーザのパスワード入力
8行目でnobodyユーザへ所有者を変更
10行目で変更後の所有者を表示

所有グループの変更

chgrp グループ ディレクトリと chgrp グループ ファイル

オプション 意味
-R ディレクトリを対象に、ディレクトリの中のディレクトリやファイルを再帰的に変更

ファイルの所有グループを変更する

$ touch groups
$ ls -l groups
-rw-r--r-- 1 penguin linuc 0 2月 9 12:39 groups
$ chgrp nobody groups
chgrp: changing group of `groups': 許可されていない操作です
$ su
パスワード: xxxxxxxx
# chgrp nobody groups
# ls -l groups
-rw-r--r-- 1 penguin nobody 0 2月 9 12:39 groups

1行目でファイルを作成
2行目でファイルの所有グループを表示
3行目で現在の所有グループを表示
4行目で一般ユーザでファイルの所有グループを変更
5行目で一般ユーザで権限の変更が不可であるとエラー表示されている
6行目でrootユーザへ移行
7行目でrootユーザのパスワード入力
8行目でnobodyグループへ所有グループを変更
10行目で変更後の所有グループを表示

ファイルとアクセス権

ファイルは
* ファイルを所有するユーザ
* ファイル所有グループからファイル所有者を除いたユーザ
* その他のユーザ

この3つのレベルで権限を設定できる

ファイルに設定できるアクセス

ファイルにはユーザで分けた3つのレベルごとに読み、書き、実行の3つの権限があり、
lsコマンドにlオプションを付けて表示される1つ目のカラムがファイルのモードを示している

d(ファイル種別) rwx(所有ユーザ) rwx(所有グループ) rwx(その他)

項目 内容
r 読み込み
w 書き込み
x 実行またはディレクトリ

rwxは、ユーザとグループとその他の3つに対して指定できる

$ ls -l .bashrc
-rw-r--r-- 1 penguin linux 124 2月 6 02:44 .bashrc
$ ls -l /usr
合計272
drwxr-xr-x   3 root root  4096  2月  6 01:45 X11R6
drwxr-xr-x   2 root root  4096  2月  8 13:07 arc
drwxr-xr-x   2 root root 69632  2月  9 04:02 bin
drwxr-xr-x   2 root root  4096  3月 30  2007 etc
drwxr-xr-x   2 root root  4096  3月 30  2007 games
drwxr-xr-x  84 root root 12288  2月  6 02:04 include
drwxr-xr-x   6 root root  4096 11月 11 11:39 kerberos
drwxr-xr-x 108 root root 69632  2月  7 11:41 lib
drwxr-xr-x  13 root root  4096  2月  9 04:02 libexec
drwxr-xr-x  11 root root  4096  2月  6 01:43 local
drwxr-xr-x   2 root root 16384  2月  7 11:41 sbin
drwxr-xr-x 226 root root 12288  2月  6 02:05 share
drwxr-xr-x   5 root root  4096  2月  6 08:52 src
lrwxrwxrwx   1 root root    10  2月  6 01:43 tmp -> ../var/tmp

2行目ではファイルのモードを示しており、所有者が読み書き,所有グループが読み,その他が読みとなっている

/usrディレクトリ以下のディレクトリは全てのユーザが読み込み可能で所有者(root)が書き込み可能となっている

アクセス権の変更

ファイルのモードを所有ユーザ、所有グループとそれ以外のユーザについてファイルのアクセス権を設定する

chmod モード[,モード]... ディレクトリ

chmod モード[,モード]... ファイル

chmod 8進数表記のモード ディレクトリ

chmod 8進数表記のモード ファイル

このようにモード指定の書き方は次の2通りある

  • モードの書式を複数書き、カンマで区切って指定
  • 8進数3桁で各ユーザのレベルを指定
オプション 意味
-R ディレクトリを対象に、ディレクトリの中のディレクトリを再帰的に(ディレクトリの中のディレクトリがあれば、中のディレクトリを全てたどって)変更する

ファイルモードの変更

$ touch chownfile
$ chmod u+rw-x,go+r-wx chownfile
$ ls -l chownfile
-rw-r--r-- 1 penguin linuc 124 3月 27 19:09  chownfile
$ chmod g+w chownfile
$ ls -l chownfile
-rw-rw-r-- 1 penguin linuc 124 3月 27 19:09  chownfile
$ chmod u-r,o+w chownfile
$ ls -l chownfile
--wrw-rw- 1 penguin linuc 124 3月 27 19:09  chownfile

1行目でファイルを作成
2行目でファイルモードを「rw-r--r--」に変更
4行目でファイルモードを表示
5行目でグループにw(書き込み権限)を追加
7行目でファイルモードを表示
8行目でユーザからr(読み込み権限)を除去、その他にw(書き込み権限)を追加
9行目でファイルモードを表示

モード
* u(所有ユーザ)
* g(所有グループ)
* o(その他のユーザ)

に対して、r(読み)、w(書き)、x(実行またはディレクトリの変更)を

  • 設定したり(=)
  • 加えたり(+)
  • 取り消したり(-)
  • 全てに同じ権限を指定する(a)

たとえば
* -rw-r--r--をrw-rw-r--としたい場合は、グループのw(書き込み権限)を加えたいのでg+w
* -rw-rw-r--を--w-rw-rw-としたい場合は、ユーザのr(読み込み権限)を取り除き、その他のw(書き込み権限)を加えたいのでu-r,o+w

など

ファイルモードを8進数で変更

$ touch chownfile
$ chmod u+rw-x,go+r-wx chownfile
$ ls -l chownfile
-rw-r--r-- 1 penguin linuc 124 3月 27 19:09  chownfile
$ chmod 664 chownfile
$ ls -l chownfile
-rw-rw-r-- 1 penguin linuc 124 3月 27 19:09 chownfile
$ chmod 266 chownfile
$ ls -l chownfile -w-rw-rw- 1 penguin linuc 124 3月 27 19:09  chownfile
$ chmod 277 chownfile
$ ls -l chownfile
--w-rwxrwx 1 penguin linuc 124 3月 27 19:09 chownfile

1行目でファイルを作成
2行目でファイルモードを「rw-r--r--」に変更
5行目でファイルモードを表示
6行目でファイルモードを664に変更
7行目でファイルモードを表示
8行目でファイルモードを266に変更
9行目でファイルモードを表示
10行目でファイルモードを277に変更
12行目でファイルモードを表示

スクリーンショット 2021-10-19 0.05.06.png

表を見ると、たとえば

  • -rw-rw-r--としたい場合は8進数の664を指定(ユーザ=6、グループ=6、その他=4)
  • --w-rw-rw-としたい場合は8進数の266を指定(ユーザ=2、グループ=2、その他=6)
  • --w-rwxrwxとしたい場合は8進数の277を指定(ユーザ=2、グループ=7、その他=7)

つまり合計値の部分を取り出して指定すればいい

モードの指定

setuidビットとsetgidビット

それぞれファイル所有者あるいは所有グループの権限で実行される
具体的に、rootユーザ所有でsetuidビットがセットされたプログラムは、一般ユーザが実行した場合でもrootユーザが実行した場合と同じ動作をする

sticky(スティッキー)ビット

これがその他のユーザについている場合、ディレクトリ内のファイルは所有者以外が削除できなくなる

Linuxでは、

  • ファイルについてのスティッキービットは無視される
  • 一般的に/tmpディレクトリにスティッキービットが付与されている
$ touch idbitfile
$ chmod u+rw-x,go+r-wx idbitfile
$ ls -l idbitfile
-rw-r--r-- 1 penguin linuc 03月 28 07:58  idbitfile
$ chmod u+s idbitfile
$ ls -l idbitfile
-rwSr--r-- 1 penguin linuc 03月 28 07:58  idbitfile
$ chmod u-s,g+s idbitfile
$ ls -l idbitfile
-rw-r-Sr-- 1 penguin linuc 03月 28 07:58  idbitfile
$ chmod +t idbitfile
$ ls -l idbitfile
-rw-r-Sr-T 1 penguin linuc 03月 28 07:58  idbitfile

1行目でファイルを作成
2行目でファイルモードを「rw-r--r--」に変更
4行目でファイルモードを表示
5行目でsetuidビットを追加
7行目でファイルモードを表示
8行目でsetuidビットを除去、setgidビットを追加
10行目でファイルモードを表示
11行目でsticky(スティッキー)ビットを追加
13行目でファイルモードを表示

ファイル作成のモード

umask [8進数のモードのマスク]

ファイルを新規作成すると、644、もしくは664といったパーミッションが設定されてファイルが作成されるが、umaskコマンドを使うことで、指定したパーミッションでファイルを作成するように制限できる

umaskコマンドに続けてマスク値を指定しなかった場合は現在のマスク値を表示できる

マスク値の変更

umaskコマンドで指定するマスク値は、すべてのユーザが読み書きできるパーミッション666から、設定したいパーミッションを引き算することでマスク値を求める

たとえば設定したいパーミッションが644なら

666 - 644 = 022

この022がマスク値ということ

$ umask -S
u=rwx,g=rx,o=rx
$ touch umask0022
$ umask -S u=rw,g=,o=rw
u=rw,g=,o=rw
$ touch umask 0070
$ ls -l umask00*
-rw-r--r-- 1 penguin linuc 03月 22 13:49 umask0022
-rw----rw- 1 penguin linuc 03月 22 13:50 umask0070

2行目で現在のマスク値を表示
3行目でファイルを作成
5行目でマスク値を070に変更
6行目でファイルを作成
9行目で作成したファイルのモードを確認
設定したパーミッションは644(666 - 022)と606(666 - 070)

-Sオプションを付けると、モードを表示または設定するとき、8進数ではなく意味がわかりやすい形式を使用できる

umaskコマンドによるモードの制限は、umaskコマンドを実行したシェル内でしか有効ではない

参考書籍

『Linux標準教科書 v3.0.2』 LPI-Japan 2019年

2
2
0

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
2