コラム

Linux でコマンドをスケジュールしてみよう(5)/etc/at.allow と /etc/at.deny を使用したユーザ制限

筆者:松澤 ちづる

OS

2017.02.22


前回の「Linux でコマンドをスケジュールしてみよう ( 4 ) 」では、atでスケジュールされた内容を事前に取り消す方法や、実行された結果の出力先を変更する方法をご紹介しました。今回は、atコマンドへのアクセス制御についてご紹介します。


atコマンドを使用するユーザを制限する


ここまで、さまざまな atコマンド の実行例をご紹介してきましたが、通常はどのユーザでもatコマンドを使用してスケジュールすることができます。atコマンドを使用するためには 特別な権限などは必要ありません。ただし、あえてatコマンドを使用することができるユーザを制限する こともできます。
 

/etc/at.allowファイルと/etc/at.denyファイル


atコマンドを使用することができるユーザを制限するには、/etc/at.allowファイル /etc/at.denyファイル を使用します。これらのファイルの各行に 対象となるユーザの名前を1つずつ記載 します。また、これらのファイルは、スーパーユーザである(システム管理権限を持つ)rootユーザしか編集できません。

/etc/at.allowファイル は、atコマンドの使用を許可するユーザを記載する ためのファイルです。/etc/at.denyファイル atコマンドの使用を禁止するユーザを記載する ためのファイルです。ファイルの名前がそれぞれの役割を表現していると覚えておいてください。これらのファイルのどちらがどのように存在するかによって動作が変わりますので、それぞれパターンに分けてご紹介します。

  • /etc/at.allowファイルが存在しない場合 は、/etc/at.denyに記載されているユーザは、atコマンドの使用が禁止 されます。そこに記載されていないユーザはatコマンドが使用できます。
     
  • /etc/at.allowファイルが存在する場合 は、/etc/at.allowに記載されているユーザのみがatコマンドの使用が許可 されます。そこに記載されていないユーザはすべて使用禁止になります。また、/etc/at.denyファイルの存在は無視されます。
     
  • /etc/at.allowファイルと/etc/at.denyファイルの両方が存在する場合は、/etc/at.denyファイルの存在は無視されるため、/etc/at.allowファイルに記載されているユーザのみがatコマンドの使用が許可 されます。そこに記載されていないユーザはすべて使用禁止になります。
     
  • /etc/at.allowファイルと/etc/at.denyファイルの両方が存在しない場合は、スーパーユーザである(システム管理権限を持つ) rootユーザのみがatコマンドを使用 できます。それ以外のユーザはすべて使用禁止です。


atコマンドの使用を 禁止したいユーザの数が少ない場合 には、それらのユーザを /etc/at.denyファイルに記載して禁止 しておきます。許可したいユーザの数が少ない場合 には、それらのユーザを /etc/at.allowファイルに記載して許可 しておきます。また、一般のユーザ全員にatコマンドを許可しない のであれば、/etc/at.allowファイルと/etc/at.denyファイルの両方とも存在しない状態 にしておきます。

/etc/at.allow と /etc/at.deny の存在による動作の違い

① /etc/at.denyファイルのみ存在する場合の実行例


では、ここから、その実行例をお見せします。

例えば、studentユーザが/etc/at.denyファイルに記載 され、/etc/at.allowファイル自体が存在しない 場合は、studentユーザはatコマンドの実行が禁止されます。

① ファイルを編集するためにrootユーザの状態で、/etc/at.denyファイルにstudentを記載 します。また、/etc/at.allowファイルは存在しないことを確認します。

② studentユーザの状態でatコマンドが実行できないことを確認します。

② /etc/at.allowファイルのみ存在する場合の実行例


例えば、studentユーザが/etc/at.allowファイルに記載 されると、それ以外のユーザ(ここではinstructorユーザ)はatコマンドの実行が禁止 されます。

① ファイルを編集するため、rootユーザの状態で /etc/at.allowファイルにstudentのみを記載 します。

② studentユーザの状態でatコマンドが実行できることを確認します。ただし、instructorユーザの状態ではatコマンドが実行できないことを確認します。

③ /etc/at.allowファイルと/etc/at.denyファイルが存在し、両方に同じユーザが記載された場合の実行例


例えば、studentユーザが/etc/at.allowファイルと/etc/at.denyファイルの両方に記載 されると、studentユーザはatコマンドの実行が許可され、それ以外のユーザ(ここではinstructorユーザ)はatコマンドの実行が禁止 されます。
(/etc/at.allowファイルが存在すると、/etc/at.denyファイルの存在は無視 され、無いものとして扱われるからです。)

① ファイルを編集するためrootユーザの状態で、/etc/at.allowファイルと/etc/at.denyファイルにstudentを記載 します。

