epiの新規ユーザ追加の作業(2010/05/21)

2010519

15:27

 

ユーザの追加は管理者の作業です.一般ユーザーはやらないでください.

 

epiクラスターはNISを使わないことにしています.基本的にアカウント情報は各ノードがローカルに持っています.どのノードも独立して稼働しています.したがってユーザーを追加する作業は,本来すべてのノードで繰り返し実行する必要があります.rshをつかったshell script等でadduserを全ノードで実行するようにしてもよいのですが,パワーオンされてないノードがあるといろいろ面倒がおこります.そこでアカウント作業は原則としてepi00で行い,/etc/passwd等をscpで他のノードにコピーするという原始的な方法をとります.

 

###私的なコメント: NISのようなマスター・スレーブじゃなくて,すべてのノードが完全対称になるようなサービスを作れば,ロバストなクラスタが容易に管理できるのになあ,と思う.少なくとも見かけ以上そうなってほしいと言うこと.Dropbox的生活になれてしまったので,どこか本拠地で管理とか面倒.ここで必要なクラスタではアカウント操作のロックとか,パワーオンしたときの同期の仕掛けをつくるのに高度な技術はいらなさそうだから,すぐにできそうな気がする.とりあえず1000ノードとか大規模なクラスタを想定してないから,スケーラビリティのことはあまり気にしなくてもいいと思う.###

 

したがって作業時は,まずepi00kanriアカウントでログインしてください.本当は他のホスト(epi01等)でも可能なのですが,人為的ミスを避けるためにアカウント作業にはepi00を使うことにします.下記の作業ではユーザーアカウント名=shimoを追加します.他の人,たとえばsuzukiを追加するなら,shimosuzukiに置き換えてください.

 

まず sudo adduser shimo を実行します.つぎのようにパスワード入力が求められます.

 

 

 

画面の領域の取り込み日時: 2010/05/19 15:34

 

 

パスワードをいれると,次は名前とかいろいろ聞かれます.Full Nameのところは,Hidetoshi Shimodairaのように入れてください.名前以外はとくに入力しなくていいです.改行をおしていってください.

 

 

画面の領域の取り込み日時: 2010/05/19 15:37

 

 

最後にもう一度改行(またはy)を押せば次にすすみます.(上の図でYが大文字なのは大文字を打てという意味ではなくて,デフォルトがyといういみですよね).もし名前とかに間違いがあったらnをおしてやりなおしてください.

 

これでepi00shimoアカウントができました.ホームディレクトリも同時に作成されています.ちょっとshimoのホームを覗いてみます.

 

 

画面の領域の取り込み日時: 2010/05/19 15:45

 

----------------------------------------------------------------------------

他のノード,たとえばepi01とかepi02にはshimoのアカウントはまだできていません.

 

ここではepi00にできたshimoアカウントをepi01epi02にコピーする説明をします./usr/local/sbinにおいてある rcp_passwd.sh, addhome.shrcp_dir.shを使います.

 

 

画面の領域の取り込み日時: 2010/05/21 14:59

 

 

rcp_passwd.shの中身は次のようになっていて,要するにpasswdファイル等を他のノードに直接コピーします.すっごく危険ですよね.本当にこれでいいのか,運用しながら確かめたいと思います.

-----------------

kanri@epi00:~$ cat /usr/local/sbin/rcp_passwd.sh

#!/bin/sh

 

echo Usage: $0 host1 host2 ...

 

dests=$*

tmp=tmppass$$.tgz

from=/tmp

 

tar cvfz $from/$tmp /etc/passwd /etc/group /etc/shadow /etc/gshadow /var/lib/samba/passdb.tdb --absolute-names

chmod og-rxw $from/$tmp

 

echo "Please remove $from/$tmp later (or keep it as a backup)"

echo "Now Copying passwd to $dests ..."

echo "Press [enter] to proceed (Press Control-C to stop)"

read aaa

 

for i in $dests ; do

echo Copying to $i

scp $from/$tmp $i:

ssh $i tar xvfz $tmp --absolute-names --backup -C /

ssh $i rm $tmp

done

 

#rm $from/$tmp

 

echo Finished

kanri@epi00:~$

 

--------------

 

 tarの行をみるとわかりますが,/etc/passwdをふくめて5個のファイルをコピーしています.当初はpassdb.tdbを忘れていて,sambaの設定がコピーされませんでした.配布用にDVDに焼いたepivmware仮想マシンに含まれるrcp_passwd.shは古いバージョンでpassdb.tdbがコピーされません.patch-20100520.tgzを適用すれば改訂版のrcp_passwd.shに置き換わります.

 

