<!--DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN"-->
<chapter id="root">
  <title>root権限</title>

<!--bookinfo>
  <author>
	  <firstname>Takuya</firstname>
	  <surname>Kobayashi</surname>
  </author>

  <pubdate>2007/10/09</pubdate>

</bookinfo-->

<sect1 id="root-1">
	<title>rootとは</title>

	<para>root(ルート) は、一般ユーザとは異なり、システムの管理などのために、ほぼ全ての操作を行う権限を持った特別なユーザです。</para>

	<para>アプリケーションのインストールおよびアンインストールや、ユーザーの登録および抹消や、(ハードディスクやUSBメモリなどの)ファイルシステムのマウントおよびアンマウントや、ファイルのアクセス制限を無視した読み書き作成削除が出来たりなど様々なことが出来るため、何か誤操作を行うとシステムを破壊したり、重要なデータを削除するということも起こります。</para>

	<para>本当に必要な時だけrootで作業し、それ以外の時は一般ユーザで作業するようにしてください。</para>

	<para>rootは、rootユーザ、スーパーユーザ、管理者などとも呼ばれます。</para>

	<para><command>su -</command> コマンド等で root になったうえで、あるいは root で login したうえで何か作業を行うことを、「root権限で○○を実行」、「スーパーユーザ権限で○○を実行」、「管理者権限で○○を実行」のように表現します。</para>
	<para><application>sudo</application> や <application>gksu</application> などのような、root権限で特定のコマンドを実行するためのプログラムもあります。</para>

</sect1>

<sect1 id="root-2">
	<title>rootユーザになるには</title>
	<para>コンソールや、<application>gnome-terminal</application>(GNOME)、<application>Konsole</application>(KDE)、<application>Terminal</application>(XFce)、<application>xterm</application>(WindowMaker)、<application>kterm</application>、<application>mlterm</application> などの端末から、コマンドで <command>su - root</command> と入力し root のパスワードを入力します。</para>

	<para>su コマンドは指定したユーザに切り替えるコマンドですが、ユーザ名を省略すると root になるので <command>su -</command> という形で利用できます。</para>

	<screen>$ <command>su -</command>
パスワード(P):</screen>

	<para>Konsole では上部メニューの <guimenu>セッション</guimenu> → <guimenu>新規シェル(root)</guimenu> を選択することでもできます。</para>

	<para>rootユーザになり、コマンド入力によって作業を行ったりアプリケーションを起動することなどができます。</para>
	<para>コマンドで <command>exit</command> もしくは <command>logout</command> と入力すると、<command>su -</command> を実行する前のユーザに戻ります。</para>

	<screen># <command>exit</command></screen>

	<para>また、<application>gnome-terminal</application> などの<ulink url="XWindow-2.html#titlebar">アプリケーションのタイトルバーのボタン</ulink>をクリックすることでウィンドウを閉じて終了してもかまいません。</para>

	<para>su コマンドついては、<command>su -</command> とする場合と <command>su</command> とした場合では動作が異なります。
	<command>jman su</command> で日本語の man page を読むことが出来るので、<option>-</option>, <option>-l</option>, <option>--login</option> というオプションの部分について参照してください。</para>

	<para>オプションの有無による違いを理解することが大切ですが、-オプションをつけることによるトラブルよりも -オプションをつけないことによるトラブルのほうが多いように思うので、「su コマンドを使うときには - というオプションも使う」と覚えてしまってもいいかもしれません。</para>

	<para><ulink url="server-2.html#server-2-2">LANとセキュリティ</ulink> のセキュリティのところに PAMを使ったセキュリティ の方法が記述されています。参照しておいてください。</para>

</sect1>

<sect1 id="root-3">
	<title>root権限でアプリケーションを起動するには</title>
	<para>コマンドやアプリケーションを root権限で起動するには、<xref linkend="root-2" />のように<application>gnome-terminal</application>などの端末で <command>su -</command>コマンドで rootユーザになったうえで、コマンドを入力してアプリケーションを起動します。</para>

	<para>また、<command>su</command>コマンドの -c というオプションを利用することで実行するコマンドを指定することもできます。</para>

	<screen>$ <command>su - root -c "apt-get update"</command>
