PR

カテゴリー:システム管理

質問

root権限でコマンドを実行したはずなのに,「Permission denied」と表示されてしまう

回答

「SELinux」と呼ばれるセキュリティ機能が有効になっている場合,root権限でもコマンドを実行できないことがあります。その場合には,SELinuxを無効にしてから再度実行してみます


難易度:★★★★
対象ディストリビューション:Fedora Core,CentOS,RHEL

 セキュアOSを実現する仕組みである「SELinux」を有効にすると,rootも含めてユーザーが実行できるコマンドや操作を制限できます。しかし,意図せずにSELinuxを有効にしていると,通常,root権限で実行できる操作ができずに戸惑うことがあります。

 特にFedora Coreのように,インストール時にSELinuxがデフォルトで有効に選択されているディストリビューションなら,なおさらです(図1)。SELinuxが有効になっているか否かは,getenforceコマンドで確認できます。

図1●Fedora Core 4のインストール画面
図1●Fedora Core 4のインストール画面
SELinuxを無効にしたければ,ここで「無効」を選択する。

$ su 
# getenforce

 無効であれば「Disabled」,有効であれば「0」か「1」が表示されます。「1」は「enforcing」と呼ばれるモードで,設定したポリシーに従ってアクセスを拒否します。一方「0」は「permissive」モードです。本来はアクセスを拒否する場合でも,ログだけ残してアクセスを許可します。

 SELinuxを無効するには,/etc/sysconfig/selinuxファイルの「SELINUX」の行を,

SELINUX=disabled

と書き換え,マシンを再起動します。また,起動時にカーネル・パラメータとして,「selinux=0」を与えるとSELinuxが無効にできます。

 もし再起動せずに,アクセスを拒否されたコマンドを実行するのなら,

# setenforce 0

を実行してpermissiveにします。