« 2004年10月 | メイン | 2005年7月 »
2005年6月17日
プロセスcore の保存場所
質問:
プロセスで障害が発生し、コアダンプを生成した場合にプロセスの作業ディレク
トリに作成されます。コアダンプの保存先を別のディレクトリに変更する方法は
ありますか。また、生成を抑制することも可能でしょうか。
---------------------------------------------
回答:
coreadm コマンドによってプロセスの core ファイルを制御することができます。
具体的には、“core ファイルを作成するかどうか“ と“core ファイルを作成する
場合、どのファイル名で作成するか“ が設定可能です。
現在のシステム全体の設定は、以下のようにして確認することができます。
----------------------------------------------------------------
% coreadm
グローバルコアのファイルパターン: ー *1
init コアのファイルパターン: core ー *2
グローバルコアダンプ: disabled ー global core
プロセス単位コアダンプ: enabled ー per-process core
グローバル setid コアダンプ: disabled ー global setid core
プロセス単位 setid コアダンプ: disabled ー per-process setid core
グローバルコアダンプのロギング: disabled
----------------------------------------------------------------
【core を作成するかどうかの設定】
coreadm コマンドでは、作成される core ファイルのオーナに依存して、global
core と per-process core というように呼び分けています。
global core : ファイルオーナは root
per-process core : ファイルオーナはプロセスのオーナ
出力結果の項目で言うと、global core = グローバルコアダンプ、per-process
core = プロセス単位コアダンプです。各々、enabled になっていれば core を
作成し、disabled になっていると core を作成しません。デフォルトでは、
per-process core は作成、global core は作成しない設定になっています。
また、上記の中でも、特に setid(setuid/setgid) が設定されたプロセスの
core を作成するかどうかを決めているのが、グローバル setid コアダンプと
プロセス単位 setid コアダンプの項目です。これらは、セキュリティ上の理由
から、デフォルトでは作成しない設定になっています。
各 core の enabled/disabled を切り替えるには、-e と -d オプションを使用
します。この設定は、root でのみ設定可能です。
[例] global core を enabled にする。
(* disabled にするためには -d を指定します。)
# coreadm -e global
なお、global core と per-process core の設定はお互いに依存しないため、
両方を enabled にすると、同じ内容でオーナの異なる core ファイルが 2 つ
作成されることになります。
【core の出力先を変更する設定】
global core の出力先は、root ユーザのみ設定可能で、-g オプションを使用
します。coreadm で出力される項目で言うと、グローバルコアのファイルパタ
ーン(*1)が該当します。
# coreadm -g /var/core/core.%p
→ global core を /var/core/core. という名前で作成する
# coreadm << 確認
グローバルコアのファイルパターン: /var/core/core.%p
init コアのファイルパターン: core
:
per-process core の出力先は、デフォルトではカレント・ワーキング・ディレ
クトリに core という名前で作成されるようになっていますが、root あるいは
プロセスのオーナによって変更可能です。
厳密に言うと、core 出力先の設定は、設定後に起動された子プロセスに引き継
がれますので、特に指定しない限り、全てのプロセスは起動時 init プロセスに
指定された per-process core の出力設定(*2)をそのまま使用します。init プ
ロセスへの指定は -i オプションを使用し、root ユーザのみが指定可能です。
# coreadm -i core.%p
→ init に対して per-process core をカレント・ワーキング・
ディレクトリに core. という名前で作成するように指定
# coreadm << 確認
グローバルコアのファイルパターン:
init コアのファイルパターン: core.%p
:
init プロセスから引き継がれた設定ではなく、各プロセスごとに出力先の設定
を変えたい場合は、-p オプションを使用します。-p オプションは、root もし
くはプロセスのオーナが指定可能です。
% coreadm -p core.%f
→ のプロセスに対して、per-process core をカレント・
ワーキング・ディレクトリに core. と
いう名前で作成するように指定
% coreadm << 確認
: core.%f
【ユーザごとに出力先の設定を行いたい場合】
前述の通り、core の出力設定は、システム全体で行うもの(global core、あるい
は per-process core のデフォルト設定)と、プロセスごと(プロセス別の per-
process core 設定)に行うものの2種類となります。
ただし、ユーザのログインシェルのプロセスに対して per-process core の設定
を行うことで、ユーザごとの core 出力先を変更することができます。
% coreadm -p $HOME/core.%p $$
% coreadm $$
748: /export/home/test/core.%p
上記は、現在実行中のシェルプロセスに対して per-process core の設定を行っ
ていますが、この記述をログイン時に読み込まれるプロファイルに追加します。
($$ は実行中のシェルプロセスの pid を意味する)
プロファイルは、csh の場合 $HOME/.login、sh/ksh の場合は $HOME/.profile
が良いと思います。
[例]
% vi $HOME/.login
:
coreadm -p $HOME/core.%p $$
【各オプションが有効になるタイミング】
前述のオプション(-e/-d, -g, -i, -p)は、すべて実行した時即座にに有効と
なります。ただし、-p だけが一時的な変更であるのに対し、他のオプション
は /etc/coreadm.conf ファイルに保存されて、リブート後も有効となります。
投稿者 AJ : 17:47 【トラックバック (0)】
2005年6月 9日
FTP 専用のユーザアカウントの登録
質問:
/etc/passwd に通常通りにアカウントを登録すると
telnet, rlogin が出来ますが、ftp によるアクセス
だけを許可し、ローカル及びリモートに関係なく、
他のログインを拒否するための設定方法を教えて
いただけますでしょうか。
---------------------------------------------
回答:
ご要望の動作を実現する一般的な方法としましては、
該当アカウントに対して無効なログイン・シェルを
設定する方法がございますので、ご紹介させていた
だきます。
設定手順:
1. 該当ユーザーのログイン・シェルを無効なものに設定する。
例えば /nosuchshell のように存在しないファイルを設定したり、
/bin/true のように即座に終了するコマンドを指定します。
# vi /etc/passwd
:
ftp-only:x:1000:100:ftp access only:/tmp:/nosuchshell
2. 設定した無効なシェルを、/etc/shells に登録する
登録したシェルがログイン・シェルとして利用可能なものになる
ように /etc/shells に登録しておく必要があります。(登録し忘
れますと、ログイン出来なくなるだけではなく、ftp によるアク
セスも出来なくなってしまいます)
# vi /etc/shells
:
/bin/sh
/bin/csh
:
/nosuchshell
[ 注意事項 ]
/etc/shells ファイルには、/nosuchshell だけではなく、標準で
提供されておりますシェル(/bin/sh, /bin/csh 等)も登録して
おく必要があります。/etc/shells ファイルが存在する場合に、
デフォルトのシェルを登録し忘れますと、そのシェルを利用して
いるユーザの ftp が出来なくなります。
デフォルトのシェルについては、man shells に記載がございます
ので、ご参照下さい。
検証結果:
・/etc/shells に /nosuchshell を登録し、ftp を実施
local% ftp remote_host
Connected to remote_host.
220 remote_host FTP server (SunOS 5.8) ready.
Name (remote_host:user1): ftp-only
331 Password required for ftp-only.
Password:
230 User ftp-only logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/tmp" is current directory.
ftp> dir
229 Entering Extended Passive Mode (|||32791|)
150 ASCII data connection for /bin/ls (fe80::a00:20ff:xxxx:xxxx,32960) (0 bytes).
合計 98
drwxrwxrwt 6 root sys 314 6月 6日 11:05 .
drwxr-xr-x 30 root root 1024 1月 27日 16:50 ..
drwxrwxr-x 2 root root 104 6月 6日 11:05 .X11-pipe
drwxrwxr-x 2 root root 104 6月 6日 11:05 .X11-unix
drwxrwxrwx 2 root root 107 6月 6日 11:05 .pcmcia
srwxrwxrwx 1 root root 0 6月 6日 11:05 jd_sockV6
-rw-rw-r-- 1 root sys 6448 6月 6日 11:04 ps_data
drwx------ 2 root root 110 6月 6日 11:05 smc898
226 ASCII Transfer complete.
539 bytes received in 0.028 seconds (18.55 Kbytes/s)
ftp> bye
221 Goodbye.
local%
・ftp-only ユーザで rlogin が失敗することを確認します。
local% rlogin remote_host -l ftp-only
Password:
Last login: Mon Jun 6 11:11:42 from fe80::a00:20ff:
No shell
remote_host への接続を切断しました。
local%
・/etc/shells に nosuchshell を登録しない場合、ftp が失敗します。
local% ftp remote_host
Connected to remote_host.
220 remote_host FTP server (SunOS 5.8) ready.
Name (remote_host:user1): ftp-only
331 Password required for ftp-only.
Password:
530 Login incorrect.
Login failed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.
local%
投稿者 AJ : 17:20 【トラックバック (0)】
2005年6月 2日
削除したユーザが、repquota で表示されるのを削除
質問:
/export/home ファイルシステムに quota の設定を行っている環境で、
user1 のユーザアカウントとホームディレクトリを削除したのですが、
repquota コマンドを実行すると、user1 に割り当てていた UID(2542)
で情報が残っています。
既に存在しないアカウントなので、削除したいのですが、どのように
して削除すれば良いのでしょうか。
# repquota -va /export/home
/dev/dsk/c0t1d0s7 (/export/home):
Block limits File limits
User used soft hard timeleft used soft hard timeleft
#2542 -- 0 100 150 0 100 110
^^^^^
user2 -- 5995 0 6000 8 0 0
#
------------------------------------------------------------------------------
回答:
お問い合わせいただきました件について調査しましたところ、Sun から
同様の事象に対する資料が出ておりましたが、それによりますと、次の
ようにして削除することが可能です。
# /usr/sbin/edquota -p nobody 2542
以下に弊社での検証結果と Sun の資料を添付致しますので、ご参照下さい。
検証結果)
※ user1 の UID は、2542 としています。
1.user1 のアカウントが存在する状況での repquota の出力
# repquota -va /export/home
/dev/dsk/c0t1d0s7 (/export/home):
Block limits File limits
User used soft hard timeleft used soft hard timeleft
user1 -- 1 100 150 1 100 110
test1 -- 5995 0 6000 8 0 0
#
2.user1 のアカウントとホームディレクトリを削除後の repquota の出力
# repquota -va /export/home
/dev/dsk/c0t1d0s7 (/export/home):
Block limits File limits
User used soft hard timeleft used soft hard timeleft
#2542 -- 0 100 150 0 100 110
test1 -- 5995 0 6000 8 0 0
#
3.UID=2542 のエントリを削除します。
# /usr/sbin/edquota -p nobody 2542
4.repquota で削除されていることを確認します。
# repquota -va /export/home
/dev/dsk/c0t1d0s7 (/export/home):
Block limits File limits
User used soft hard timeleft used soft hard timeleft
test1 -- 5995 0 6000 8 0 0
#
参考資料)
Document Audience: SPECTRUM
Document ID: 15532
Title: QUOTA:How to remove user from quota
Update Date: Thu May 26 00:00:00 MDT 2005
Products: Solaris
Document:
When a user has been deleted, repquota still reports user's UID
For example:
# /usr/sbin/repquota -v /export/home
/dev/dsk/c0t3d0s7 (/export/home):
Block limits File limits
User used soft hard timeleft used soft hard timeleft
celiza -- 49 15000 20000 32 90 100
hen -- 2 45000 40000 2 90 100
After user (hen) and its directory removed
# /usr/sbin/repquota -v /export/home
/dev/dsk/c0t3d0s7 (/export/home):
Block limits File limits
User used soft hard timeleft used soft hard timeleft
celiza -- 49 15000 20000 32 90 100
#1003 -- 2 45000 40000 2 90 100
To remove the user (1003) from quota report
# /usr/sbin/edquota -p nobody 1003
# /usr/sbin/repquota -v /export/home
/dev/dsk/c0t3d0s7 (/export/home):
Block limits File limits
User used soft hard timeleft used soft hard timeleft
celiza -- 49 15000 20000 32 90 100
#
投稿者 AJ : 17:15 【トラックバック (0)】