Итак, группы админов здесь (S-1-5-32-544) нет, зато есть ограниченные юзеры (S-1-5-32-545). Зато в правах наоборот — юзеров нет, а есть доступ системе, админам и себе, любимому. Вот, собственно, и ответ — данному пользователю без элевации доступ запрещён. Чтобы работало, надо дать доступ Users, только не надо давать полный, дайте только нужное. Чтения, я думаю, хватит.
JR>Итак, группы админов здесь (S-1-5-32-544) нет, зато есть ограниченные юзеры (S-1-5-32-545). Зато в правах наоборот — юзеров нет, а есть доступ системе, админам и себе, любимому. Вот, собственно, и ответ — данному пользователю без элевации доступ запрещён. Чтобы работало, надо дать доступ Users, только не надо давать полный, дайте только нужное. Чтения, я думаю, хватит.
Здравствуйте, Lloyd, Вы писали:
L>Если не затруднит, можно определения LogonType, LogonProvider, SecurityAttributes, DuplicateTokenEx, MaximumAllowed, SecurityImpersonationLevel, TokenType?
private enum LogonType
{
/// <summary>
/// This logon type is intended for users who will be interactively using the computer, such as a user being logged on
/// by a terminal server, remote shell, or similar process.
/// This logon type has the additional expense of caching logon information for disconnected operations;
/// therefore, it is inappropriate for some client/server applications,
/// such as a mail server.
/// </summary>
LogonInteractive = 2,
/// <summary>
/// This logon type is intended for high performance servers to authenticate plaintext passwords.
/// The LogonUser function does not cache credentials for this logon type.
/// </summary>
LogonNetwork = 3,
/// <summary>
/// This logon type is intended for batch servers, where processes may be executing on behalf of a user without
/// their direct intervention. This type is also for higher performance servers that process many plaintext
/// authentication attempts at a time, such as mail or Web servers.
/// The LogonUser function does not cache credentials for this logon type.
/// </summary>
LogonBatch = 4,
/// <summary>
/// Indicates a service-type logon. The account provided must have the service privilege enabled.
/// </summary>
LogonService = 5,
/// <summary>
/// This logon type is for GINA DLLs that log on users who will be interactively using the computer.
/// This logon type can generate a unique audit record that shows when the workstation was unlocked.
/// </summary>
LogonUnlock = 7,
/// <summary>
/// This logon type preserves the name and password in the authentication package, which allows the server to make
/// connections to other network servers while impersonating the client. A server can accept plaintext credentials
/// from a client, call LogonUser, verify that the user can access the system across the network, and still
/// communicate with other servers.
/// NOTE: Windows NT: This value is not supported.
/// </summary>
LogonNetworkCleartext = 8,
/// <summary>
/// This logon type allows the caller to clone its current token and specify new credentials for outbound connections.
/// The new logon session has the same local identifier but uses different credentials for other network connections.
/// NOTE: This logon type is supported only by the LOGON32_PROVIDER_WINNT50 logon provider.
/// NOTE: Windows NT: This value is not supported.
/// </summary>
LogonNewCredentials = 9,
}
private enum LogonProvider
{
/// <summary>
/// Use the standard logon provider for the system.
/// The default security provider is negotiate, unless you pass NULL for the domain name and the user name
/// is not in UPN format. In this case, the default provider is NTLM.
/// NOTE: Windows 2000/NT: The default security provider is NTLM.
/// </summary>
Logon32ProviderDefault = 0,
}
private enum SecurityImpersonationLevel
{
/// <summary>
/// The server process cannot obtain identification information about the client,
/// and it cannot impersonate the client. It is defined with no value given, and thus,
/// by ANSI C rules, defaults to a value of zero.
/// </summary>
SecurityAnonymous = 0,
/// <summary>
/// The server process can obtain information about the client, such as security identifiers and privileges,
/// but it cannot impersonate the client. This is useful for servers that export their own objects,
/// for example, database products that export tables and views.
/// Using the retrieved client-security information, the server can make access-validation decisions without
/// being able to use other services that are using the client's security context.
/// </summary>
SecurityIdentification = 1,
/// <summary>
/// The server process can impersonate the client's security context on its local system.
/// The server cannot impersonate the client on remote systems.
/// </summary>
SecurityImpersonation = 2,
/// <summary>
/// The server process can impersonate the client's security context on remote systems.
/// NOTE: Windows NT: This impersonation level is not supported.
/// </summary>
SecurityDelegation = 3,
}
private enum TokenType
{
TokenPrimary = 1,
TokenImpersonation
}
[StructLayout(LayoutKind.Sequential)]
private struct SecurityAttributes
{
public int Length;
public IntPtr SecurityDescriptor;
public int InheritHandle;
}
public sealed class ImpersonatedAction<T>
{
// ------------- Nested Types -------------
// ------------- Fields -------------private readonly string _name;
private readonly Func<T> _func;
// ------------- .ctors -------------public ImpersonatedAction(string name, Func<T> func)
{
_name = name;
_func = func;
}
// ------------- Events -------------
// ------------- Methods -------------public override string ToString()
{
return Name;
}
// ------------- Properties -------------public Func<T> Func
{
get
{
return _func;
}
}
private string Name
{
get
{
return _name;
}
}
// ------------- Interface Implementation -------------
}
// ReSharper enable UnusedMember.Local
// ------------- Fields -------------
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool LogonUser(
string lpszUsername,
string lpszDomain,
string lpszPassword,
int dwLogonType,
int dwLogonProvider,
out IntPtr phToken
);
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool DuplicateTokenEx(
IntPtr existingTokenHandle,
int dwsDesiredAccess,
ref SecurityAttributes lpTokenAttributes,
SecurityImpersonationLevel dwsSecurityImpersonationLevel,
TokenType tokenType,
out IntPtr duplicateToken);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);
private const int MaximumAllowed = 0x02000000;
Здравствуйте, Lloyd, Вы писали:
JR>>Ещё страннее. А на этот файл Вы настройки безопасности посмотрели?
L>Да ничего особенного нет.
А "не особенное" что-нибудь есть?
L>Похоже я чего-то в этой жизни не понимаю.
L>Есть пользователь A, находясь в учетке которого я через runas запускаю новую консоль с правами пользователя B (локальный админ). L>В настройках домашнего каталога пользователя A прописано, что админы имеют полный доступ. L>Пытаюсь перейти в консоли в домашний каталог пользователя A и получаю отлуп (Access is denied).
L>Чё за фигня? Я же админ! Так и должно быть???
Насколько мне известно, под UAC без элевации членство в группе админов отключается. Также отключаются некоторые привилегии, но я не припомню, чтобы сюда входила SeChangeNotify, надо-бы поискать в MSDN. Если правильно помню, через WindowsIdentity или IdentityReferense можно получить список групп, в которые входит пользователь. Попробйте их получить и выложите сюда.
Здравствуйте, Lloyd, Вы писали:
L>Я уже посмотрел. Валится с ACCESS DENIED при попытке доступа к bin\Debug\ConsoleApplication1.exe.config.
Ещё страннее. А на этот файл Вы настройки безопасности посмотрели?
L>Может как-то можно принудительно поднять (elevate) права текущего пользователя до админа?
Поднять-то можно, только плохой это путь, неправильный. Вы уверены, что он всегда будет администротором, у всех пользователей? Я бы на это не закладывался. Надо-бы разобраться, почему так не работает. Может у Вас слишком жёсткие настройки на папку, в которой этот ConsoleApplication1.exe.config?
PS Никогда не пишу программы под админом, с тех пор как на W2k с Me персел, во избежании подобных "чудес".
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, vmpire, Вы писали:
JR>>>>И всё-же — "Access is denied". Я думаю, копать надо всё-таки в эту сторону. Ведь без имперсонации она грузится? А что поменялось? Только права текущего пользователя.
L>>>Я не представляю, как в это сторону копать. Я уже дал пользователю права админа на локальной машине. V>>А может это UAC в Windows 7? C ним админа может быть недостаточно. V>>Попробуйте явно пользователю дать права на всё в качестве эксперимента. Или покрутить настройки UAC.
L>Отключил UAC, перегрузился, вроде заработало. Но, блин, это же не вариант, должен быть какой-то нормальный способ.
Здравствуйте, Lloyd, Вы писали:
L>Privileges: SeSecurityPrivilege L> SeTakeOwnershipPrivilege L> SeLoadDriverPrivilege L> SeBackupPrivilege L> SeRestorePrivilege L> SeDebugPrivilege L> SeSystemEnvironmentPrivilege L> SeImpersonatePrivilege
L>SeChangeNotify тут нет. Что это такое? Как его можно включить?
Это уже любопытно. Это привилегия "двойного назначения". Она, как следует из имени, позволяет получать извещения от файловой системе, а в дополнение позволяет выполнить обход перекрёстной проверки. Или, если человеческим языком, она позволяет получить доступ с "C\Folder1\Folder2\SomeFile.exe" даже если Вам запрещён доступ к Folder1. Она должна быть умолчанию у всех пользователей, более того, она по умолчанию включена у всех пользователей. Отсутствие её у Вашего пользователя уже настораживает. Попробуйте временно создать нового пользователя, не входящего в админы и имперсонироваться под ним.
Да, включить привилегию можно через политики — права пользователей, по-русски — "обход перекрёстной проверки".
PS Написанное справедливо для XP и ранних, для висты и семёрки надо проверять.
Кому нибудь доводилось использоват LogonUser в .net-ных приложениях?
Не понимаю, почему не работаеь даже примитивный пример:
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool LogonUser(string username, string domain, string password, int logonType, int logonProvider, ref IntPtr token);
public static WindowsImpersonationContext Logon(string domainName, string userName, string password) {
IntPtr tokenHandle = IntPtr.Zero;
LogonUser(userName, domainName, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle);
var windowsIdentity = new WindowsIdentity(tokenHandle);
return windowsIdentity.Impersonate();
}
static void Main() {
using (Logon(_DOMAIN_NAME, _USER_NAME, _PASSWORD)) {
Test();
}
}
private static void Test() {
Console.WriteLine(typeof(DataSet));
Class1.Test();
}
на выходе:
Unhandled Exception: System.IO.FileLoadException: Could not load file or assembl
y 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e08
9' or one of its dependencies. Access is denied.
at ConsoleApplication1.Program.Test()
at ConsoleApplication1.Program.Main()
Press any key to continue . . .
Как он может System.Data.dll не находить? Она же в GAC-е и должен быть видна всем.
Пользователь — доменный, состоит в локальных админах, пароль — правильный (runas успешно отрабатывает).
Здравствуйте, Jolly Roger, Вы писали:
JR>Здравствуйте, Lloyd, Вы писали:
JR>А в какой строке исключение? Так-же систему озвучить не помешало-бв на всякий случай.
Там, где зовется Test. Если заинлайнить метод, то все работает => тупит jitter.
JR>В VS2008, NET 3.5, WinXP этот код отработал на ура
Здравствуйте, Lloyd, Вы писали:
L>Привет,
L>Кому нибудь доводилось использоват LogonUser в .net-ных приложениях? L>Не понимаю, почему не работаеь даже примитивный пример:
L>
L>Unhandled Exception: System.IO.FileLoadException: Could not load file or assembl
L>y 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e08
L>9' or one of its dependencies. Access is denied.
L> at ConsoleApplication1.Program.Test()
L> at ConsoleApplication1.Program.Main()
L>Press any key to continue . . .
L>Как он может System.Data.dll не находить? Она же в GAC-е и должен быть видна всем. L>Пользователь — доменный, состоит в локальных админах, пароль — правильный (runas успешно отрабатывает).
L>Подкиньте совет, куда копать?
L>Спасибо
Console.WriteLine(typeof(DataSet)); — А это тут вообще зачем? К имперсонации, вроде, дела не имеет.
Ассембли, судя по исключению, находится, но не может загрузится. Проверьте права на каталоге Temporary ASP.NET Files, отсутствие прав на этот каталог проявляется примерно так же.
Что касается имперсонации — у меня не всегда получалось имперсонироваться непосредственно в токен, полученный от LogonUser, приходилось делать DuplicateToken с параметром SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation (равным 2).
Здравствуйте, vmpire, Вы писали:
V>Что касается имперсонации — у меня не всегда получалось имперсонироваться непосредственно в токен, полученный от LogonUser, приходилось делать DuplicateToken с параметром SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation (равным 2).
Странно. А подробностей не припомните? MSDN прямо говорит:
You can use the returned handle in calls to the ImpersonateLoggedOnUser function.
Здравствуйте, Jolly Roger, Вы писали:
L>>Там, где зовется Test. Если заинлайнить метод, то все работает => тупит jitter.
JR>А попробуйте поменять CharSet.Unicode на CharSet.Auto
Имперсонация проходит нормально, в чем-то другом проблема. Не пойму.
Здравствуйте, vmpire, Вы писали:
L>>Подкиньте совет, куда копать?
L>>Спасибо
V>Console.WriteLine(typeof(DataSet)); — А это тут вообще зачем? К имперсонации, вроде, дела не имеет.
Чтобы продемонстрировать, что проблема не в коде, а в jiter-е. Тут не важно, что именно в теле метода, главное, что есть ссылка на сборку, кот. подгружается jitter-ом.
V>Ассембли, судя по исключению, находится, но не может загрузится. Проверьте права на каталоге Temporary ASP.NET Files, отсутствие прав на этот каталог проявляется примерно так же.
Это не asp.net, обычное консольное приложение. Пользовател — в локальной группе админов.
V>Что касается имперсонации — у меня не всегда получалось имперсонироваться непосредственно в токен, полученный от LogonUser, приходилось делать DuplicateToken с параметром SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation (равным 2).
Спасибо, завтра попробую. Раньше похожий код у меня работал (где-то погода назад), cейчас почему-то отказывается. Кстати, имперсонация-то как раз проходит на ура.
Здравствуйте, Jolly Roger, Вы писали:
L>>Access is denied
JR>Вообще-то она находит, но прав не имеет. Может Вы имперсонировались тем, кому туда ходу нет?
Пользователь — в группе локальных админов. Куда уж выше-то?
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Jolly Roger, Вы писали:
L>>>Access is denied
JR>>Вообще-то она находит, но прав не имеет. Может Вы имперсонировались тем, кому туда ходу нет?
L>Пользователь — в группе локальных админов. Куда уж выше-то?
И всё-же — "Access is denied". Я думаю, копать надо всё-таки в эту сторону. Ведь без имперсонации она грузится? А что поменялось? Только права текущего пользователя.
Здравствуйте, Uzzy, Вы писали:
U>Что-то подобное возникает, если управляемая сборка на платформе х64 пытается подгрузить неуправляемую сборку, собранную для х86.
А почему тогда без LogonUser все работает как надо?
L>>Пользователь — в группе локальных админов. Куда уж выше-то?
JR>И всё-же — "Access is denied". Я думаю, копать надо всё-таки в эту сторону. Ведь без имперсонации она грузится? А что поменялось? Только права текущего пользователя.
Я не представляю, как в это сторону копать. Я уже дал пользователю права админа на локальной машине.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Uzzy, Вы писали:
U>>Что-то подобное возникает, если управляемая сборка на платформе х64 пытается подгрузить неуправляемую сборку, собранную для х86.
L>А почему тогда без LogonUser все работает как надо?
Понятия не имею. Возможно настройки локали пользователя сказываются. (точка вместо запятой на дробном делителе, например).
Здравствуйте, Lloyd, Вы писали:
L>Я не представляю, как в это сторону копать. Я уже дал пользователю права админа на локальной машине.
пробовали в политиках аудита включить все галки и в эвентах потом что-нить найти?
Здравствуйте, Jolly Roger, Вы писали:
JR>Здравствуйте, vmpire, Вы писали:
V>>Что касается имперсонации — у меня не всегда получалось имперсонироваться непосредственно в токен, полученный от LogonUser, приходилось делать DuplicateToken с параметром SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation (равным 2).
JR>Странно. А подробностей не припомните? MSDN прямо говорит:
JR>
JR>You can use the returned handle in calls to the ImpersonateLoggedOnUser function.
JR>Да и я проблем не помню
Вот хоть убейте не помню
Но помню, что пришлось усложнять из-за этого код. Тогда это было не то в Win2000 не то в WinXP без сервис-паков. Вроде бы (не уверен) было связано с доменными политиками у заказчика.
Здравствуйте, Lloyd, Вы писали:
L>>>Пользователь — в группе локальных админов. Куда уж выше-то?
JR>>И всё-же — "Access is denied". Я думаю, копать надо всё-таки в эту сторону. Ведь без имперсонации она грузится? А что поменялось? Только права текущего пользователя.
L>Я не представляю, как в это сторону копать. Я уже дал пользователю права админа на локальной машине.
А может это UAC в Windows 7? C ним админа может быть недостаточно.
Попробуйте явно пользователю дать права на всё в качестве эксперимента. Или покрутить настройки UAC.
Здравствуйте, Lloyd, Вы писали:
L>Я не представляю, как в это сторону копать. Я уже дал пользователю права админа на локальной машине.
Я бы прежде всего посмотрел настройки безопасности файла. Хорошая мысль была высказана — включить аудит и посмотреть журнал. Вместо загрузки попробовал бы загрузить сборку как просто файл, запросив чтение, чтение-выполнение. Маловероятно, но всё-же глянул-бы, не отрубил-ли кто этой учётке SeChangeNotify. То есть попробовать набрать побольше статистики.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Jolly Roger, Вы писали: JR>>Здравствуйте, Lloyd, Вы писали: JR>>А в какой строке исключение? Так-же систему озвучить не помешало-бв на всякий случай. L>Там, где зовется Test. Если заинлайнить метод, то все работает => тупит jitter. JR>>В VS2008, NET 3.5, WinXP этот код отработал на ура L>VS 2010, .Net 4.0, Win 7x64.
1. А студия с правами Админа работает? Может помочь
2. Возможно у меня недостоверные данные, по памяти вспоминаю, но уже натыкался на такое:
Если при загрузке сборок вылетает Access is denied — это все же может быть именно отсутствие файла, а не проблемы безопасности.
Здравствуйте, Neco, Вы писали:
L>>Я не представляю, как в это сторону копать. Я уже дал пользователю права админа на локальной машине. N>пробовали в политиках аудита включить все галки и в эвентах потом что-нить найти?
Попробовал. В итоге:
Audit Success 9/10/2010 10:58:08 AM Microsoft Windows security auditing. 4634 Logoff
Audit Success 9/10/2010 10:58:08 AM Microsoft Windows security auditing. 4634 Logoff
Audit Success 9/10/2010 10:58:07 AM Microsoft Windows security auditing. 4672 Special Logon
Здравствуйте, vmpire, Вы писали:
JR>>>И всё-же — "Access is denied". Я думаю, копать надо всё-таки в эту сторону. Ведь без имперсонации она грузится? А что поменялось? Только права текущего пользователя.
L>>Я не представляю, как в это сторону копать. Я уже дал пользователю права админа на локальной машине. V>А может это UAC в Windows 7? C ним админа может быть недостаточно. V>Попробуйте явно пользователю дать права на всё в качестве эксперимента. Или покрутить настройки UAC.
Отключил UAC, перегрузился, вроде заработало. Но, блин, это же не вариант, должен быть какой-то нормальный способ.
Здравствуйте, Jolly Roger, Вы писали:
JR>Я бы прежде всего посмотрел настройки безопасности файла. Хорошая мысль была высказана — включить аудит и посмотреть журнал. Вместо загрузки попробовал бы загрузить сборку как просто файл, запросив чтение, чтение-выполнение. Маловероятно, но всё-же глянул-бы, не отрубил-ли кто этой учётке SeChangeNotify. То есть попробовать набрать побольше статистики.
В eventlog-е запись logon-а содержит такую информацию:
Если не затруднит, можно определения LogonType, LogonProvider, SecurityAttributes, DuplicateTokenEx, MaximumAllowed, SecurityImpersonationLevel, TokenType?
Спасибо.
Здравствуйте, Lloyd, Вы писали:
L>Попробовал. В итоге: L>
L>Audit Success 9/10/2010 10:58:08 AM Microsoft Windows security auditing. 4634 Logoff
L>Audit Success 9/10/2010 10:58:08 AM Microsoft Windows security auditing. 4634 Logoff
L>Audit Success 9/10/2010 10:58:07 AM Microsoft Windows security auditing. 4672 Special Logon
Это не то. Нужно включить аудит доступа к файлам и папкам. Сам аудит включается в локальных политиках, но нужно ещё настроить System ACL(SACL) интересующих объектов, System.Data.dll в Вашем случае. Это можно сделать через свойства — защита — дополнительно — аудит. Вам нужно добавить туда ауди отказа на все действия, для Вашего пользователя.
Здравствуйте, Jolly Roger, Вы писали:
L>>SeChangeNotify тут нет. Что это такое? Как его можно включить?
JR>Это уже любопытно. Это привилегия "двойного назначения". Она, как следует из имени, позволяет получать извещения от файловой системе, а в дополнение позволяет выполнить обход перекрёстной проверки. Или, если человеческим языком, она позволяет получить доступ с "C\Folder1\Folder2\SomeFile.exe" даже если Вам запрещён доступ к Folder1. Она должна быть умолчанию у всех пользователей, более того, она по умолчанию включена у всех пользователей. Отсутствие её у Вашего пользователя уже настораживает. Попробуйте временно создать нового пользователя, не входящего в админы и имперсонироваться под ним.
JR>Да, включить привилегию можно через политики — права пользователей, по-русски — "обход перекрёстной проверки".
Если это "Bypass traverse checking", то для группы Adninistrators (куда входит мой пользователь) она включена у меня. Наверное все-таки проблема в UAC
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, vmpire, Вы писали:
JR>>>>И всё-же — "Access is denied". Я думаю, копать надо всё-таки в эту сторону. Ведь без имперсонации она грузится? А что поменялось? Только права текущего пользователя.
L>>>Я не представляю, как в это сторону копать. Я уже дал пользователю права админа на локальной машине. V>>А может это UAC в Windows 7? C ним админа может быть недостаточно. V>>Попробуйте явно пользователю дать права на всё в качестве эксперимента. Или покрутить настройки UAC.
L>Отключил UAC, перегрузился, вроде заработало. Но, блин, это же не вариант, должен быть какой-то нормальный способ.
Значит, причина примерно найдена.
Теперь нужно проверить права доступа к GAC 4-го фреймворка (права на чтение файлов) для нужного пользователя.
Ниже подсказали хорошую идею с аудитом (я бы включил сразу на весь диск) и попыткой открыть сборку как файл.
От себя могу ещё порекомендовать process monitor от Sysinternals (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx).
Можно, конечно, прописать в манифесте, что программа требует полномочий администратора, но это уж совсем от безысходности. И пользователя будет доставать.
Здравствуйте, vmpire, Вы писали:
V>>>Попробуйте явно пользователю дать права на всё в качестве эксперимента. Или покрутить настройки UAC.
L>>Отключил UAC, перегрузился, вроде заработало. Но, блин, это же не вариант, должен быть какой-то нормальный способ. V>Значит, причина примерно найдена. V>Теперь нужно проверить права доступа к GAC 4-го фреймворка (права на чтение файлов) для нужного пользователя. V>Ниже подсказали хорошую идею с аудитом (я бы включил сразу на весь диск) и попыткой открыть сборку как файл. V>От себя могу ещё порекомендовать process monitor от Sysinternals (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx).
Я уже посмотрел. Валится с ACCESS DENIED при попытке доступа к bin\Debug\ConsoleApplication1.exe.config.
Может как-то можно принудительно поднять (elevate) права текущего пользователя до админа?
Здравствуйте, Jolly Roger, Вы писали:
L>>для группы Adninistrators (куда входит мой пользователь) она включена у меня. Наверное все-таки проблема в UAC
JR>Для админов включена, а для Вашего конкретного пользователя, судя по этому
Здравствуйте, Lloyd, Вы писали:
L>Да, но мой пользователь в этой группе.
Видимо что-то с пользователем. А программа работает если под ним логинится и запускать без имперсонизации?
Здравствуйте, Lloyd, Вы писали:
L>Да, но мой пользователь в этой группе.
Возможно, их режет UAC, хотя сомнительно. Может, доменными политиками перекрыта. Эх, мне бы самому "пошарить", ручками, но не на чем
Однако если у пользователя будет доступ ко всем папкам в пути, то эта привилегия не понадобится. Вы аудит посмотрели? Какой запрос отклонён, к какому объекту?
Здравствуйте, Jolly Roger, Вы писали:
L>>Я уже посмотрел. Валится с ACCESS DENIED при попытке доступа к bin\Debug\ConsoleApplication1.exe.config.
JR>Ещё страннее. А на этот файл Вы настройки безопасности посмотрели?
Да ничего особенного нет.
L>>Может как-то можно принудительно поднять (elevate) права текущего пользователя до админа?
JR>Поднять-то можно, только плохой это путь, неправильный. Вы уверены, что он всегда будет администротором, у всех пользователей? Я бы на это не закладывался. Надо-бы разобраться, почему так не работает. Может у Вас слишком жёсткие настройки на папку, в которой этот ConsoleApplication1.exe.config?
Похоже я чего-то в этой жизни не понимаю.
Есть пользователь A, находясь в учетке которого я через runas запускаю новую консоль с правами пользователя B (локальный админ).
В настройках домашнего каталога пользователя A прописано, что админы имеют полный доступ.
Пытаюсь перейти в консоли в домашний каталог пользователя A и получаю отлуп (Access is denied).
Чё за фигня? Я же админ! Так и должно быть???
JR>PS Никогда не пишу программы под админом, с тех пор как на W2k с Me персел, во избежании подобных "чудес".
Здравствуйте, Jolly Roger, Вы писали:
L>>Да, но мой пользователь в этой группе.
JR>Возможно, их режет UAC, хотя сомнительно. Может, доменными политиками перекрыта. Эх, мне бы самому "пошарить", ручками, но не на чем
JR>Однако если у пользователя будет доступ ко всем папкам в пути, то эта привилегия не понадобится. Вы аудит посмотрели? Какой запрос отклонён, к какому объекту?
Похоже, пользователь с админскими правами не может открыть домашние каталоги других пользователей, хотя в настройках каталога явно прописано иное.
Если запускаю консоль сразу в elevated-режиме (утилита elevated c wintellect.com), то могу нормально открывать каталоги.
Это нормальное поведение или у меня что-то не так?
Здравствуйте, Jolly Roger, Вы писали:
JR>>>Ещё страннее. А на этот файл Вы настройки безопасности посмотрели?
L>>Да ничего особенного нет. JR> А "не особенное" что-нибудь есть?
Галочки у всех одинаковые.
L>>Есть пользователь A, находясь в учетке которого я через runas запускаю новую консоль с правами пользователя B (локальный админ). L>>В настройках домашнего каталога пользователя A прописано, что админы имеют полный доступ. L>>Пытаюсь перейти в консоли в домашний каталог пользователя A и получаю отлуп (Access is denied).
L>>Чё за фигня? Я же админ! Так и должно быть???
JR>Насколько мне известно, под UAC без элевации членство в группе админов отключается. Также отключаются некоторые привилегии, но я не припомню, чтобы сюда входила SeChangeNotify, надо-бы поискать в MSDN. Если правильно помню, через WindowsIdentity или IdentityReferense можно получить список групп, в которые входит пользователь. Попробйте их получить и выложите сюда.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Jolly Roger, Вы писали:
L>>>Гм. JR>>Гм, вообще-то можно было и в имена перевести Ну да ладно, и так ясно.
L>А как? Чисто на будущее.
Я точно не помню, но примерно так — SecurityIdentifier.Translate(typeof(NTAccount)).ToString()
Здравствуйте, Jolly Roger, Вы писали:
JR>Итак, группы админов здесь (S-1-5-32-544) нет, зато есть ограниченные юзеры (S-1-5-32-545). Зато в правах наоборот — юзеров нет, а есть доступ системе, админам и себе, любимому. Вот, собственно, и ответ — данному пользователю без элевации доступ запрещён. Чтобы работало, надо дать доступ Users, только не надо давать полный, дайте только нужное. Чтения, я думаю, хватит.
Блиин, рано я радоваться начал.
На тестовом локальном аккаунте — работает, на тестовом доменном — тоже.
А мне нужно на аккаунте из другого (доверенного) домена, а с ним — не работает, хотя runas прекрасно отрабатывает с таким аккаунтом.
Здравствуйте, Lloyd, Вы писали:
L>На тестовом локальном аккаунте — работает, на тестовом доменном — тоже. L>А мне нужно на аккаунте из другого (доверенного) домена, а с ним — не работает, хотя runas прекрасно отрабатывает с таким аккаунтом.
Ну путь-то тот-же, надо для начала посмотреть состав групп, в которые входит этот пользователь, а так-же набор его привилегий. Но я-бы предложил более радикальное решение — создать отдельную папку, к ней дать полный доступ юзеру, под которым будет стартовать приложение, и доступ всем (Everyone) на чтение. Туда и складывать все файлы, к которым должен быть общий доступ. Вы не расстраивайтесь, это стандартный подход в такого рода ситуациях
Здравствуйте, Lloyd, Вы писали:
L>Похоже, пользователь с админскими правами не может открыть домашние каталоги других пользователей, хотя в настройках каталога явно прописано иное. L>Если запускаю консоль сразу в elevated-режиме (утилита elevated c wintellect.com), то могу нормально открывать каталоги. L>Это нормальное поведение или у меня что-то не так?
Нормальное. Поизучай вывод whoami /priv из под limited user (админ с UAC), и с elevated, и для обычного юзера — разница колосальная. Более того, даже изменение некоторых локальных политик зачастую не оказывает влияние на этого самого limited user (может я просто не разобрался как ). Например кому-бы я ни давал привилегию на создание глобальных объектов, хоть своему пользователю, а не группе, — привилегии на деле всё равно не оказывается.