نمایش نتایج 1 تا 6 از 6

نام تاپیک: آموزش نحوه اتصال به یک پوشه شیر شده در با یوزری متفاوت باآنچه به ویندوز واردشدید(impersonate a user)

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    90

    Lightbulb آموزش نحوه اتصال به یک پوشه شیر شده در با یوزری متفاوت باآنچه به ویندوز واردشدید(impersonate a user)

    سلام

    من مدتها توی این سایت و سایتهای دیگه دنبال روشی میگشتم که با آن بتونم به یک پوشه در شبکه با یوزری متفاوت با اونکه به ویندوز وارد شدیم متصل بشم و سوالها پرسید و به نتیجه نرسیدم تا بالاخره بعد از مدتها اون توی یک سایت لاتین یافتم.(اینم رعایت حق کپی رایت)
    البته زیاد از اینکه چه جوری عمل میکنه سر در نمیارم ولی بدرستی کار میکنه.
    حالا اینجا میزارم که دوستانی که مثل من دنبالش بودن ازش برای بالابردن امنیت اطلاعات در برنامشون استفاده کنن:

    اول باید یک کلاس جدید بسازیم و این کدها رو داخل بریزیم (البته خط 7 و 8 رو بدلیل اینکه وارنینگ میداد حذف کردم و خللی وارد نشد) :

    Imports System
    Imports System.Runtime.InteropServices
    Imports System.Security.Principal
    Imports System.Security.Permissions
    Imports Microsoft.VisualBasic

    <Assembly: SecurityPermissionAttribute(SecurityAction.Request Minimum, UnmanagedCode:=True), _
    Assembly: PermissionSetAttribute(SecurityAction.RequestMinim um, Name:="FullTrust")>

    Public Class RunAs_Impersonator
    #Region "Private Variables and Enum Constants"
    Private tokenHandle As New IntPtr(0)
    Private dupeTokenHandle As New IntPtr(0)
    Private impersonatedUser As WindowsImpersonationContext
    #End Region
    #Region "Properties"

    #End Region
    #Region "Public Methods"
    Public Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal handle As IntPtr) As Boolean
    Public Declare Auto Function DuplicateToken Lib "advapi32.dll" (ByVal ExistingTokenHandle As IntPtr, _
    ByVal SECURITY_IMPERSONATION_LEVEL As Integer, _
    ByRef DuplicateTokenHandle As IntPtr) As Boolean
    ' Test harness.
    ' If you incorporate this code into a DLL, be sure to demand FullTrust.
    <PermissionSetAttribute(SecurityAction.Demand, Name:="FullTrust")> _
    Public Sub ImpersonateStart(ByVal Domain As String, ByVal userName As String, ByVal Password As String)
    Try
    tokenHandle = IntPtr.Zero
    ' Call LogonUser to obtain a handle to an access token.
    Dim returnValue As Boolean = LogonUser(userName, Domain, Password, 2, 0, tokenHandle)
    'check if logon successful

    If returnValue = False Then
    Dim ret As Integer = Marshal.GetLastWin32Error()
    Console.WriteLine("LogonUser failed with error code : {0}", ret)
    Throw New System.ComponentModel.Win32Exception(ret)
    Exit Sub

    End If
    'Logon succeeded
    ' Use the token handle returned by LogonUser.
    Dim newId As New WindowsIdentity(tokenHandle)
    impersonatedUser = newId.Impersonate()
    Catch ex As Exception

    Throw ex
    Exit Sub
    End Try

    End Sub
    <PermissionSetAttribute(SecurityAction.Demand, Name:="FullTrust")> _
    Public Sub ImpersonateStop()
    ' Stop impersonating the user.

    impersonatedUser.Undo()
    ' Free the tokens.
    If Not System.IntPtr.op_Equality(tokenHandle, IntPtr.Zero) Then
    CloseHandle(tokenHandle)
    End If

    End Sub
    #End Region
    #Region "Private Methods"
    Private Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As [String], _
    ByVal lpszDomain As [String], ByVal lpszPassword As [String], _
    ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, _
    ByRef phToken As IntPtr) As Boolean
    <DllImport("kernel32.dll")> _
    Public Shared Function FormatMessage(ByVal dwFlags As Integer, ByRef lpSource As IntPtr, _
    ByVal dwMessageId As Integer, ByVal dwLanguageId As Integer, ByRef lpBuffer As [String], _
    ByVal nSize As Integer, ByRef Arguments As IntPtr) As Integer
    End Function
    #End Region
    End Class


    و هرجای برنامه که خواستیم برناممون با یک یوزر جدید به شبکه وصل بشه از کد زیر استفاده میکنیم:

    Dim imp As New RunAs_Impersonator '(somewhere in your declarations)

    imp.ImpersonateStart("YourDomain", "UserName", "UserPassword")



    و هرجا خواستم دوباره به حالت اول برگرده از این کد استفاده می کنیم :

    imp.ImpersonateStop()


    حالا میتونید یه پوشه تو سرورتون بسازید (مثلا پوشه ای که عکسها و یا مدارک پرسنلی رو که لازم دارید تو برنامتون نمایش بده رو توش بریزید) و بعد اونرو شیر کنید و توی پرمیشنش فقط یوزری رو که برناممون قراره وارد کنه اد کنید و بقیه رو پاک کنید. به این ترتیب کاربر وقتی وارد ویندوز میشه نمیتونه به محتویات پوشتون دسترسی پیدا کنه و فقط و فقط برناتون میتونه دسترسی داشته باشه.

    راستی تا یادم نرفته باید یک یوزر و پسورد مشابه هم توی کامپیوترتون (کلاینت) و هم توی سرور ایجاد کنید و توی برنامتون ازش استفاده کنید.
    همین نکته مدتها منو سرکار گذاشته بود و من فقط توی سرور میساختم یوزر نیم و پسورد رو و توی کلاینت نمیساختم و سیستم عمل نمیکرد و اتفاقی به این روش (خودساخته) رسیدم. البته منتطقا باید همون توی سرور کافی باشه ولی نیست اگه کسی از اساتید میدونه بفرماید تا ماهم بیاموزیم.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    سربداران
    پست
    143

    نقل قول: آموزش نحوه اتصال به یک پوشه شیر شده در با یوزری متفاوت باآنچه به ویندوز واردشدید(impersonat

    با سلام و با تشكر از دوست عزيز ehsanvb من يه سوال داشتم من توي سرورم براي هر كلاينت يه پوشه درست كردم كه فقط همون كابر بتونه به اون دسترسي داشته باشه و مدير سيستم كه خودمم حالا فرض كنيد من رفتن پشت كامپيوتر كاربر 1 در نتيجه فقط به پوشه اون دسترسي دارم و اگر بخوام از پوشه كاربر 2 يه فايلي رو بردارم ديگه نمي تونم بايد لوگ آف كنم و با يوزر خودم بيام بالا و به اون پوشه دسترسي داشته باشم حالا مي خوام يه كد داشته باشم كه با وارد كردن يوزر و پسورد خودم كه مدير سيستم هستم بدون لوگ آف به پوشه كاربراي ديگه دسترسي داشته باشم من نتونستم با اين كد جواب بگيرم ممنون ميشم راهنمايي كنيد.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    سربداران
    پست
    143

    نقل قول: آموزش نحوه اتصال به یک پوشه شیر شده در با یوزری متفاوت باآنچه به ویندوز واردشدید(impersonat

    دوستان من بي صبرانه منتظر كمك شمام

  4. #4
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    90

    نقل قول: آموزش نحوه اتصال به یک پوشه شیر شده در با یوزری متفاوت باآنچه به ویندوز واردشدید(impersonat

    نقل قول نوشته شده توسط msh_gold مشاهده تاپیک
    با سلام و با تشكر از دوست عزيز ehsanvb من يه سوال داشتم من توي سرورم براي هر كلاينت يه پوشه درست كردم كه فقط همون كابر بتونه به اون دسترسي داشته باشه و مدير سيستم كه خودمم حالا فرض كنيد من رفتن پشت كامپيوتر كاربر 1 در نتيجه فقط به پوشه اون دسترسي دارم و اگر بخوام از پوشه كاربر 2 يه فايلي رو بردارم ديگه نمي تونم بايد لوگ آف كنم و با يوزر خودم بيام بالا و به اون پوشه دسترسي داشته باشم حالا مي خوام يه كد داشته باشم كه با وارد كردن يوزر و پسورد خودم كه مدير سيستم هستم بدون لوگ آف به پوشه كاربراي ديگه دسترسي داشته باشم من نتونستم با اين كد جواب بگيرم ممنون ميشم راهنمايي كنيد.
    سلام

    این نمونه ای که من گذاشتم برای دسترسی به فایلها فقط توسط خود برنامه است و اجازه دسترسی برای اتصال ویندوز اکسپلورر رو نمیده ،
    برای اینکاری که شما میخواهید انجام دهید به نظر من دو راه وجود داره:

    1- یه راهی پیدا کنی که فایلهای داخل پوشه مورد نظر رو داخل برنامه نمایش بده و از اونطریق شاید بشه یکاری کرد.

    2- در این لینک یه سری توضیحات با عنوان Start Process as different user داده شده که با استفاده از آن شاید بشه یه کارهایی کرد .

    امیدوارم به جوابت برسی (اگه رسیدی بذار اینجا تا بقیه هم استفاده کنن)

  5. #5

    نقل قول: آموزش نحوه اتصال به یک پوشه شیر شده در با یوزری متفاوت باآنچه به ویندوز واردشدید(impersonat

    البته برادران گرامی کنترل DirectoryEntry در وین فرم هم واسه همین کاره،نام کاربری و پسورد میگیره و لاگین میکنه به یه پوشه روی اکتیو دایرکتوری،احتیاجی به این همه کد نمی بینم!!!!!

  6. #6

    نقل قول: آموزش نحوه اتصال به یک پوشه شیر شده در با یوزری متفاوت باآنچه به ویندوز واردشدید(impersonat

    سلام گل پسر
    لازم به ایجاد کلمه کاربری و رمز عبور در کلاینت نیست .. توی همون سرور کافیه
    فقط همین بس که شما کلمه کاربری و رمز عبور در سروری که پوشه شیر شده وجود داره رو بدونی ... حالا توی برنامت ؛ توی متد logonuser یه عدد 2 نوشتی که همانا LOGON32_LOGON_INTERACTIVE هستش .. شما بجای 2 از عدد 9 استفاده کن که همانا LOGON32_LOGON_NEW_CREDENTIALS می باشد و حالشو ببر

تاپیک های مشابه

  1. سوال: درخواست آموزش نحوه اتصال به بانک اکسس (.accdb) ؟
    نوشته شده توسط mohammadriano در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 1
    آخرین پست: دوشنبه 29 خرداد 1391, 04:38 صبح
  2. پاسخ: 3
    آخرین پست: شنبه 06 خرداد 1391, 18:37 عصر
  3. آموزش نحوه گرفتن رشته هایی که با spase جدا شده اند
    نوشته شده توسط رامین مرادی در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 0
    آخرین پست: دوشنبه 04 اردیبهشت 1391, 11:16 صبح
  4. سوال: نحوه اتصال به اسكنر و ذخيره فايل اسكن شده
    نوشته شده توسط atiyeh در بخش C#‎‎
    پاسخ: 3
    آخرین پست: شنبه 25 تیر 1390, 17:05 عصر
  5. پاسخ: 3
    آخرین پست: چهارشنبه 28 بهمن 1388, 11:35 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •