আমি পাওয়ার পাওয়ারের মাধ্যমে আইআইএস অ্যাপ্পল O * অ্যাকাউন্টগুলির জন্য এসিএল অনুমতিগুলি কীভাবে যুক্ত করতে পারি?


11

নতুন ওয়েবসাইটগুলির পরিবর্তনের অনুমতি পাওয়ার জন্য আমি আইআইএস অ্যাকাউন্ট সেট করতে সক্ষম হতে চাই। আমার কাছে নিম্নলিখিত স্ক্রিপ্ট রয়েছে:

function Set-ModifyPermission ($directory, $username, $domain = 'IIS APPPOOL') {
    $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
    $propagation = [system.security.accesscontrol.PropagationFlags]"None"
    $acl = Get-Acl $directory
    $user = New-Object System.Security.Principal.NTAccount($domain, $username )
    $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($user, "Modify", $inherit, $propagation, "Allow")
    $acl.AddAccessRule($accessrule)
    set-acl -aclobject $acl $directory
}

যাইহোক, আমি যখন এটি চালনা করি তখন আমি এ জাতীয় ত্রুটিগুলি পেয়েছি:

সেট-এসিএল: এই ওয়ার্কস্টেশন এবং প্রাথমিক ডোমেনের মধ্যে বিশ্বাসের সম্পর্ক ব্যর্থ।

আমি মনে করি এটি কারণ IIS APPPOOLপ্রকৃত ডোমেন নয়, তবে এটি এক ধরণের জাল অ্যাকাউন্টের একটি অদ্ভুত উপসর্গ। এই অ্যাকাউন্টটি উল্লেখ করার মতো কোনও সঠিক উপায় আছে যাতে আমি এই কাজটি করতে পারি?

উত্তর:


12

প্রথমত, সেট-অ্যাকিল ব্যবহার করুন এটির মতো ডিরেক্টরি পথটি প্রথম অবস্থানগত আর্গুমেন্ট:

Set-Acl $directory $acl

দ্বিতীয়ত, আপনার কেবলমাত্র একটি যুক্তি দিয়ে ব্যবহারকারী অবজেক্টটি তৈরি করা উচিত:

$user = New-Object System.Security.Principal.NTAccount("$domain\\$username")

আপডেট: দেখে মনে হচ্ছে এটি "আইআইএস অ্যাপ্পল \ অ্যাপপুলনাম" কে এনটিএকাউন্ট শনাক্তকারী হিসাবে গ্রহণ করবে না। এখন, আপনি যা করতে চেষ্টা করছেন তা সম্পাদন করার দুটি উপায় রয়েছে:

  1. অ্যাপপুলআইডেন্টিটিস এসআইডি দিয়ে একটি নতুন এসআইডি অবজেক্ট তৈরি করুন এবং এটি এনটিএকাউন্টে অনুবাদ করুন, এটির মতো: http://iformattable.blogspot.com/2007/12/convert-sid-to-ntaccount-with.html এবং আপনি সক্ষম হবেন এটি অন্য কোনও এনটিএ অ্যাকাউন্ট অ্যাকাউন্টের মতো আচরণ করে। আপনি যদি এখনও রিয়েল অ্যাকাউন্টগুলির জন্য ডোমেন / ব্যবহারকারীর নাম পাস করতে সক্ষম হতে চান তবে কিছু সাধারণ যুক্তিতে নির্মিত যা ব্যবহারকারীর নাম "অ্যাভেসোম অ্যাপপুল" এবং ডোমেইন খালি থাকলে অ্যাপল পুল এসআইডি-তে ডিফল্ট থাকে।

  2. আইস্যাকএল.এক্স.কে অনুরোধ করার জন্য পাওয়ারশেল ব্যবহার করুন এবং আপনি যা চান তার অনুমতি / প্রত্যাহার করতে এটি ব্যবহার করুন (যেমন প্রথম সাধারণ আইক্যাকলস কমান্ড প্রম্পট গঠন করে, তারপরে পাওয়ারশেল, পার্থক্যটি লক্ষ্য করুন):

    icacls.exe test.txt /grant "IIS AppPool\DefaultAppPool":(OI)(CI)M

    cmd /c icacls test.txt /grant "IIS AppPool\DefaultAppPool:(OI)(CI)M"

