<!--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>rootは、rootユーザ、スーパーユーザ、管理者などとも呼ばれます。</para>

	<para>以下で説明する <application>sudo</application> や <application>gksu</application> などを利用して root 権限で特定のコマンドを実行することを、「root権限で○○を実行」、「スーパーユーザ権限で○○を実行」、「管理者権限で○○を実行」のように表現します。</para>

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

		<para>本当に必要な時だけrootで作業し、それ以外の時は一般ユーザで作業するためにも以下で説明する sudo を利用するようにしてください。</para>
	</warning>

</sect1>



<sect1 id="root-4-sudo">
	<title>sudo</title>
	<para>特定のユーザや特定のグループに所属するユーザが、スーパーユーザ権限(あるいはそれ以外の特定ユーザの権限)でいくつかのコマンド操作を行うことを許可する <application>sudo</application> というプログラムがあります。</para>

	<note>
		<title>Vine Linux 6.0 からインストーラで作成した一般ユーザアカウントが標準で sudo できるようになりました</title>
		<para>Vine Linux 6.0 から、インストーラで作成した一般ユーザアカウントは wheel グループ(管理者グループ)に所属するようになりました。</para>
		<para>wheel グループには標準で sudo 権限が付与されます。</para>
	</note>
	
	<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-execute">
		<title>sudo でのコマンドの実行</title>
		<para>実際に実行するには次のようにします。
		<screen>$ <command>sudo /usr/bin/apt-get update</command>
Password:
		</screen>
		この際、パスワードを求められるので root のパスワードではなく、<emphasis>sudo を実行したユーザー自身のパスワードを入力します。</emphasis></para>
		
		<important>
			<title>sudo を実行したユーザーのパスワードで認証します</title>
			<para>su や gksuexec などでは、root のパスワードが必要ですが、sudo では認められたユーザ本人であるかを確認するので、root のパスワードは不要です。</para>
		</important>
		<warning>
			<title>一般ユーザーで実行できるコマンドを sudo で実行しないようにしましょう</title>
			<para>実行例にあるコマンドは、一般ユーザー権限で実行すると失敗するため sudo を利用しています。</para>
<screen>$ apt-get update
E: ロックファイル /var/lib/apt/lists/lock をオープンできません。 - open (13 許可がありません)
E: listディレクトリをロックすることができません
</screen>
			<para>逆に言うと一般ユーザー権限で実行できるコマンドに sudo を利用する必要はありません。常に sudo を介してコマンドを実行するようにしていると思わぬ事故を招く恐れがあるため、必要性を考慮して sudo を利用するように心がけてください。</para>
		</warning>
	</sect2>

	<sect2 id="root-4-sudo-visudo">
		<title>visudo での設定</title>
		<para>root権限で <command>visudo</command> コマンドを実行し、ユーザ名、ホスト名<footnote><para>現在利用しているホストの名前は hostname コマンドで確認出来ます。</para></footnote>、許可するコマンドなどを設定します。</para>
		
		<para>visudo コマンドについては、<command>man visudo</command> で、また、書式については、<command>man 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>man 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>

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

			<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>man su</command> を参照しておいてください。</para>

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

		</note>
	</sect2>

</sect1>

</chapter>

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

<!--
vi:syntax=docbkxml
Local Variables:
encode: utf-8-unix
End:
-->