ここではepi01epi02へコピーなのでsudo rcp_passwd.sh epi01 epi02とします.

 

kanri@epi00:~$ sudo rcp_passwd.sh epi01 epi02

Usage: /usr/local/sbin/rcp_passwd.sh host1 host2 ...

/etc/passwd

/etc/group

/etc/shadow

/etc/gshadow

/var/lib/samba/passdb.tdb

Please remove /tmp/tmppass28398.tgz later (or keep it as a backup)

Now Copying passwd to epi01 epi02 ...

Press [enter] to proceed (Press Control-C to stop)

 

ここで念のため一呼吸おきます.実行してよければ改行キーをおしてください.

 

Copying to epi01

tmppass28398.tgz                              100% 2411     2.4KB/s   00:00   

/etc/passwd

Renaming `/etc/passwd' to `/etc/passwd~'

/etc/group

Renaming `/etc/group' to `/etc/group~'

/etc/shadow

Renaming `/etc/shadow' to `/etc/shadow~'

/etc/gshadow

Renaming `/etc/gshadow' to `/etc/gshadow~'

/var/lib/samba/passdb.tdb

Renaming `/var/lib/samba/passdb.tdb' to `/var/lib/samba/passdb.tdb~'

Copying to epi02

tmppass28398.tgz                              100% 2411     2.4KB/s   00:00   

/etc/passwd

Renaming `/etc/passwd' to `/etc/passwd~'

/etc/group

Renaming `/etc/group' to `/etc/group~'

/etc/shadow

Renaming `/etc/shadow' to `/etc/shadow~'

/etc/gshadow

Renaming `/etc/gshadow' to `/etc/gshadow~'

/var/lib/samba/passdb.tdb

Renaming `/var/lib/samba/passdb.tdb' to `/var/lib/samba/passdb.tdb~'

Finished

kanri@epi00:~$

 

これでepi01epi02shimoというアカウントはできました.しかしまだepi01epi02にホームディレクトリ/home/shimoができていません.

 

-----------------------------

 

次にepi01shimoのホームディレクトリを作成します.これにつかうaddhome.shをみてみます.

 

kanri@epi00:~$ cat /usr/local/sbin/addhome.sh

#!/bin/sh

 

echo "Making Home Directories for Users @ `hostname`"

 

for i in $* ; do

echo "User: $i"

dest=/home/$i

if [ -d $dest ] ; then

    echo "$dest already exists"

else

    cp -a /etc/skel /home

    mv /home/skel $dest

    chown -R $i.$i $dest

fi

done

 

echo Finished

kanri@epi00:~$

 

つまり/etc/skelを各ユーザーにコピーするだけです.すでにホームが存在すれば,なにもしません.

 

早速実行してみます.

 

kanri@epi00:~$ sudo ssh epi01 addhome.sh shimo

Making Home Directories for Users @ epi01

User: shimo

Finished

 

これでepi01:/home/shimoが作成されました.もしshimosuzukiを同時に作りたかったら,

ssh epi01 addhome.sh shimo suzuki

とすればよいです.

 

ためしにepi01にユーザーshimoでログインしてみます.

 

kanri@epi00:~$ ssh shimo@epi01

shimo@epi01's password:

Linux epi01 2.6.32-21-server #32-Ubuntu SMP Fri Apr 16 09:17:34 UTC 2010 x86_64 GNU/Linux

Ubuntu 10.04 LTS

 

Welcome to the Ubuntu Server!

 * Documentation:  http://www.ubuntu.com/server/doc

 

  System information as of Fri May 21 14:14:44 JST 2010

 

  System load: 0.0                Memory usage: 3%   Processes:       144

  Usage of /:  11.6% of 18.58GB   Swap usage:   0%   Users logged in: 1

 

  Graph this data and manage this system at https://landscape.canonical.com/

 

7 packages can be updated.

0 updates are security updates.

 

 

The programs included with the Ubuntu system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

 

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by

applicable law.

 

Last login: Fri May 21 09:26:26 2010 from kiki

shimo@epi01:~$ pwd

/home/shimo

shimo@epi01:~$ ls -la

total 24

drwxr-xr-x 3 shimo shimo 4096 2010-05-21 14:14 .

drwxr-xr-x 4 root  root  4096 2010-05-21 14:14 ..

-rw-r--r-- 1 shimo shimo  220 2010-04-19 11:15 .bash_logout

-rw-r--r-- 1 shimo shimo 3103 2010-04-19 11:15 .bashrc