② studentユーザの状態でatコマンドが実行できることを確認します。ただし、instructorユーザの状態では、atコマンドが実行できないことを確認します。

④ /etc/at.allowファイルと/etc/at.denyファイルが両方とも存在しない場合の実行例


例えば、/etc/at.allowファイルと/etc/at.denyファイルの両方が存在しない と、rootユーザのみがatコマンドを実行することができ、一般のユーザであるstudentユーザは実行できない ということになります。

① /etc/at.allowファイルと/etc/at.denyファイルの両方が存在しないことを確認します。rootユーザの状態でatコマンドが実行できることを確認します。

② studentユーザの状態でatコマンドが実行できないことを確認します。

atコマンドの使用制限時の注意点


このように/etc/at.allowファイルと/etc/at.denyファイルを使用することで、atコマンドを使用することができるユーザを制限できます。

ただし、1つ注意点があり、あくまでも/etc/at.allowファイルと/etc/at.denyファイルは、atコマンドの使用の許可と禁止のみを制御 しています。そのため、新しく禁止したユーザが、禁止される前にatコマンドを使用してスケジュールしたものは、自動的には取り消されず、時間になると実行 されます。新しくatコマンドの使用を禁止したユーザを定義したら、すでに何かスケジュールしていなかったかも合わせて確認 し、その内容が不適切であれば 手動で削除 します。

では、その実行例をお見せします。
例えば、studentユーザが、atコマンドを使用できないように定義します。

① rootユーザの状態で /etc/at.denyファイルにstudentを記載 し、/etc/at.allowファイルは存在しない ことを確認します。また、studentユーザの状態でatコマンド実行できないことを確認します。さらに、rootユーザの状態で atq を実行し、スケジュールされているジョブを確認 します。

② atコマンドの実行自体が禁止されていても、すでにスケジュールされているものは自動的には取り消されないので、atrmコマンド を使用して、実行される前に削除 します。rootユーザは、他のユーザがスケジュールした atのジョブを atrmコマンド使用して削除する権限を持ちます。(一般のユーザは自分のatのジョブのみを削除できます。)
atqの実行結果により、studentユーザは禁止する前にすでにジョブ1とジョブ3をスケジュールしますが、不要と判断し、それらを手動で削除します。削除できたことを確認し、これでstudentではat関連の実行はできない、実行されない状態になりました。

このようにあくまでも/etc/at.allowファイルと/etc/at.denyファイルは、atコマンドの使用が許可されるか禁止されるかの制御だけです。すでにatを使用してスケジュールされているものには影響しません。rootユーザでatqコマンドを使用すると、システム上の atジョブを表示することができるので、特にatコマンドへのアクセス制限を新しく定義したときには、ぜひ確認し、必要に応じてジョブの取り消しなどを実行するようにしてください。

atコマンドへのアクセス制御の必要性


システム管理者の立場から見て、誰でも好きな時間に好きなコマンドを自動実行できる というのは、好ましくない場合があります。

早朝や深夜、休日などユーザが作業してない時間を見計らって、システム管理作業を実行したり、低負荷の時間帯をシステムに作ったり、とするつもりだったのが、ユーザはログインしてないけれども代わりに atコマンドでスケジュールされている内容が実行されてしまい、その思惑が外れてしまうことも考えられます。あるいは、悪戯心を持って不要なスケジュールを乱立してしまうユーザもいるかもしれません。

今回ご紹介したように、atコマンドにはアクセス制御機能があり、atコマンドを使用することができるユーザを制限することができるようになっています。ぜひシステム管理者の方々は、すべてのユーザを許可するのか、特定のユーザのみを許可するのか、すべてのユーザを禁止するのか、自分の管理するシステムの環境や状況などを踏まえて、一度考慮してみてください。
 

まとめ


前回から atコマンド関連をご紹介していますが、今回は atコマンドが使用できるユーザを制限する方法をご紹介しました。少しずつ、atコマンドや関連するコマンドやファイルに慣れ、知識も広がってきたのではないでしょうか。ただ、まだまだ atコマンドのお話はあります。それらは次の機会にご紹介したいと思います。

以上、ありがとうございました。
 

関連URL

筆者紹介

松澤 ちづる

プロフィール

松澤 ちづる( Chizuru Matsuzawa )

RedHatインストラクタ。
担当分野は、RHEL、RHEV、KVM、RedHatSatteliteなど。
RedHatの最上位認定資格RHCA取得。
( Red Hat Certificate of Expertise in Hybrid Cloud Storage,
Deployment and Systems Management, Clustering and Storage Management, Performance Tuning,
SELinux Policy Administration, Directory Services and Authentication, RHCVA, RHCE, RHCSA )


Page Topへ