Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

UNIX(Linux)
入門編

  1. UNIX(Linux)とは
  2. ディストリビューションとは
  3. CentOSとMacOSとCUIについて
  4. 仮想化ソフトウェアを使ったCentOSのインストールとMacOSのCUI環境について
  5. ログインとrootユーザーとシャットダウン等について
  6. コマンドの構造と注意点について
  7. ファイルシステムとカレントディレクトリの移動と表示(cdとpwd)について
  8. 各主要ディレクトリの解説とディレクトリ等の内容表示(ls)について
  9. ちょっと高度なディレクトリの移動(cd)とパスについて
  10. 『ls』コマンドの応用(1)とドットファイルについて
  11. 『ls』コマンドの応用(2)
  12. タブキーを使った入力補完について
  13. ディレクトリの作成方法(mkdir)について
  14. ファイルの簡易作成(touch)とファイルについて
  15. 標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて
  1. ファイルとディレクトリの削除(rm)について
  2. ファイルとディレクトリのコピー(cp)について
  3. ファイルとディレクトリの移動と名前変更(mv)について
  4. viエディタとは
  5. viの基本的な使い方(1)
  6. viの基本的な使い方(2)
  7. ターミナル(sshとTera Term)を使ったリモート操作について
  8. ソフトウェアのインストール方法(yumとパッケージ管理ツール)について
  9. ユーザーの概要と確認と追加と切り替え(adduserとsu)について
  10. ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について
  11. グループの概要と確認方法(groups)について
  12. グループの追加と削除と設定変更(groupaddとgroupdelとgroupmod)とユーザー追加方法について
  13. パーミッション(権限)について
  14. パーミッションの設定方法(chmodとchown)について
  1. トップページ
  2. UNIX(Linux)入門編 - ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について

ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について

みなさまどーも。

続きましてユーザーのパスワードとかユーザーの設定変更とか削除方法とか管理者権限を持った状態でのコマンド実行とかについてやっていきましょう。

前回の記事では新規ユーザー『test』くんを作成したはいいものの「パスワードが分からんぜー問題」が発生していましたね。最初にこれについて確認していきます。

これはOSによって若干違う部分なのですが『adduser』コマンドでユーザーを作成すると初期の状態ではアカウントロックがかけられていたり、パスワードが見えないところで設定されていたりと大体ログインができない状態になっています。

じゃあどうするのかというとパスワードを設定できる『passwd』が用意されているのでこれを使ってしまえばOKです。

これについてなんですが「『adduser』コマンドを使ったらその後に必ず『passwd』コマンドも使う!」って覚えておくと良いかもしれません。

OSによっては『adduser』コマンドで同時にパスワードも設定出来ちゃったりする事もあるのですがCentOSの場合は別にコマンドを叩く必要がありますのでここはちょっとご注意ですね。

では早速試してみましょう。

前回の記事で『test』くんを作ったのでその『test』くんのパスワードを変更してみます。『passwd』コマンドは第一引数にパスワードを変更したいユーザー名を記述すればOKなので今回は『passwd test』って感じになりますね。

[root@localhost ~]# passwd test

これを実行すると以下のように

[root@localhost ~]# passwd test
Changing password for user test.
New password:

「新しいパスワードを入力してくれよん」って言われるので入力します。

んでこのときに「『test』くんのパスワードは『test』にするぜ!」みたいに推測されやすいパスワードを設定しようとするとこうやって

[root@localhost ~]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: it is too short
BAD PASSWORD: is too simple
Retype new password:

「パスワードがみじかい!」とか「パスワードがたんじゅん!」とか色々と怒られちゃうのである程度しっかりしたパスワードを設定するようにしましょう。

ただCentOSの初期状態では短いパスワードとかを入力しても怒られるだけで実はそのまま登録できてしまったりします。なので「面倒くさいから短いパスワードが良いぜ!」って方はそのまま無理やり登録してしまってもOKですのでこの辺はお好みでどうぞ。もちろん一般公開するサーバーとかだと単純なパスワードは危険以外の何物でもないのでちゃんと設定しておくのがオススメでございますね。