パスワード(P):</screen>

	<para>この場合も root というユーザー名を省略して次のようにすることができます。</para>
	<screen>$ <command>su - -c "apt-get update"</command></screen>

	<para><option>-c オプション</option>でコマンドを指定して実行した場合は、そのコマンドが終了するともとの一般ユーザーに戻ります。</para>

	<note><para><application>synaptic</application> などのように、root権限を必要とするアプリケーションは、コマンドで起動したり、GNOME Panel などのメニューから選択して起動するだけで、rootのパスワードの入力を求めるウィンドウが開くものがあります。</para></note>

	<para>また、次のようにしてアプリケーションを起動することもできます。</para>

	<para>GNOME Panel のメニューの <guimenu>アプリケーション</guimenu>→<guimenuitem>システムツール</guimenuitem>→<guimenuitem>Run as different user (GKsu)</guimenuitem> を選択します。</para>

	<para><screen>$ <command>gksuexec</command></screen>
	のようにコマンドを入力しても起動できます。</para>

	<para>プログラムの実行というウィンドウが開くので <emphasis>実行するコマンド</emphasis> と <emphasis>実行するユーザ名</emphasis> を入力します。</para>

	<para><guibutton>OK</guibutton> をクリックすると、実行するユーザ名で指定したユーザのパスワードの入力を求められるので、パスワードを入力すると、そのユーザの権限でアプリケーションを起動することができます。</para>

	<para><emphasis>実行するユーザ名</emphasis>の部分に <emphasis>root</emphasis> と入力することで root権限でアプリケーションを起動できます。</para>

	<mediaobject>
		<imageobject>
			<imagedata fileref="figures/gksuexec-1.png" />
		</imageobject>
		<textobject>
			<phrase>図:gksuexec のスクリーンショット1</phrase>
		</textobject>
	</mediaobject>

	<para>gksuexec を利用して <application>gnome-terminal</application> などのような端末を起動する場合には、<guibutton>高度なオプション(A)</guibutton> をクリックし、ユーザの変更時に使用するオプションの <emphasis>ログインシェル(L)</emphasis> にチェックをつけるとよいでしょう。</para>

	<para>「ログインシェル」という言葉については、<command>jman su</command> を参照しておいてください。</para>

	<mediaobject>
		<imageobject>
			<imagedata fileref="figures/gksuexec-2.png" />
			<textobject>
				<phrase>図:gksuexec のスクリーンショット2</phrase>
			</textobject>
		</imageobject>
	</mediaobject>

</sect1>

<sect1 id="root-4-sudo">
	<title>sudo</title>
	<para>特定のユーザや特定のグループに所属するユーザが、スーパーユーザ権限(あるいはそれ以外の特定ユーザの権限)でいくつかのコマンド操作を行うことを許可する <application>sudo</application> というプログラムがあります。</para>
	
	<para><application>sudo</application> は、あらかじめ、userAというユーザに対してスーパーユーザ権限で実行できるコマンドの一覧を作成しておき、実行する際には、userAというユーザであるかどうかを認証するという形になります。</para>

	<para><command>su</command> や <application>gksuexec</application> などでは、root のパスワードが必要でしたが、<application>sudo</application> では、<emphasis>認められたユーザ本人であるかを確認する</emphasis>ので、root のパスワードは不要になります。</para>

	<para>また、コマンドを制限できるので、誤操作の危険性を減らすことができます。</para>

	<para>利用頻度の高いコマンドなどを登録しておくと便利です。</para>

	<sect2 id="root-4-sudo-visudo">
		<title>visudo での設定</title>
		<para>root権限で <command>visudo</command> コマンドを実行し、ユーザ名、ホスト名<footnote><para>現在利用しているホストの名前は hostname コマンドで確認出来ます。</para></footnote>、許可するコマンドなどを設定します。</para>
		
		<para>visudo コマンドについては、<command>jman visudo</command> で、また、書式については、<command>jman sudoers</command> で確認してください。</para>
		
		<para>visudo コマンドを実行すると、<application>vi</application> というエディタが設定ファイル(<filename>/etc/sudoers</filename>)を開いた状態で起動します。</para>
		
		<note><title>visudo では vi 以外のテキストエディタも使えます。</title>
		<para>GNOMEテキスト・エディタ(gedit) で編集するには <command>VISUAL=gedit visudo</command> のように、また、<ulink url="utils.html#text-editor">Emacs</ulink> で編集するには <command>VISUAL=emacs visudo</command> のように、
		<screen># <command><emphasis>VISUAL=エディタのコマンド</emphasis> visudo</command></screen>
		という形で指定します。</para>
		
		<para>visudo コマンドでは、エディタ起動時、エディタ終了時に、文法のチェックなどが行われるようになっているので、他のエディタを用いる場合でも、visudo コマンドを用いてください。</para>
		</note>
		
		<sect3 id="root-4-sudo-visudo-user">
			<title>ユーザごとの設定</title>
			<para>次のように記述すると userA は localhost というホストにおいて、sudo を利用して root権限で <command>/usr/bin/apt-get update</command> というコマンドを実行出来るようになります。

		<screen>userA  localhost = /usr/bin/apt-get update</screen></para>

		<example id="visudo-for-user">
			<title>visudo でのユーザごとの設定例</title>
			<para>18〜19行のところに、ユーザーごとの設定の部分があるので、その次の行あたりに書いておくとよいでしょう。</para>

		<screen># User privilege specification
