はじめに
Linuxでは基本的にrootユーザーを開発時などで使う事はしない(理由については【完全初心者向け】Linuxのrootユーザとは?など色々な所に書かれているのでそちらを参照)。
なのに、しばらくrootユーザーでうっかり勉強のための開発を進めてしまったので、新規でユーザーを作成した後、それらの所有者・グループの変更までやってみたのでその備忘録を残す。
やった事としては、以下の2つ。
- ユーザーの新規作成
- rootユーザーで作業した=rootユーザーが所有するディレクトリ・ファイルの所有者を新規作成したユーザーに変更
ユーザーを作成する
useraddコマンドとpasswdコマンドでできる。実際に作成すると以下のようになる(各コマンドのオプションについては参考に示しているものや、各リンクを参照)。
[root@localhost home]# sudo useradd -c "study user" -d /home/study -s /bin/bash study
[root@localhost home]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
study:x:1001:1001:study user:/home/study:/bin/bash
[root@localhost home]# sudo passwd study
ユーザー study のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[root@localhost home]# ls
study
あとは、一度仮想マシンを落として作成したユーザー(今回だとstudy
)でログインすれば、そのユーザーが使えるようになる。
後の事を考えてstudyでもSSHでログインできるようにする
詳細はssh接続を公開鍵・暗号鍵方式に変更するを参照。
rootの方で行った環境構築の内、条件によっては新しく作成したユーザーでもやる必要がある
/usr/bin
以下にバイナリがあるものはユーザーが切り替わっても実行できる(dockerのようにsudoが必要になるものもあるが)。gitやdockerはそれに該当する。しかし、筆者はnodeについてはnodebrewでインストールしたため、$HOME
以下に~/.nodebrew
がありnodeもその中で使えるような設定をしていたので、新しく作成したユーザーでもインストールをする必要があった。
というわけでnodeを新規で作成したユーザーでもインストールするが、その作業内容についてはここでは割愛する(実際の手順を参照したい方はNode/npm/yarnなどを参照)。
※ちなみに、実際に/usr/bin
以下にgitやdockerがある事を確認してみると、確かに存在する事が分かる
[study@localhost bin]$ ls | grep git
git
git-receive-pack
git-shell
git-upload-archive
git-upload-pack
[study@localhost bin]$ ls | grep docker
docker
docker-compose
docker-init
docker-proxy
dockerd
dockerd-rootless-setuptool.sh
dockerd-rootless.sh
rootlesskit-docker-proxy
※Linuxの/bin
や/usr/bin
については各ディレクトリの役割を知ろう(サブディレクトリ編)などを参照。
※実際のインストール手順のようなものはCentOSに開発に必要そうなものを一式インストールする
を参照。
既存のファイルの所有者・グループを変更する
今回はしばらくrootユーザーで色々作業してしまった場合に、そのファイルの所有者・グループを変える方法を見ていく。
やる事としては、
- 既存のroot以下のディレクトリ・ファイルを
home/{user_name}/
以下にコピーする - 所有者・グループを書き換える
の2つのみ。
[root@localhost ~]# cp -r ./workspace/ /home/study/
[study@localhost workspace]$ ls -al
...
drwxr-xr-x. 10 root root 4096 4月 28 08:55 node-express
[study@localhost workspace]$ sudo chown -R study:study ./node-express/
[study@localhost workspace]$ ls -al
...
drwxr-xr-x. 10 study study 4096 4月 28 08:55 node-express
※この時、dockerによって作成されたディレクトリ(MySQLサーバーをdocker-composeで立ち上げた際に、volumeで指定したディレクトリ)はどうなるのか?だが、所有者がrootではなくpolkitd
だったため、特に所有者・グループが変わる事はなかった。
[study@localhost node-express]$ tree . -I node_modules
.
...
├── data
│ └── mysql
...
[study@localhost data]$ ls -al
...
drwxr-xr-x. 6 polkitd root 4096 4月 28 08:56 mysql
まとめ
今回は間違えてrootユーザーで色々作業をしちゃった後に、新規でユーザーを作成して、そのユーザーで作業ができるようになるまでをやってみた。最初からrootユーザーで作業しないようにするのが一番なので気をつけたい。。。
おまけ
トラブルシューティング
{user_name} is not in the sudoers file({user_name} は sudoers ファイル内にありません。)
ユーザーを単に作成しただけではsudo
を付けたコマンドは実行できない。
これは指摘の通り、sudoersという設定ファイル(/etc/sudoers.tmp
)にsudoを実行しようとしたユーザーが登録されていないのでエラーになっている。やる事としてはrootユーザーでvisudo
コマンドを実行してファイルを書き換えればいい。
[study@localhost .ssh]$ su -
パスワード:
最終ログイン: 2022/04/27 (水) 09:10:29 JST日時 pts/2
[root@localhost ~]# visudo
[root@localhost ~]# exit
ログアウト
...
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
study ALL=(ALL) ALL ## <- ここに追記
## Same thing without a password
...
こうするとsudoを実行できるようになる。
[study@localhost .ssh]$ sudo pwd
[sudo] study のパスワード:
/home/study/.ssh
※ちなみに、毎回パスワードを入力するのが面倒であれば、
study ALL=(ALL) NOPASSWD: ALL
のようにNOPASSWD
オプションを付ければいい。