小プレリュード
habrasocietyを歓迎します。
中規模から大規模の企業では、遅かれ早かれ、ネットワークストレージなしでは生きていけない状況になります。 内部、内部、およびその他のやり取りのために特定のフォルダー構造を作成する必要がありますが、次回はさらに詳しく説明します。 そして今、私はあなたの会社/企業/機関/などのユーザーのために「必要に応じて下線を引く」「個人用フォルダ」を簡単に作成する方法を紹介したいと思います。
エントリー
だから何が起こっているのかという本質に。 LDAP互換のディレクトリサービス(以降SKと呼びます)に承認されたドメインがあると仮定します。 そして、Linux + Sambaに基づいたファイルサーバーを作成する機能を備えた要望(SCと同じマシン上で可能です)。 誰もが個人フォルダーを選択する必要があるのはなぜですか? 主にサーバーにデータを保存して、誰もアクセスできないようにするため。 なぜ、誰もが独自のフォルダを持ち、権利の差別化を伴う1つのディレクトリを持たないのですか? はい、本当にそのような方法があります。管理者としての私にとっては、
途中で
まず、フォルダー自体を作成する必要があります。 いいえ、手動では行いません...必要なのは、otdelK.txtという名前のファイルにテキストファイルを作成し、その中にIvanovI PetrovVという行を追加することだけです。 スクリプトはこのケースをどのように解析しますか? 非常に単純です-ファイル名は部門/ユニットの名前として、行は英国の従業員の名前として使用されます。 .txtファイルのコンパイルは、手動で、または何らかの形で自動的にユーザーの裁量で行われます。
フォルダー作成のまさにロジック:
CreateFolders(){ mkdir "$ PP" `ls -l $ catname / *。txtのファイル名| awk '{print $ NF}' '; する group = `basename" $ filename ".txt` mkdir "$ PP / $グループ" `cat" $ filename "`のユーザー用。 する mkdir "$ PP / $グループ/ $ユーザー" CreateShare "$グループ" "$ユーザー" PermissionsAssignment "$ group" "$ user" やった やった }
これは実際には、ディレクトリ構造を作成するためのトリッキーな方法ではありません(もちろんフルバージョンでは、あらゆる種類のチェックがたくさんあります)。 ディレクトリ$ catnameは、その中のtxtファイルをスキャンしてからソートされます。 $ PP変数には、すべてが作成されるフォルダーへのパスが含まれます。
各個人フォルダを作成した後、「通話中の名前」を含む2つの関数の呼び出しに気付く場合があります。 その内容を考慮してください。
CreateShare(){ ユーザー名= "$ 2" ou = "$ 1" grep -wi '\ [' $ username '\]' "$ SC"> / dev / null if ["$?" -ne 0]; それから echo -e "[$ユーザー名] パス= \ "$ PP / $ ou / $ユーザー名\" 有効なユーザー= \ "@ $ DN \\ $ AG \"、\ "$ DN \\ $ユーザー名\" 管理ユーザー= \ "@ $ DN \\ $ AG \" 閲覧可能=いいえ comment = \ "プライベートドキュメント%U \" public =いいえ 書き込み可能=はい 読み取り専用=いいえ マスクの作成= 0700 ディレクトリマスク= 0700 権限を継承する=はい aclsを継承=はい 所有者を継承=はい vfsオブジェクト=リサイクル リサイクル:リポジトリ= .Trash リサイクル:バージョン=はい リサイクル:keeptree = Yes リサイクル:exclude = * .TMP * .tmp〜* ">>" $ SC " echo "ユーザー$ユーザー名のフォルダーは共有されています" | tee -a "$ log" 他に echo "情報:ユーザー$ usernameの共有は既に存在します" | tee -a "$ log" 警告= true fi }
この関数は、departmentとusernameの2つの引数で呼び出します。 彼のためにボールが既に存在するかどうかを確認し、存在しない場合は作成します。 公式のmanページとロシア語の両方で各パラメーターの値を確認できます。 すべてのルールは、ユーザーがフォルダーにフルアクセスできることを保証することを目的としていますが、フォルダー内のアクセス許可は変更できません。 また、バスケットがユーザーに割り当てられていることにも気付くことができます。 ネットワークフォルダーから削除したものはすべて、ネットワークバスケットに入れられます(ネットワーク上のバスケットにアクセスできるのは私だけです)。 これらのフォルダーはすべて、ログイン時にvbsスクリプトを介してユーザーに接続されます。
ここで、smb.confから数行を思い出してください。
ストアdos属性=はい map acl inherit =はい aclグループコントロール=いいえ dos filemode =いいえ #POSIX「rwx」はWindows rwxにマップされ、フルコントロールではありません acl map full control =いいえ<---ここで、非常に重要なパラメーターが役立ちました。
次に、作成したディレクトリにシステムの権限を割り当てる必要があります。
PermissionsAssignment(){ パス= "$ PP / $ 1 / $ 2 /" chown "$ AU": "$ AG" -R "$パス" chmod 0770 -R "$パス" chmod g + s -R "$パス" setfacl -bR "$パス" setfacl -R -mm :: rwx "$パス" setfacl -nR -mu: "$ 2":rwx "$パス" }
ここで、xfsprogsパッケージが必要であることがすぐに明らかになります。これには、Linuxで高度な属性を管理するためのsetfaclおよびgetfaclユーティリティが含まれています。 このユーティリティギミックはすべて同じ目的で作成されます-ユーザーから権限を変更する権限を奪うためです。 実際には、「個人文書」の場合、これは重要ではなく、MBは不要ですらありますが、それなしでは共有ネットワークリソースを編成することは不可能です。
おわりに
この記事は、平均的な知識レベルを対象に設計されており、初心者の達人になることを意図したものではありません。
このスクリプトは、部門のマルチレベル階層を提供しません(個々のアプリケーションに追加されます)。 スクリプトに「愚か者からの保護」を最大限に詰め込もうとしましたが、この記事を書いている時点でもそれを行いましたが、すべてを予見することはできません。 内部のスクリプトには、自分で修正する必要のあるいくつかのパラメーターが含まれていますが、見つけるのは難しくありません;-)。 引数としてスクリプトに渡すこともできますが、大きな制限はありません。getoptsにスペース付きの引数を受け入れるように教える方法
スクリプトとsmb.confの全文が添付されています: スクリプト smb.conf
PS smb.confは非常に適切です。 スクリプト自体は、あらゆる種類のチェックと「if」のためにかなり扱いにくいことが判明しました。 また、狭いタスク用に作成され、少し統一されたため、完全な汎用ソリューションのふりをしていません。