root    ALL=(ALL) ALL

# for user : userA
userA  localhost = /usr/bin/apt-get update</screen>

		<para>行頭に # をつけることでその行を無効にできるのでコメントを書いておきます。ひらがなや漢字など日本語は用いないほうがよいでしょう。</para></example>

		<para>この場合、<emphasis>update</emphasis> という部分も書いているので、<command>/usr/bin/apt-get upgrade</command> や <command>/usr/bin/apt-get install</command> や <command>/usr/bin/apt-get remove</command> など、<emphasis>update 以外</emphasis>は実行できません。</para>
		
		<para>install や upgrade や remove なども認めるのであれば、
		<screen>userA  localhost = /usr/bin/apt-get upgrade
userA  localhost = /usr/bin/apt-get install
userA  localhost = /usr/bin/apt-get remove</screen>
		のようにそれぞれ指定するか、
		<screen>userA  localhost = /usr/bin/apt-get</screen>
		のように apt-get 以降は指定しない形で書きます。</para>

		</sect3>

		<sect3 id="root-4-sudo-visudo-group">
			<title>グループごとの設定</title>
			<para>ユーザ一人一人についてではなく、グループ単位での設定も可能です。</para>
			<para>補助グループなどを利用すると便利です。グループについては、<ulink url="login-5.html">ユーザ登録</ulink> を参照してください。</para>
			
			<para>power というグループに所属するユーザが <command>/sbin/shutdown</command> コマンドを実行出来るようにするには次のように記述します。

			<screen>%power  localhost = /sbin/shutdown</screen></para>

			<para>先頭のユーザ名だったところを %グループ名 に変えるだけで、あとの書式は同じです。</para>
			
			<example id="visudo-for-group">
				<title>visudo でのグループごとの設定例</title>
				<para>21〜22行のところに、グループごとの設定の例の部分があるので、その次の行あたりに書いておくとよいでしょう。</para>

				<screen># Uncomment to allow people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

# for group : power
%power  localhost = /sbin/shutdown</screen></example>
		</sect3>

		<para>パスワードを用いた認証を省略するように設定することもできます。<command>jman sudoers</command> で "NOPASSWD と PASSWD" の部分などを読んでください。</para>
		
		<note><title>vi について</title>
		<para><application>vi</application> は、一般的なエディタとは操作方法が異なりますが、Unix,Linux では、Emacs と並んで人気のある有名なエディタの一つです。</para>
		<para>Vine Linux では <application>vi</application> を改良した <application>VIM(VIsual editor iMproved)</application> があり、vim という名前のパッケージになっています。</para>
		<para>慣れるまでには多少時間がかかるかもしれませんが、チュートリアルを体験してみるとよいでしょう。</para>
		<para><screen>$ <command>vimtutor ja</command></screen>
		とすると日本語でのチュートリアルが起動します。</para>
		<para><screen>$ <command>vimtutor en</command></screen>
		とすると英語でのチュートリアルが起動します。</para>
		</note>
		
	</sect2>

	<sect2 id="root-4-sudo-l">
		<title>sudo -l での確認</title>
		<para>一般ユーザは <command>sudo -l</command> とすると自分がどんなコマンドを実行できるか確認できます。</para>
		
		<para>userA で確認してみると次のようになります。
		<screen>$ <command>sudo -l</command>
Password:</screen>
root のパスワードではなく、<emphasis>userA 自身のパスワードを入力します。</emphasis>
<screen>User userA may run the following commands on this host:
    (root) /usr/bin/apt-get update
		</screen></para>

		<para>二行目以降で、root権限で実行できるコマンドが表示されます。</para>
		
		<para>sudo でのコマンドの実行が認められていない場合には、パスワード入力のあとに
		<screen>Sorry, user test may not run sudo on localhost.</screen>
		のようなメッセージが表示されます。</para>
	</sect2>

	<sect2 id="root-4-sudo-execute">
		<title>sudo でのコマンドの実行</title>
		<para>実際に実行するには次のようにします。
		<screen>$ <command>sudo /usr/bin/apt-get update</command>
Password:
		</screen>
		root のパスワードではなく、<emphasis>userA 自身のパスワードを入力します。</emphasis></para>
		
	</sect2>

</sect1>

</chapter>

<!--
		Local Variables:
		encode: utf-8-unix
		mode: nxml
		End:
-->