(´-`).。oO(ちなみに一般公開するサーバーでのログインでは公開鍵というものを使うのが超おすすめでございます...)

(´-`).。oO(もし商用目的で当記事を読んでいるのであれば公開鍵についても軽く調べてみるとよいかもですね...)

んでパスワードを1度入力したあとに「Retype new password」とかって言われたらこれは「確認のために今入力したパスワードをもう一回入力してちょ!」っていうよくあるあれなので同じパスワードを入力してしまえばOKです。

ちゃんと同じパスワードが入力されたら「passwd: all authentication updated successfully.」なんて文章が出てくるのでこれが出てくれば設定は完了です。

そしたらちゃんとログインできるか試してみましょう。今現在は『root』さんなので一旦『test』くんに『su』コマンドで変身します。

[root@localhost ~]# su test
[test@localhost root]$

『root』さんから一般ユーザーである『test』くんに変身した場合はパスワードを尋ねられる事無く変身できてしまうのでこれだけだと確認は出来ません。なのでこの状態でもう一度『su test』って打ち込みましょう。すると以下のようにパスワードが聞かれますので

[root@localhost ~]# su test
[test@localhost root]$ su test
Password: 

先程設定したパスワードを入力してログインできれば確認はOKです。

[root@localhost ~]# su test
[test@localhost root]$ su test
Password: 
[test@localhost root]$

パスワード設定時のルールは『/etc/login.defs』というテキストファイルに書かれていますのでこれをviか何かで編集してしまえばルールを変更する事が可能です。

CentOSの初期状態の『/etc/login.defs』を『cat』コマンドで出力してみるとこんな感じになっていますね。

[root@localhost ~]# cat /etc/login.defs
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#

# *REQUIRED*
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
#   QMAIL_DIR is for Qmail
#
#QMAIL_DIR	Maildir
MAIL_DIR	/var/spool/mail
#MAIL_FILE	.mail

# Password aging controls:
#
#	PASS_MAX_DAYS	Maximum number of days a password may be used.
#	PASS_MIN_DAYS	Minimum number of days allowed between password changes.
#	PASS_MIN_LEN	Minimum acceptable password length.
#	PASS_WARN_AGE	Number of days warning given before a password expires.
#
PASS_MAX_DAYS	99999
PASS_MIN_DAYS	0
PASS_MIN_LEN	5
PASS_WARN_AGE	7

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN			  500
UID_MAX			60000

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN			  500
GID_MAX			60000

#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD	/usr/sbin/userdel_local

#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME	yes

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK           077

# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes

# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512

こんな感じで注釈が書いてありますので読んだ通りに記述を変更してしまえばOKです。英語が苦手だぜーって方はgoogle先生に聞いたり翻訳に突っ込だりしちゃいましょう。

ちなみにこのパスワード設定ルールは『パスワードポリシー』なんて呼ばれますのでもっと深いところまで知りたくなったらGoogle先生に「CentOS パスワードポリシー」みたいに聞いてみると幸せになれるかもしれません。

では続いてユーザー設定を変更するコマンド、『usermod』くんを使ってみましょう。この『usermod』くんは色々な設定が変更出来るのですが今回はユーザー名を変更してみますね。ユーザー名を変更するには『-l』オプションを付けて第一引数に変更後のユーザー名、第二引数に変更対象とする現在のユーザー名を入力する形になるので『test』くんを『test1』くんに変更するとなると以下のコマンドを叩けばOKです。

[root@localhost ~]# usermod -l test1 test

ちょっと注意点なのですが『usermod』くんは管理者権限を持った『root』さんとかじゃないと実行出来ないのでそこは気を付けて下さい。多分ほぼ全てのUNIX系OSでそういう感じになっているはずです。

さて変更が完了したらちょいと確認をしてみます。確認するには『su test1』って打ってみれば良いだけなので以下のようにちゃんとユーザーが変更できれば確認はOKです。

[root@localhost ~]# su test1
[test1@localhost root]$

ここでちょっと注意点なのですがUNIX系のOSって各ユーザーごとにホームディレクトリが設定されていますよね。ユーザー名の変更を行う前は『test』って名前だったので『/home/test』が用意されておるわけで『ls』コマンドで確認してみるとこんな感じです。

