ユーザーがディレクトリを作成できますが、サブディレクトリを作成できないようにする方法

ユーザーがディレクトリを作成できますが、サブディレクトリを作成できないようにする方法

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

メモ:したがって、本質的に、ユーザーが作成/指定したアーカイブディレクトリが単一レベルの構造になることを望みます。

私はこれを達成する方法を知らず、私が得ることができるどんな助けでも本当に感謝します。

答え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権限によってブロックされます。これにより目標が達​​成されます。

関連情報