サブディレクトリを作成せずにユーザーにディレクトリを作成させる方法

サブディレクトリを作成せずにユーザーにディレクトリを作成させる方法

フラッシュ デバイスからユーザーが指定したアーカイブにファイルを転送できる Bash シェル スクリプトを作成しようとしています。ただし、このユーザーがこのアーカイブ ディレクトリにサブディレクトリを作成できないように制限したいと思います。

注記:つまり、本質的には、ユーザーが作成/指定するアーカイブ ディレクトリをフラットな 1 レベル構造にしたいのです。

これを実現する方法が全く分かりませんので、ご協力いただければ幸いです。

答え1

これを簡単に実現するネイティブ メカニズムはありません。ディレクトリは実際にはファイルであるため、Linux の権限システムではファイルとディレクトリの作成に個別の権限を指定できません。ただし、次の方法を試してください。

  1. すべてのアーカイブ ディレクトリを、この目的のためだけに作成された 1 人 (または数人の異なる) のユーザーが所有するようにします。その名前を archiveuser とします。
  2. すべてのアーカイブ ディレクトリ (たくさんあると思います) をこのユーザーが所有するようにします。例:

    $ chown archiveuser:archiveuser /somedir/archivedir1
    $ chown archiveuser:archiveuser /somedir/archivedir2
    $ chown archiveuser:archiveuser /somedir/archivedir3
    
  3. アーカイブディレクトリへのアクセスを所有者のみに制限します:

    $ chmod 700 /somedir/archivedir1
    $ chmod 700 /somedir/archivedir2
    $ chmod 700 /somedir/archivedir3
    
  4. コマンドにアーカイブ ディレクトリへのアクセス権sudoを付与するメカニズムを使用します。cp

    に追加/etc/sudoers

    someuser1 ALL=(archiveuser) NOPASSWD:/bin/cp /path/to/pendrive/* /somedir/archiveuser/*
    someuser2 ALL=(archiveuser) NOPASSWD:/bin/cp /path/to/pendrive/* /somedir/archiveuser/*
    

    もちろん、このコマンドの使用を許可する必要があるすべてのユーザーに対して適切なグループを作成すると便利です。sudoチュートリアルをお読みください :-)。

  5. 以上です。ユーザーは以下を使用する必要があります。

    $ sudo -u archiveuser cp /path/to/pendrive/somefile /somedir/archiveuser/ 
    

より使いやすくするために、エイリアスを作成することもできます (つまりalias cpt='sudo -u archiveuser cp')。この場合、cp -rディレクトリをコピーするために必要な は によって許可されていないことにも注意してください。また、コマンドは権限によって防止されます。このようにして、目的は達成されます。sudomkdir

関連情報