epiの新規ユーザ追加の作業(2010/05/21)
2010年5月19日
15:27
ユーザの追加は管理者の作業です.一般ユーザーはやらないでください.
epiクラスターはNISを使わないことにしています.基本的にアカウント情報は各ノードがローカルに持っています.どのノードも独立して稼働しています.したがってユーザーを追加する作業は,本来すべてのノードで繰り返し実行する必要があります.rshをつかったshell script等でadduserを全ノードで実行するようにしてもよいのですが,パワーオンされてないノードがあるといろいろ面倒がおこります.そこでアカウント作業は原則としてepi00で行い,/etc/passwd等をscpで他のノードにコピーするという原始的な方法をとります.
###私的なコメント: NISのようなマスター・スレーブじゃなくて,すべてのノードが完全対称になるようなサービスを作れば,ロバストなクラスタが容易に管理できるのになあ,と思う.少なくとも見かけ以上そうなってほしいと言うこと.Dropbox的生活になれてしまったので,どこか本拠地で管理とか面倒.ここで必要なクラスタではアカウント操作のロックとか,パワーオンしたときの同期の仕掛けをつくるのに高度な技術はいらなさそうだから,すぐにできそうな気がする.とりあえず1000ノードとか大規模なクラスタを想定してないから,スケーラビリティのことはあまり気にしなくてもいいと思う.###
したがって作業時は,まずepi00にkanriアカウントでログインしてください.本当は他のホスト(epi01等)でも可能なのですが,人為的ミスを避けるためにアカウント作業にはepi00を使うことにします.下記の作業ではユーザーアカウント名=shimoを追加します.他の人,たとえばsuzukiを追加するなら,shimoをsuzukiに置き換えてください.
まず sudo adduser shimo を実行します.つぎのようにパスワード入力が求められます.
画面の領域の取り込み日時: 2010/05/19 15:34
パスワードをいれると,次は名前とかいろいろ聞かれます.Full Nameのところは,Hidetoshi Shimodairaのように入れてください.名前以外はとくに入力しなくていいです.改行をおしていってください.
画面の領域の取り込み日時: 2010/05/19 15:37
最後にもう一度改行(またはy)を押せば次にすすみます.(上の図でYが大文字なのは大文字を打てという意味ではなくて,デフォルトがyといういみですよね).もし名前とかに間違いがあったらnをおしてやりなおしてください.
これでepi00にshimoアカウントができました.ホームディレクトリも同時に作成されています.ちょっとshimoのホームを覗いてみます.
画面の領域の取り込み日時: 2010/05/19 15:45
----------------------------------------------------------------------------
他のノード,たとえばepi01とかepi02にはshimoのアカウントはまだできていません.
ここではepi00にできたshimoアカウントをepi01とepi02にコピーする説明をします./usr/local/sbinにおいてある rcp_passwd.sh, addhome.shとrcp_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に焼いたepiのvmware仮想マシンに含まれるrcp_passwd.shは古いバージョンでpassdb.tdbがコピーされません.patch-20100520.tgzを適用すれば改訂版のrcp_passwd.shに置き換わります.
ここではepi01とepi02へコピーなので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:~$
これでepi01とepi02にshimoというアカウントはできました.しかしまだepi01とepi02にホームディレクトリ/home/shimoができていません.
-----------------------------
次にepi01にshimoのホームディレクトリを作成します.これにつかう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が作成されました.もしshimoとsuzukiを同時に作りたかったら,
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/shimoをepi02へコピーします.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をつかう」としておくのが安全だと思う.