আপনি যদি দ্বিতীয় বিকল্পটিতে যান তবে প্রথমে সেগুলি নিজেই পরীক্ষা করে নেওয়ার বিষয়টি নিশ্চিত করুন, আমি এই নির্দিষ্ট উদাহরণগুলি নিজেই পরীক্ষা করার সুযোগ পাইনি, তবে এটি কাজ করা উচিত


সাহায্যের জন্য ধন্যবাদ. এটি করে, আমি একটি ব্যতিক্রম কল পেয়েছি AddAccessRule: "কিছু বা সমস্ত পরিচয়ের উল্লেখগুলি অনুবাদ করা যায়নি।" কোন ধারণা কি হতে পারে?
বিডুকস

আপনি এখানে কী অর্জন করতে চাইছেন তা বুঝতে আমাকে সহায়তা করার চেষ্টা করুন। বিষয়টি হ'ল, অ্যাপ্লিকেশনপুল আইডেন্টিটিগুলি "রিয়েল" এনটি অ্যাকাউন্ট নয়, এগুলি প্রকৃতপক্ষে নেটওয়র্ক সার্ভিসের উপস্থাপনের মতো "ভার্চুয়াল অ্যাকাউন্ট" এর মতো। আপনি কি স্থানীয় সিস্টেম সংস্থান বা নেটওয়ার্ক সংস্থানগুলিতে অনুমতি সেট করতে চান না? আপনার প্রয়োজনের উপর নির্ভর করে, একটি পৃথক চ্যালেঞ্জ উত্থাপিত হবে :-)
ম্যাথিয়াস আর জেসেন

স্থানীয় সিস্টেমের সংস্থান। আমি যে স্থানীয় সেটআপ সেটআপ করি সেগুলির জন্য সেটিং / পুনরায় সেট করার অনুমতিগুলি স্ট্রিমলাইন করার চেষ্টা করছি। সুতরাং, আমি ফাইল সিস্টেমে একটি ওয়েবসাইট প্যাকেজ আনজিপ করব, এটি আইআইএসে সেট আপ করব, তারপরে আইআইএস পরিবর্তন করার অনুমতি দেওয়ার জন্য এই কমান্ডটি চালান। অথবা, সাইটের কোনও অনুমতি ইস্যুতে চালনা করুন, সাইটটি তৈরি হওয়ার পরে আমি যে কোনও কিছু যুক্ত করেছি তা নিশ্চিত করার জন্য এটি চালান অনুমতি অনুমতি পরিবর্তন করেছে।
বিডুকস

আপনার জন্য
সবেমাত্র আশাবাদী

আমি icaclsআমার জন্য দুর্দান্ত কাজ করতে সক্ষম হয়েছি, সহায়তার জন্য ধন্যবাদ! আমি ফাংশন (উপরে হিসাবে একই পরামিতি) হচ্ছে শরীর সঙ্গে শেষ পর্যন্ত cmd /c icacls "$directory" /grant ("$domain\$username" + ':(OI)(CI)M') /t /c /q(সঙ্গে /tকাজ যাও recursively ডিরেক্টরির উপর, /cযাচ্ছে কোনো ত্রুটি পর, এবং রাখার /qপ্রতিটি ফাইলের জন্য দমন সাফল্য বার্তা)।
বিডুকস

4

এই জাতীয় কিছু আপনার জন্য কৌশল করা উচিত। এটি আইআইএস অ্যাপপুল \ যেকোনো কিছু সমাধান করার পক্ষে সক্ষম হতে হবে ...

function Set-AclOnPath
{
    param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $Path,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $DomainAccount
    )

    #Put whatever permission you want here
    $permission = $DomainAccount,"ReadAndExecute","Allow"
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission

    $acl = Get-Acl $Path
    $acl.SetAccessRule($accessRule)
    $acl | Set-Acl $Path
}

আমি একটি ব্যতিক্রমী কলিং পেয়েছি SetAccessRule: "কিছু বা সমস্ত পরিচয়ের উল্লেখগুলি অনুবাদ করা যায়নি।"
বিডুকস

আপনার ইনপুট কি ছিল?
হাইথাম আবুয়েলফুটুহ

Set-AclOnPath .\Website "IIS APPPOOL\website.dev"যদিও আমি আবার চেষ্টা করার পরে, আমি একটি ভিন্ন ত্রুটি পেয়েছি, "এই ওয়ার্কস্টেশন এবং প্রাথমিক ডোমেনের মধ্যে বিশ্বাসের সম্পর্ক ব্যর্থ হয়েছে।"
bdukes