drwxr-xr-x 2 shimo shimo 4096 2010-05-21 14:14 .cache

-rw-r--r-- 1 shimo shimo  675 2010-04-19 11:15 .profile

shimo@epi01:~$

 

ちゃんとできていました.

 

-----------------------------------

 

addhome.shでは空っぽのホームをつくるだけです.もしすでにいろいろ仕事をしたあとで,ホームを丸ごとコピーするにrcp_dir.shをつかいます.

 

kanri@epi00:~$ cat /usr/local/sbin/rcp_dir.sh

#!/bin/sh

 

echo Usage: $0 dir host1 host2 ...

echo Note: specify dir in full path

 

dir=$1

shift

dests=$*

tmp=tmpdir$$.tgz

from=/tmp

 

tar cvfz $from/$tmp $dir --absolute-names

chmod og-rxw $from/$tmp

 

echo "Please remove $from/$tmp later (or keep it as a backup)"

echo "Now Copying $dir to $dests ..."

echo "Press [enter] to proceed (Press Control-C to stop)"

read aaa

 

for i in $dests ; do

echo Copying to $i

scp $from/$tmp $i:

ssh $i tar xvfz $tmp --absolute-names --backup -C /

ssh $i rm $tmp

done

 

#rm $from/$tmp

 

echo Finished

kanri@epi00:~$

 

さっきのrcp_passwd.shとほとんど同じ内容です.tarで固めてからscpして,tarで展開しているだけです.

 

ここではepi00:/home/shimoepi02へコピーします.sudo rcp_dir.sh /home/shimo epi02とします.ディレクトリはかならずフルパスで指定してください.もしepi01, epi02, epi03へまとめてコピーするなら, sudo rcp_dir.sh /home/shimo epi01 epi02 epi03とすればよいです.

kanri@epi00:~$ sudo rcp_dir.sh /home/shimo epi02

Usage: /usr/local/sbin/rcp_dir.sh dir host1 host2 ...

Note: specify dir in full path

/home/shimo/

/home/shimo/.gconfd/

/home/shimo/.gconfd/saved_state

/home/shimo/sample.txt

/home/shimo/work/

/home/shimo/work/sample.txt

/home/shimo/.bash_logout

/home/shimo/work00

....いっぱいあるので省略.....

/home/shimo/test20100517/test1.ps

/home/shimo/test20100517/test2.R

/home/shimo/test20100517/test2b.Rout

/home/shimo/test20100517/test2.log

Please remove /tmp/tmpdir28479.tgz later (or keep it as a backup)

Now Copying /home/shimo to epi02 ...

Press [enter] to proceed (Press Control-C to stop)

 

ここで改行キーをおすとコピーが始まります.

 

Copying to epi02

tmpdir28479.tgz                               100%   25KB  24.6KB/s   00:00   

/home/shimo/

/home/shimo/.gconfd/

/home/shimo/.gconfd/saved_state

/home/shimo/sample.txt

/home/shimo/work/

....中略.....

home/shimo/test20100517/test2.R

/home/shimo/test20100517/test2b.Rout

/home/shimo/test20100517/test2.log

Finished

kanri@epi00:~$

 

ためしにepi02にログインして確認します.

kanri@epi00:~$ ssh shimo@epi02

shimo@epi02's password:

Linux epi02 2.6.32-21-server #32-Ubuntu SMP Fri Apr 16 09:17:34 UTC 2010 x86_64 GNU/Linux

Ubuntu 10.04 LTS

...中略....

7 packages can be updated.

0 updates are security updates.

 

Last login: Fri May 21 10:01:14 2010 from kiki

shimo@epi02:~$ pwd

/home/shimo

shimo@epi02:~$ ls

bin                 sample.txt    test20100517.tgz  work00

patch-20100520.tgz  test20100517  work

shimo@epi02:~$

 

epi00:/home/shimoの内容がそっくりepi02:/home/shimoにコピーされました.

 

これで作業は終わりです.

 

-----------------------------------

 

#パスワードの変更

 

ユーザーがパスワードを変更したくなったら,なるべくepi00にて変更するように説明する.ユーザーは,まずepi00にログインしてpasswdを実行して/etc/passwdの変更を行う.このあとで管理者がrcp_passwd.sh epi01 epi02 epi03のように実行して,すべてのノードに変更したパスワードを配布する.epi00が特別なわけではなくて他のノードで作業してもよいのだが,人為的ミスを減らすためには「epi00をつかう」としておくのが安全だと思う.