はじめに
Apache
をインストールし、OSがCentOS
(Linuxディストリビューション)であるサーバを一時期、運用していました。
その間に新しい仲間にサーバへのアクセス権限を与える必要がありましたが、権限に制限を設けるなど、いくらか手順を踏まなければいけなかったので、その際とった手順をまとめていきます。
手順
まずはじめに、前提として下記3点があります。
登場ユーザ
ユーザ | ユーザの種類 | |
---|---|---|
1 | root | スーパーユーザ(私) |
2 | furukawa | 管理者権限を持つユーザ(私) |
3 | takuyanin | 追加ユーザ |
流れ
- rootユーザ(私)でfurukawa(私)を作成
- furukawa(私)がtakuyanin(仲間)を作成
プロンプトの表記
コマンドコンソールだと入力を受け付けるプロンプトが、一般ユーザはシェルによってことなりますが、「$」もしくは「%」です。rootをスーパーユーザと呼びますが、スーパーユーザは「#」となります。
1. rootユーザ(私)でfurukawa(私)を作成
rootユーザは全ての操作を行うことができる一番強い権限を保持しているので、重大な問題を引き起こさないためにも極力利用しない方がいいです。
ですので、管理者の私もfurukawaというユーザを作成して操作を行うとします。
鍵を生成
$ ssh-keygen -t rsa -f id_rsa_furukawa
公開鍵をリモートサーバに送信
$ scp id_rsa_furukawa.pub root@153.122.203.7:~
リモートサーバにsshログイン
$ ssh -i ~/.ssh/id_rsa root@153.122.203.7
ユーザを追加
# adduser furukawa
ユーザが作成されたか確認
# ls -l /home
total 12
drwx------ 2 furukawa furukawa 4096 Jan 8 04:25 furukawa
作成したユーザにパスワードを設定
# passwd furukawa
New password:
作成したユーザにsudo権限を付与
sudo権限は安易にそのほかのユーザに与えてはいけません。
ここでは、furukawaが管理者(私)であるため、sudo権限を与えるとします。
下二つのコマンドどちらでも設定することができますが、visudo は文法チェックが働くので、基本はvisudo
で設定したほうが良いでしょう。。
1. visudo
# visudo
furukawa ALL=(ALL) ALL
2. vi /etc/sudoers
# vi /etc/sudoers
furukawa ALL=(ALL) ALL
ローカルから送られた鍵を作成したユーザディレクトリに配置
.sshディレクトリを作成
# mkdir /home/furukawa/.ssh
root配下の鍵をfurukawa配下へ移動
# mv ~/id_rsa_furukawa.pub /home/furukawa/.ssh
ディレクトリを移動
# cd /home/furukawa
鍵の中身を移す(ここではファイル名変更)
# mv .ssh/id_rsa_furukawa.pub .ssh/authorized_keys
公開鍵の所有者を変更
公開鍵(authorized_keys)の所有者をrootからfurukawaに変更
所有者を確認、現段階はroot
# ls -la .ssh/authorized_keys
-rw-r--r-- 1 root root 426 Jan 8 04:24 .ssh/authorized_keys
所有者をfurukawaへ変更
# chown furukawa .ssh/authorized_keys
所有者を確認、所有者はfurukawa
# ls -la .ssh/authorized_keys
-rw-r--r-- 1 furukawa root 426 Jan 8 04:25 .ssh/authorized_keys
公開鍵のグループを変更
所有者を変更するときと流れは全く同じなので、最低限必要なchgrp
コマンドのみを下記では実行しています。(確認作業は省略)
グループをfurukawaへ変更
# chgrp furukawa .ssh/authorized_keys
.sshディレクトリ(鍵保管庫)の所有者、グループを変更
公開鍵ファイルのときと何ら変わりない作業なので、実行する必要のあるコマンドのみを下記に記しています。
# chown furukawa .ssh
# chgrp furukawa .ssh
鍵ファイル、.sshディレクトリの権限を変更
# chmod 600 .ssh/authorized_keys
# chmod 700 .ssh
権限を変更するchmod
コマンドについてはこちらの記事にまとめています。
permission deniedで悩まされたので勉強してみた
また、「なぜ.ssh
ディレクトリには700の権限で、authorized_keysファイルには600の権限を与えているのか」という点に関しては、下記記事に記しています。
SSH通信でリモートサーバに接続する流れ(公開鍵認証)[Linux]
作成したユーザに切り替えるため、ログアウト
# exit
logout
Connectin to 153.122.203.7 closed
2. furukawa(私)がtakuyanin(仲間)を作成
作成したユーザでログイン
$ ssh furukawa@153.122.203.7
furukawa@153.122.203.7's password:
sudoで仲間ユーザ(とパスワード)作成
こちらのコマンドは実行してもしなくても構いません(ここでは確認のため)
$ adduser takuyanin
-bash: /usr/sbin/adduser: Permission denied
上のコマンドはPermissionで弾かれますが、sudoコマンドで通りま
す。
$ sudo adduser takuyanin
$ sudo passwd takuyanin
sudo
コマンドに必要なパスワードは「あなたのパスワード」です。
コマンド単位で「誰にどのコマンドをrootで実行させることを許可するか」を指定できます。こうすることでrootパスワードを知られることなく、必要なコマンドをroot権限で実行できるようになります。
仲間にユーザ名とパスワードを知らせる
今回の場合であれば、仲間に、
・ユーザ名:takuyanin
・パスワード: #######
を知らせ、ssh接続を試みてもらいます。
この作業に関しては、仲間にこちらの記事にしたがって、作業を進めてもらいます。
以上で安全にユーザを迎え入れることができました。
補足
ユーザを削除する
ユーザが組織から離れる時など既存ユーザを削除する必要があるときは、rオプション
つきのuserdel
コマンドで削除することができます。
rオプション
をつけることでユーザに紐づいたホームディレクトリも同時に削除することができます。
$ sudo userdel -r takuyanin
削除できたか確認
$ cat /etc/passwd
ユーザが削除されていれば成功です。
仲間に、rootユーザのみ許可されているコマンドの実行権限を与えるとき
$ visudo
.
.
takuyanin localhost=/sbin/shutdown -h now
.
上記のようにすれば、コマンド毎に実行権限を与えることができ安全です。
さいごに
きちんとユーザ管理をすることで、システム(サーバ)を安全に運用していきたいですね。
こちらの記事が役に立ったという方は、いいね、よろしくお願いします(^^)
また、takuyaninのマイページにlinuxコマンドなどに関していくつか記事をまとめてますので、よければご参考ください。