4

আইআইএস সাইটের জন্য এসআইডি পাওয়ার জন্য উইন্ডোজ 2012-এ নিম্নলিখিতগুলি কাজ করে। এটির জন্য আইআইএস সরবরাহকারী প্রয়োজন যা ওয়েবএডমিনিস্ট্রেশন পাওয়ারশেল মডিউলটি ব্যবহার করে তবে এই নিবন্ধটি ইঙ্গিত দেয় যে এটি উইন্ডোজ 2008 আর 2 এ কাজ করবে।

$appPoolName = 'MyAppPool'
$appPoolSid = (Get-ItemProperty IIS:\AppPools\$appPool).applicationPoolSid
$identifier = New-Object System.Security.Principal.SecurityIdentifier $appPoolSid
$user = $identifier.Translate([System.Security.Principal.NTAccount])

আমি এই পদ্ধতিটি ব্যবহার করার চেষ্টা করেছি (উইন্ডোজ 8 এ), তবে এই ত্রুটিটি পেয়েছে: " AddAccessRule'1' আর্গুমেন্ট (গুলি) সহ '' কলিং ব্যতীত : 'কিছু বা সমস্ত পরিচয় উল্লেখগুলি অনুবাদ করা যায়নি'"
বিডুকস

এসআইডিকে সত্যিকারের রুপে অনুবাদ করার জন্য @ ম্যাথিয়াস আর জেসেনের উত্তর থেকে লিঙ্কটি ব্যবহার করে NTAccount
বিডুকস

অনুবাদটি করার জন্য আমি উত্তরটি কোড আপডেট করেছি। এছাড়াও, যারা এর সদ্ব্যবহার করার চেষ্টা করছেন তাদের জন্য Import-Module WebAdministrationআইআইএস সরবরাহকারীর কাছ থেকে আইআইএস ড্রাইভটি পেতে কল করুন ।
বিডুকস

3

আইআইএস 10 / উইন্ডোজ 10 / সার্ভার 2016 হিসাবে, ওয়েবএডমিনিস্ট্রেশন মডিউলটি অবচয় করা হয়েছে এবং আমরা পরিবর্তে নতুন আইআইএসএডমিনিস্ট্রেশন পাওয়ারশেল মডিউলটি ব্যবহার করব বলে আশা করি। নতুন মডিউলটি ব্যবহার করে ভার্চুয়াল ব্যবহারকারীর কাছে অ্যাপ্লিকেশন পুল এসআইডি অনুবাদ করার পদ্ধতিটি এখানে পাবেন:

Import-Module IISAdministration
$manager = Get-IISServerManager
$appPoolName = 'MyAppPool'
$appPoolSid = $manager.ApplicationPools["$appPoolName"].RawAttributes['applicationPoolSid']
$identifier = New-Object System.Security.Principal.SecurityIdentifier $appPoolSid
$user = $identifier.Translate([System.Security.Principal.NTAccount])

2

নিম্নলিখিতগুলি উইন্ডোজ ২০১২ সালে আমার জন্য কাজ করেছে, অন্যান্য উদাহরণগুলি কাজ করতে পারে না:

Import-Module WebAdministration

$appPoolName='MyAppPool'
$folderDirectory='C:\MyWebFolder'

$appPoolSid = (Get-ItemProperty IIS:\AppPools\$appPoolName).applicationPoolSid

Write-Output "App Pool User $appPoolSid"

$identifier = New-Object System.Security.Principal.SecurityIdentifier $appPoolSid
$user = $identifier.Translate([System.Security.Principal.NTAccount])

Write-Output "Translated User $user.Value"

$acl = Get-Acl $folderDirectory
$acl.SetAccessRuleProtection($True, $False)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,”FullControl”, ContainerInherit, ObjectInherit”, None”, Allow”)
$acl.AddAccessRule($rule)
$acl | set-acl -path $folderDirectory

এটি আমার পক্ষে একটি জিনিস ছাড়াও কাজ করেছিল। এটি অন্যান্য সমস্ত অনুমতি সরিয়ে দিয়েছে। আপনি যদি যা চান তা যদি না হয় তবে এই লাইনটি $acl.SetAccessRuleProtection($True, $False)এখানে সর্বশেষ পরম হিসাবে সংরক্ষণ করুন হিসাবে সংরক্ষণ করুন her এই পোস্ট করার জন্য ধন্যবাদ!
কুর্তিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.