[test1@localhost root]$ ls /home
test

んでもって今現在は『test』ってユーザーの名前を『test1』に変更しただけなのでホームディレクトリは『test』だったときの設定をそのまま引き継いで『/home/test』になっています。

この状態だとユーザー名とホームディレクトリ名が一致してない形になってしまって「このホームディレクトリは誰のホームディレクトリだったけか?(´・ω・`)」ってなってしまいがちなので特別な理由がない限りは以下のコマンドを叩いたりして揃えて置いたほうが良いかもでございます。

[root@localhost ~]# mv /home/test /home/test1
[root@localhost ~]# ls /home
test1

ちなみにホームディレクトリの名前変更も『root』さんみたいな管理者権限を持っているユーザーさんじゃないと出来ないようになっているのでそこは気を付けて下さい。

んで無事ホームディレクトリ名は変更出来たのですが実はまだ甘いのでございます。この状態で『su - test1』を実行するとこうなります。

[root@localhost ~]# su - test1
su: warning: cannot change directory to /home/test: No such file or directory.
-bash-4.1$

なんだか変なことになっちゃってますね。

これは「No such file or directory.」って事なので「そんなファイルもディレクトリもないぞよ」って怒られたわけなのですがなぜこんな事が起こるのかというと『test1』くんのホームディレクトリの設定が原因です。

『test1』くんの元になっている『test』くんのホームディレクトリは『/home/test』になっています。繰り返しになりますが先程ユーザー名だけを『test』から『test1』に変更した感じなのでホームディレクトリは元々の『test』くんの設定がそのまま引き継がれている、つまり『/home/test』を『/home/test1』に変更しちゃったので『/home/test』が見つからなくなっちゃったんですね。

『su』に『-』オプションを付けて実行しているのでログインと同時にホームディレクトリに移動するって流れになるのですがホームディレクトリに指定されたディレクトリが見つからなくてディレクトリに移動するって事が出来なかったわけです。

なのでホームディレクトリの設定を変更する必要が出てきます。実はそれも『usermod』くんを使えば出来るので『-d』オプションを付けて第一引数にはホームディレクトリのパス、第二引数には対象とするユーザー名を渡してあげて下さい。こんな感じですね。

[root@localhost ~]# usermod -d /home/test1 test1

これでホームディレクトリの変更はOKです。試しに『su - test1』を打って更に『pwd』を打ってみると

[root@localhost ~]# su - test1
[test1@localhost ~]$ pwd
/home/test1

バッチリですね。こんな感じで「ユーザー名を変更したときはホームディレクトリ名も変更するべき」ってなんとなーくでも覚えておくと良いかもです。

今回紹介した以前のホームディレクトリの名前を変えてその後に現在のホームディレクトリの設定も変えるっていう手順なのですが実は『usermod』に『-md』オプションを付けつつ実行する事でホームディレクトリの名前変更と設定変更が一発で出来ちゃったりします。

『-md』オプションの使い方は『-d』の時と同じく第一引数にホームディレクトリのパス、第二引数に対象とするユーザー名を記述すればOKです。

以下は『test』くんを『test1』くんというユーザー名に変更して更に『usermod』の『-md』オプションを使ってユーザー名とホームディレクトリ名をそろえたサンプルになります。

[root@localhost ~]# usermod -l test1 test
[root@localhost ~]# usermod -md /home/test1 test1
[root@localhost ~]# su - test1
[test1@localhost ~]$ pwd
/home/test1
[test1@localhost ~]$

この『-md』オプションはなかなか便利なので機会があれば使ってみて下さい。

続いてユーザーの削除方法についてです。これは『userdel』くんというコマンドが居ますのでこれを使ってしまえばOKです。こちらも管理者権限を持ったユーザーじゃないと実行できないのでご注意ですね。

そして使い方は第一引数に削除したいユーザー名を指定すればOKなので『test1』くんを削除したい場合は以下のように打ち込んでしまえばOKです。

[root@localhost ~]# userdel test1

んで『userdel』くんのオプションについてなのですが何もオプションを付けないで『userdel』を実行した場合はホームディレクトリの削除などは行われません。なので上記の場合ですと『/home/test1』が残ってしまっている形ですね。

もしホームディレクトリも削除したいぜーって感じだったら『-r』オプションを付けてしまえばホームディレクトリも一緒に消してくれます。

[root@localhost ~]# userdel -r test1

ただ削除したユーザーのホームディレクトリに重要なデータが残っているという場合もかなり多いので長年使ってる商用サーバーとかでユーザーを削除する場合は『-r』は付けないほうが良いかもしれませんね。

著者も少しおっかない感じあるので『-r』を付けてユーザーを削除する事はせずちゃんとホームディレクトリの中身を確認してから手動で削除するようにすることが多いです。まあこの辺は好みになりますが参考にして頂けると幸いでございます。

そして最後に他の一般ユーザーや管理者権限を持つユーザーになりすました状態でコマンドを実行出来る『sudo』くんについてです。これはとってもよく使うかなりの重要項目になりまして、一番使われるのが「一般ユーザーで管理者権限を付与した状態でコマンドを実行出来る機能」になります。他の一般ユーザーになりすました状態でコマンドを実行するってのはあまり使われない感じかなって思います。

例えばPCの再起動は『reboot』を打てばOKなのですがこれって『root』さんとかじゃないと実行できないですよね。でも『sudo reboot』といったように実行したいコマンドの前に『sudo 』を置くと管理者権限が付与されるので一般ユーザーでもそのまま実行できるといった感じになります。

そしてこの『sudo』の文法なのですが『sudo コマンド名』ってするとスーパーユーザーとして実行、『sudo -u ユーザー名 コマンド名』ってするとその指定したユーザーでコマンドを叩く感じになります。まあ『-u』はほぼ使わないのでなんとなーくで覚えておくくらいでOKです。

んでこの『sudo』は全ての一般ユーザーが使えるコマンドではなく『sudo』が使えるように許可されたユーザーでしか使う事が出来ません。なのでその設定を最初に行う必要がありますのでそこは忘れないように気を付けましょう。

というわけでその設定変更を試してみましょう。まず『sudo』まわりに関する設定はテキストファイルである『/etc/sudoers』に書いてあったりするのでそれを編集すればOKなのですがその編集する際のコマンドは『vi』とかではなく『visudo』を使用するのが一般的です。

『visudo』は『vi』とかと違って編集中はファイルにロックをかけてくれたり、軽い文法チェックを行ってくれるのでこちらを使った方が色々と安心なわけでございます。『/etc/sudoers』をバグらせるとかなりややこしい事になるので著者的にも推薦ですね。

んで『visudo』コマンドは『visudo /etc/sudoers』みたいに引数を指定する必要はなく、ただ『visudo』と叩けば『/etc/sudoers』を開いてくれます。こんな感じですね。

[root@localhost ~]# visudo

そして以下のような状態になるのですが

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem

..... 以下省略

これ、エディタは『vi』が使われてますのでいつもの『vi』を操作する感じで編集すればOKです。CentOSとか大体のOSは『vi』が起動するようになっていますがOSによっては違うエディタになっちゃったりするのでそこはちょっとご注意でございます。

そしてこの中から

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

なんて書かれた部分を探してみて下さい。多分下の方にあるはずで、上記の「root ALL=(ALL) ALL」って部分が権限の設定部分になりますね。

これの意味なのですが最初の『root』って部分が該当ユーザー名になります。例えば『test』くんに『sudo』権限を与えたいならここを『test』にすればOKです。

んで次の『All=(ALL)』って部分の左側の『ALL』がホスト、つまりホスト名とかIPアドレスとかネットワークアドレスとかを入力する感じになりましてよく分からんぜーって方も多いかもですがここは基本的に全てを許可する『ALL』でOKでございますね。

その右側の『()』の中の『ALL』が「誰になりすますことが出来るか」という設定になり、例えばここを『test』にすると『test』くんにのみになりすます事が出来るという感じになります。まあこちらも『ALL』で全て許可しちゃうパターンが多めになりますね。

んで最後の『ALL』なのですがこれは許可するコマンドに関する設定になります。例えばここを『/bin/pwd』にすると『pwd』のみがそのなりすましたユーザーで実行できる、といった形ですね。複数指定したい場合は『,』で区切る形になり、例えば『/bin/pwd, /bin/ls』とすると『pwd』コマンドと『ls』コマンドのみを許可した事になります。以下がサンプルになりますね。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       /bin/ls, /bin/pwd

ちなみに必要であるならば引数も固定することができますのでこちらもなんとなーくで覚えておきましょう。以下は『/bin/cat』コマンドの場合は『/etc/passwd』を引数に取った時でしか実行出来ないぜーっていう設定をしてる感じですね。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       /bin/ls, /bin/pwd, /bin/cat /etc/passwd

ここでちょいと注意点なのですが『/bin/ls, /bin/pwd』を『ls, pwd』ってやるのはNGです。『visudo』の場合は実行ファイルの置き場所を絶対パスで正確に指定する必要があるのでこれだと「文法が変だよー!」って怒られちゃいますのでご注意ですね。

ちょっとややこしいのですが『ls』とか『pwd』とかパスを書かずに実行できるコマンド達はエイリアスというショートカット的なものが内部的に設定されているので『ls』とか『pwd』とかって叩くだけでコマンドが使えてる感じになっています。なので『visudo』に記述する場合は『/bin/ls』とか『/bin/pwd』とかって正確に書いてあげないといけません。

んで「実行ファイルってどこに居るんだぜ?」って思った方いらっしゃると思いますのでその場合は『which』くんを使いましょう。このコマンドを使うと対象とするコマンドの実行ファイルの場所を教えてくれます。使い方は『which コマンド名』になり、『ls』の場合だと以下になりますね。

[root@localhost ~]# which ls
alias ls='ls --color=auto'
	/bin/ls

こんな感じで『/bin/ls』が実行ファイルの場所だよーって教えてくれます。『which』コマンドは色々と使う場面が多いですのでバシッと覚えておくようにして下さい。

では続きとなりますが早速『visudo』を叩いて頂きまして以下のように追記して保存しちゃって下さい。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       /bin/ls, /bin/pwd, /bin/cat /etc/passwd

そしたら『test』くんになってみましょう。

[root@localhost ~]# su test
[test@localhost root]$

そして『sudo ls』と叩いてみると

[test@localhost root]$ sudo ls
[sudo] password for test:

パスワードが聞かれましたね。こんな感じで『sudo』を使うときはパスワードが聞かれます。ここで注意点なのですがこのパスワードは『root』さんとかスーパーユーザーのパスワードではなく現在使用している『test』くんのパスワードになります。ここ間違いやすいので要注意ですね。

んでパスワードを入力するとこのように

[test@localhost root]$ sudo ls
[sudo] password for test:
test.txt
[test@localhost root]$

『ls』が実行できていますね。『pwd』も使えるように設定しているのでもちろんそちらもOKです。ちなみにパスワードを一度入力するとしばらくの間はパスワード無しで『sudo』が実行出来る感じになりますね。以下は『sudo』を叩いてるにもかかわらずパスワードが聞かれていません。

[test@localhost root]$ sudo pwd
/root
[test@localhost root]$

そして次に『vi』を使ってみましょう。『vi』は使えるように設定していないので叩いてみると

[test@localhost root]$ sudo vi test.txt
Sorry, user test is not allowed to execute '/bin/vi test.txt' as root on localhost.localdomain.
[test@localhost root]$

「許可されてないから使えないよー」ってなってますね。

続いて『cat /etc/passwd』はOKですが

[test@localhost root]$ sudo cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
test:x:500:500::/home/test:/bin/bash

『cat /etc/group』は使えません。引数が違うからですね。

[test@localhost root]$ sudo cat /etc/group
Sorry, user test is not allowed to execute '/bin/cat /etc/group' as root on localhost.localdomain.

というわけでユーザーの削除とか設定変更とか『sudo』については以上になります。ちょっとややこしいかもですが一連の流れさえ覚えておけば後は必要になったら調べるくらいのノリでOKなのでもし暗記出来なくても気にせず次に進んでしまいましょう。

次の記事ではグループについて諸々確認していきますね、ではではこの辺で失礼致します。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。