[samba] samba не сверяет клиента с владельцем файла
Alexander Bokovoy
=?iso-8859-1?q?ab_=CE=C1_altlinux=2Eorg?=
Пн Сен 1 16:08:16 MSD 2008
2008/9/1 Pavel I. Kaleda <pik на ntlab.ru>:
> Alexander Bokovoy пишет:
>>
>> 2008/9/1 Pavel I. Kaleda <pik на ntlab.ru>:
>>
>>>
>>> Доброго времени суток!
>>>
>>> Сегодня обнаружил неожиданную вещь: на паре моих серверов Samba не
>>> сверяет
>>> пользователя-клиента и пользователем файла.
>>>
>>> В итоге, например,
>>> 1) пользователь user может удалить файл, принадлежащий root.root
>>> (пользователь root и группа root) и с системной маской прав -rw-r--r--
>>> 2) пользователь user с основной группой group не может удалить файл,
>>> принадлежащий user2.group, хотя тот имеет маску -r--rw-r--
>>>
>>> Подскажите, это проблема сборки samba (у меня стоит 3.0.31-alt1.m40.1)
>>> или
>>> что-то еще?
>>>
>>
>> Скорее всего, что-то с локальными настройками. Чтобы убедиться, что
>> именно происходит, нужно включить отладку на 10 уровне (log level =
>> 10), запротоколировать сессию и снять сетевой перехват этого
>> соединения с помощью wireshark, чтобы туда вошло все (от момента
>> установления соединения до отключения клиента). Тогда можно будет
>> сказать, что происходит на самом деле.
>>
>
> Александр, настроил лог по IP, лог во вложении.
> В логе смущают строчки типа
>
> [2008/09/01 12:56:59, 5] auth/auth_util.c:debug_unix_user_token(474)
> UNIX token of user 0
> Primary group is 0 and contains 0 supplementary groups
> [2008/09/01 12:56:59, 5] smbd/uid.c:change_to_root_user(288)
> change_to_root_user: now uid=(0,0) gid=(0,0)
>
> Получается, пользователи работают с рутовыми правами?
Нет. Самба переключается между uid-ами когда ей это требуется,
например, чтобы обратиться к своим базам данных, доступ которых
возможен только с административными привилегиями или когда надо
запустить внешние скрипты. Все файловые операции выполняются ровно с
теми правами, которые назначены. Вот, например, для pikki в CIFS
реальности это выглядит так:
[2008/09/01 13:04:04, 10] auth/auth_util.c:debug_nt_user_token(454)
NT user token of user S-1-5-21-1653764521-3087752772-3696911572-2000
contains 15 SIDs
SID[ 0]: S-1-5-21-1653764521-3087752772-3696911572-2000
SID[ 1]: S-1-22-2-501
SID[ 2]: S-1-1-0
SID[ 3]: S-1-5-2
SID[ 4]: S-1-5-11
SID[ 5]: S-1-22-2-10
SID[ 6]: S-1-22-2-19
SID[ 7]: S-1-22-2-22
SID[ 8]: S-1-22-2-71
SID[ 9]: S-1-22-2-80
SID[ 10]: S-1-22-2-81
SID[ 11]: S-1-22-2-83
SID[ 12]: S-1-22-2-36
SID[ 13]: S-1-22-2-37
SID[ 14]: S-1-22-2-38
SE_PRIV 0x0 0x0 0x0 0x0
токен пользователя pikki (в "домене" ALTSERVER он имеет rid 2000)
состоит из списка групп, в которые входит юниксовый пользователь pikki
(S-1-22-2-*, все SIDы с префиксом S-1-22-2-* и S-1-22-1-* валидны
только в рамках этой машины).
Вот как оно в юникс реальности выглядит:
[2008/09/01 13:04:04, 5] auth/auth_util.c:debug_unix_user_token(474)
UNIX token of user 500
Primary group is 501 and contains 11 supplementary groups
Group[ 0]: 501
Group[ 1]: 10
Group[ 2]: 19
Group[ 3]: 22
Group[ 4]: 71
Group[ 5]: 80
Group[ 6]: 81
Group[ 7]: 83
Group[ 8]: 36
Group[ 9]: 37
Group[ 10]: 38
[2008/09/01 13:04:04, 5] smbd/uid.c:change_to_user(273)
change_to_user uid=(500,500) gid=(0,501)
[2008/09/01 13:04:04, 3] smbd/service.c:make_connection_snum(1033)
(192.168.15.100) connect to service IPC$ initially as user pikki
(uid=500, gid=501) (pid 24733)
Кстати, в логе видно, что установленная кодировка в Самбе не совпадает
с системной:
[2008/09/01 13:04:08, 8] smbd/trans2.c:get_lanman2_dir_entry(1161)
get_lanman2_dir_entry:readdir on dirptr 0x803d6fa0 now at offset 1443961003
[2008/09/01 13:04:08, 8] smbd/dosmode.c:dos_mode(371)
dos_mode: ./учет.pdf
[2008/09/01 13:04:08, 8] smbd/dosmode.c:dos_mode_from_sbuf(188)
dos_mode_from_sbuf returning r
[2008/09/01 13:04:08, 8] smbd/dosmode.c:dos_mode(409)
dos_mode returning r
[2008/09/01 13:04:08, 5] smbd/trans2.c:get_lanman2_dir_entry(1255)
get_lanman2_dir_entry found ./учет.pdf fname=учет.pdf
[2008/09/01 13:04:08, 3] lib/charcnv.c:convert_string_internal(265)
convert_string_internal: Conversion error: Illegal multibyte
sequence(‡РµС‚.pdf)
[2008/09/01 13:04:08, 3] lib/charcnv.c:convert_string_internal(244)
convert_string_internal: Conversion error: Incomplete multibyte
sequence(..ет.pdf)
[2008/09/01 13:04:08, 3] lib/charcnv.c:convert_string_internal(244)
convert_string_internal: Conversion error: Incomplete multibyte
sequence(.ет.pdf)
[2008/09/01 13:04:08, 3] lib/charcnv.c:convert_string_internal(265)
convert_string_internal: Conversion error: Illegal multibyte sequence(‚.pdf)
[2008/09/01 13:04:08, 3] lib/charcnv.c:convert_string_internal(244)
convert_string_internal: Conversion error: Incomplete multibyte
sequence(...pdf)
[2008/09/01 13:04:08, 3] lib/charcnv.c:convert_string_internal(244)
Нужно с этим тоже разобраться, судя дальше по логу, там есть и
нормальные русскоязычные файлы, так что этот скорее всего "битый".
Итак, с удалением файла:
[2008/09/01 13:05:45, 3] smbd/process.c:switch_message(927)
switch message SMBunlink (pid 24734) conn 0x8045b5d0
[2008/09/01 13:05:45, 4] smbd/uid.c:change_to_user(183)
change_to_user: Skipping user change - already user
[2008/09/01 13:05:45, 3] smbd/reply.c:reply_unlink(2124)
reply_unlink : print.pdf
[2008/09/01 13:05:45, 5] smbd/filename.c:unix_convert(147)
unix_convert called on file "print.pdf"
[2008/09/01 13:05:45, 10] smbd/statcache.c:stat_cache_lookup(215)
stat_cache_lookup: lookup failed for name [PRINT.PDF]
[2008/09/01 13:05:45, 5] smbd/statcache.c:stat_cache_add(140)
stat_cache_add: Added entry (803d6f10:sizea) PRINT.PDF -> print.pdf
[2008/09/01 13:05:45, 5] smbd/filename.c:unix_convert(241)
conversion finished print.pdf -> print.pdf
[2008/09/01 13:05:45, 10] smbd/reply.c:can_delete(1844)
can_delete: ./print.pdf, dirtype = 6
[2008/09/01 13:05:45, 8] smbd/dosmode.c:dos_mode(371)
dos_mode: ./print.pdf
[2008/09/01 13:05:45, 8] smbd/dosmode.c:dos_mode_from_sbuf(188)
dos_mode_from_sbuf returning
[2008/09/01 13:05:45, 8] smbd/dosmode.c:dos_mode(409)
dos_mode returning
[2008/09/01 13:05:45, 3] smbd/dosmode.c:unix_mode(142)
unix_mode(./print.pdf) returning 0644
[2008/09/01 13:05:45, 10] smbd/open.c:open_file_ntcreate(1184)
open_file_ntcreate: fname=./print.pdf, dos_attrs=0x80
access_mask=0x10000 share_access=0x0 create_disposition = 0x1
create_options=0x0 unix mode=0644 oplock_request=0
[2008/09/01 13:05:45, 8] smbd/dosmode.c:dos_mode(371)
dos_mode: ./print.pdf
[2008/09/01 13:05:45, 8] smbd/dosmode.c:dos_mode_from_sbuf(188)
dos_mode_from_sbuf returning
[2008/09/01 13:05:45, 8] smbd/dosmode.c:dos_mode(409)
dos_mode returning
[2008/09/01 13:05:45, 10] smbd/open.c:open_file_ntcreate(1347)
open_file_ntcreate: fname=./print.pdf, after mapping access_mask=0x10000
[2008/09/01 13:05:45, 5] smbd/files.c:file_new(123)
allocated file structure 8279, fnum = 12375 (1 used)
То есть, мы открываем файл с атрибутом "удалить при закрытии". Файл
сам имеет атрибуты rw-r--r--. В этот момент smbd работает с правами
uid=500, gid=0, euid=500, egid=501. То есть, на самом деле, обращения
к файлу идут пользователем 500, группой 501.
--
/ Alexander Bokovoy
Подробная информация о списке рассылки Samba