1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Linux】間違ってrootユーザーで作業した後、ユーザーを切り替えた話

Last updated at Posted at 2022-04-28

はじめに

Linuxでは基本的にrootユーザーを開発時などで使う事はしない(理由については【完全初心者向け】Linuxのrootユーザとは?など色々な所に書かれているのでそちらを参照)。

なのに、しばらくrootユーザーでうっかり勉強のための開発を進めてしまったので、新規でユーザーを作成した後、それらの所有者・グループの変更までやってみたのでその備忘録を残す。

やった事としては、以下の2つ。

  1. ユーザーの新規作成
  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ユーザーで色々作業してしまった場合に、そのファイルの所有者・グループを変える方法を見ていく。

やる事としては、

  1. 既存のroot以下のディレクトリ・ファイルをhome/{user_name}/以下にコピーする
  2. 所有者・グループを書き換える

の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を付けたコマンドは実行できない。
image.png

これは指摘の通り、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
ログアウト
/etc/sudoers.tmp
...
## 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オプションを付ければいい。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?