LINUX.ORG.RU

samba и acl

 ,


0

1

Народ помогите!!! Перестали авторизироваться пользователи на сервере под centos, авторизация проходит только у тех то стоит в параметре

список тех, кому разрешёно ставить те самые галки,

admin users = @support, stinky, @design, @red, verstka_01, photo_3

Настраивал не я, но я пытался через скрипт прописать правила на getfacl на соседнии папки, может быть он как то зацепило самбу, не могу понять куда смотреть

Авторизацию перестали проходить все, хотя a getfacl показывает что права есть у всех

вот конфиг

[global]
 vfs object             = recycle
 recycle:keeptree       = Yes
 recycle:touch          = Yes
 recycle:versions       = Yes
# recycle:maxsize        = 0
 # 400m
 recycle:maxsize        = 300000000
 recycle:exclude        = *.tmp|*.temp|*.o|*.DS_Store|*.obj|~$*
# Запрещенные типы файлов, удалять без базару
 veto files = /*.DS_Store/Thumbs.db/
 delete veto files = Yes

 netbios name = 1_SERVER_H34
 workgroup = WORKGROUP
 server string = FileServer

 dos charset = 866
 unix charset = utf8
 display charset = cp1251
 
# interfaces = br0
# bind interfaces only = yes

 security = user
 encrypt passwords = Yes
 null passwords = Yes
 client plaintext auth = Yes

 map to guest = Bad User
 guest account = nobody
 guest ok = yes

 create mask = 0666
 directory mask = 0777

 hide dot files = yes

 public = yes

 preferred master = yes
 local master = yes
 domain master = yes
 os level = 255
 wins support = yes
# socket options = TCP_NODELAY IPTOS_LOWDELAY
 socket options = TCP_NODELAY

 wins proxy = no
 dns proxy = no
 time server = no
 load printers = no
 show add printer wizard = no
 printing = none
 printcap name = /dev/null
 disable spoolss = yes

 log level = 2
 max log size = 30000
 log file = /var/log/samba/log.%m

 include = /etc/samba/add_cfg/%m

 deadtime = 3
 strict locking = No
 delete readonly = Yes

 acl map full control = True
 #acl group control = True       # Depricated
 dos filemode = True
 
 admin users = @support, stinky

 nt acl support = yes
 # список тех, кому разрешёно ставить те самые галки,
 admin users = @support, stinky, @design, @red, verstka_01, photo_3
 # наследовать владельца (вышестоящей директории)
 inherit owner           = yes
 # наследовать ACL
 inherit acls            = yes
 # наследовать права
 inherit permissions     = yes
 # позвоялет редактору прав из винды корректно обрабатывать
 # наследуемые права
 map acl inherit         = yes
 #блокировки - иногда бывают грабли без этого пункта
# locking                 = no
# fake oplocks		 = yes
# kernel oplocks	 = yes
# oplocks		 = yes
fake oplocks		 = no
kernel oplocks		 = no
oplocks		 	 = no


и самый низ конфига
 inherit owner           = no
 inherit acls            = no
 inherit permissions     = no
 map acl inherit         = no

supp0rtmail2019 ()

Не знаю, в том ли причина, но настораживает отсутствие параметров наподобие «passdb backend»

Т.е. он может недопонимать, куда идти за перечнем логинов-паролей.

Можно ещё логи выкрутить посильнее, кстати, там много полезного.

NDfan ()
Ответ на: комментарий от supp0rtmail2019

Опять же, тут есть вложенные конфиги, похоже

include = /etc/samba/add_cfg/%m

и противоречия в параметрах (либо в цитате пропущен принципиальный кусок конфига). Например:

 # наследовать владельца (вышестоящей директории)
 inherit owner           = yes
....
и самый низ конфига
 inherit owner           = no

В общем, покажи вывод testparm (причём, чтобы вложенные он тоже сдампил), и getfacl объекта из шары.

NDfan ()
Ответ на: комментарий от NDfan

вот ответ testparm, проблема появилась после тестового добавления и удаления пользователя на тестовую папку, я даже в самба расшарить её не успел, на основной папке права acl не поменялись, как и на остальных. smb.conf я даже не успел поменять, а аутификация перестала проходить, я уже пробовал создавать нового пользователя с паролем и без, но толку ноль.

 testparm  /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
Can't find include file /etc/samba/add_cfg/
Processing section "[Клипарт]"
...сократил так как идёт перечисление расшаренных папок
WARNING: You have some share names that are longer than 12 characters.
These may not be accessible to some older clients.
(Eg. Windows9x, WindowsMe, and smbclient prior to Samba 3.0.)
Invalid combination of parameters for service Клипарт.                                     Level II oplocks can only be set if oplocks are also set.
...сократил так как идёт перечисление расшаренных папок и у всех один и то же ответ.

Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
        dos charset = 866
        unix charset = utf8
        display charset = cp1251
        netbios name = 1_SERVER_H34
        server string = FileServer
        map to guest = Bad User
        null passwords = Yes
        log level = 2
        log file = /var/log/samba/log.%m
        max log size = 30000
        deadtime = 3
        load printers = No
        printcap name = /dev/null
        disable spoolss = Yes
        show add printer wizard = No
        os level = 255
        preferred master = Yes
        domain master = Yes
        dns proxy = No
        wins support = Yes
        kernel oplocks = No
        recycle:exclude = *.tmp|*.temp|*.o|*.DS_Store|*.obj|~$*
        recycle:maxsize = 300000000
        recycle:versions = Yes
        recycle:touch = Yes
        recycle:keeptree = Yes
        admin users = @support, stinky, @design, @red, verstka_01, photo_3, adm_16
        create mask = 0666
        directory mask = 0777
        inherit permissions = Yes
        inherit acls = Yes
        inherit owner = Yes
        guest ok = Yes
        map acl inherit = Yes
        delete veto files = Yes
        veto files = /*.DS_Store/Thumbs.db/
        oplocks = No
        strict locking = No
        include = /etc/samba/add_cfg/
        delete readonly = Yes
        dos filemode = Yes
        vfs objects = recycle

[Клипарт]
        comment = подборка_картинок
        path = /home/samba/cliparts
        write list = @support, @photo
...далее перечисление расшаренных папок
в текстовом редакторе в конце файла smb.conf ещё видно эти строки
inherit owner           = no
 inherit acls            = no
 inherit permissions     = no
 map acl inherit         = no
вот вывод команды getfacl основной папки и папки из конфига.
 getfacl samba/
# file: samba
# owner: root
# group: root
user::rwx
user:red_01:rwx
group::rwx
group:design:rwx
group:support:rwx
group:correct:rwx
mask::rwx
other::rwx
default:user::rwx
default:user:red_01:rwx
default:group::rwx
default:group:design:rwx
default:group:support:rwx
default:group:correct:rwx
default:mask::rwx
default:other::rwx


getfacl cliparts/
# file: cliparts
# owner: root
# group: root
user::rwx
user:red_01:rwx
user:support_1:rwx
group::r-x
group:design:rwx
group:support:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:red_01:rwx
default:user:support_1:rwx
default:group::rwx
default:group:design:rwx
default:group:support:rwx
default:mask::rwx
default:other::rwx

supp0rtmail2019 ()
Ответ на: комментарий от supp0rtmail2019

Надо подумать, почитаю.

Кстати, если действия не так давно выполнялись, то можешь ещё history за тот период поднять (root и свой), или тот злополучный скрипт. Шутки-шутками, а может так быстрее выясним, чем этот огород разбирать.

Если там не суперличное, то выкладывай (сюда, в pastebin или в ЛС) :)

NDfan ()
Последнее исправление: NDfan (всего исправлений: 1)
Ответ на: комментарий от BackDoorLover

скормил smbd strace и получил огромное полотнище не пойму на что обратить внимание, на отрицательный ответ, типа -1? И что мне скажут эти строки если так? Типа вот:

...
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
...
stat64("/etc/samba/add_cfg/smbd", 0xbfb90824) = -1 ENOENT (No such file or directory)
stat64("/etc/samba/add_cfg/smbd", 0xbfb90840) = -1 ENOENT (No such file or directory)
...

supp0rtmail2019 ()
Ответ на: комментарий от NDfan

вот скрипт пытался написать как часть программы. он брал строчки

red_01 полный путь до папки
red_01 полный путь до папки

#! /bin/bash
cd /root/Programm/

# Файл основных конфигураций
user_file=./files/users_acl_a
#user_file=./test_file

# Рабочий файл программы для сравнения
programm_file=./prog_file/file_users_acl_a_prog
#programm_file=./test_file_2

# Временный рабочий файл программы для работы
programm_file_temp=./temp/temp_acl_prog
#programm_file_temp=./test_file_o

# Файл логирования программы
log_file=./log/log.log
#log_file=./test_log

# Перезапуск программы
restart=./hello_menu.sh

# Ошибка
error="echo -e \e[4;31m!!ошибка в операции!!\e[0m" 

# Сравнение файлов и остановка при пустом выводе
diff -B $user_file $programm_file

if [[ "$?" == "0" ]]
	then
		echo "$(date +%Y.%m.%d\ %H:%M) error Файлы одинаковы users_acl_a" >> $log_file
		#$restart
elif [[ "$?" == "1" ]]
	then
		diff -B $user_file $programm_file | grep -e ">" -e "<" | tee $programm_file_temp >> $log_file
fi

while read line
do
	if [[ -n "$line" && "$line" = \<* ]]
	then
		USERNAME=$(echo $line | cut -f2 -d ' ')
		DIRNAME=$(echo $line | cut -f3 -d ' ')
		setfacl -R -x $USERNAME,d:$USERNAME $DIRNAME || echo "$(date +%Y.%m.%d\ %H:%M) error $USERNAME $DIRNAME не удалось удалить" >> $log_file
	elif [[ -n "$line" && "$line" = \>* ]]	
	then
		USERNAME=$(echo $line | cut -f2 -d ' ')
		DIRNAME=$(echo $line | cut -f3 -d ' ')
		setfacl -R -m $USERNAME:rx,d:$USERNAME:rx $DIRNAME || echo "$(date +%Y.%m.%d\ %H:%M) error $USERNAME $DIRNAME не удалось добавить правила доступа" >> $log_file
		find $DIRNAME \( -name "pdf" -or -name "Работа" -or -name "Исходники" \) -type d -exec setfacl -R -m $USERNAME:rwx,d:$USERNAME:rwx {} \;
	fi
done < $programm_file_temp

rm -f $programm_file_temp
mv $programm_file $programm_file.bak
cat $user_file > $programm_file
при попытке попасть на сервер по домену или ip (не имеет значения) он просит ввести логин и пароль, при вводе выдает такой ответ со стороны windows клиента:
Windows не может получить доступ к "серверу"
Проверте правильность написания данного имени....
а если вставить имя пользователя в
admin users = @support, stinky, @design, @red, verstka_01, photo_3
то он заходит на шару со всеми правами игнорирую даже права на папки типа запрет на запись.

supp0rtmail2019 ()
Последнее исправление: supp0rtmail2019 (всего исправлений: 4)
Ответ на: комментарий от NDfan

вот так заканчивается файл cmb.conf

[Шрифты]
 path = /home/samba/fonts
 browseable = yes
 read only = yes
 comment = шрифты

 inherit owner           = no
 inherit acls            = no
 inherit permissions     = no
 map acl inherit         = no

может эта часть относиться к шаре «Шрифты», но я не уверен

supp0rtmail2019 ()
Ответ на: комментарий от supp0rtmail2019

В общем, всю эту катавасию я так сходу не разберу, но вот попробую первое предположение:

1) Судя по конфигу, есть такие категории граждан:

1.1

admin users (S)

This is a list of users who will be granted administrative privileges on the share. This means that they will do all file operations as the super-user (root).

You should use this option very carefully, as any user in this list will be able to do anything they like on the share, irrespective of file permissions.

Т.е., выходит все они имеют права суперпользователя, невзирая на настройки самбы и права в ФС. Поэтому ходят, «как к себе домой».

1.2

write list - во многом повторяют список админов. Хз, работает ли эта часть, поскольку, как я уже говорил, не пойму, где аутентификация проходит. Ну предположим, что они корректно опознаются.

1.3.

 map to guest = Bad User
 guest account = nobody
 guest ok = yes

Т.е. все остальные господа, чьи учётки не опознаны по имени.

NDfan ()
Ответ на: комментарий от supp0rtmail2019

Таким образом, возникает вопрос: как там дела у nobody ? Для ответа нужно уточнить, нет ли его в каких-то ключевых группах. Если нет, то он идёт как o (other)

 getent group | grep nobody 

Если он справа ни у кого не значится, то так оно и есть (обычное коробочное состояние).

NDfan ()
Ответ на: комментарий от supp0rtmail2019

Что могу предложить для начала:

А) Хорошенько прикопать все эти чудо-настройки и их логи(!)

log_file=./log/log.log
./prog_file/file_users_acl_a_prog

Б) Сохранить текущий расклад по правам. Его в любой можно будет использовать для восстановления.

getfacl -R /home/samba > /tmp/<ИМЯ_ДАМПА>

В) Посмотреть тот чудо-лог, что он там делал с nobody например. Потому что там много -x, а это отзыв прав

Г) Дать права на какую-нибудь шару для nobody, открыть параллельно лог (tail -f), и сделать попытку входа, присматривая за логом. Если ничего не пишет, то выкрутить детализацию посильнее, и повторить.

NDfan ()
Ответ на: комментарий от NDfan

для всех групп пользователей были созданы свои группы и после при создании пользователей было добавление в конкретную группу, конкретного пользователя, поэтому в passwed у всех стоит своя группа не у кого нету nobody, группы я не трогал, как и конфиг smb.conf, я даже пробовал создать отдельного пользователя, но результат тот же, у меня такое ощущение что каким то образом аутификация проходит, а вот acl как то криво после этого скрипта работает и блокирует вход, я так думаю потому что последний операцией была работа со скриптом, хотя по итогу он сравнил два списка но правила на тестовую папку так и не прописал, но походу где то нагадил(

supp0rtmail2019 ()
Ответ на: комментарий от supp0rtmail2019

Ну например, там могли быть какие-то рукотворно добавленные права, а эта шайтан-машина все права привела в соответствии со списком (имя его см.выше).

Предложение номер два:

на всякий случай, как там дела с SELinux ?

getenforce

И также проверить со стороны ФС, что прав хватает (понять, не пускает Самба, или именно ФС):

sudo su nobody -m -c "head /home/samba/cliparts/<ФАЙЛ>"
NDfan ()
Ответ на: комментарий от NDfan
/usr/sbin/getenforce
Disabled

вот создал файл 1 в папке и запустил команду

sudo su nobody -m -c "head /home/samba/cliparts/1"
su: /bin/bash: Permission denied
я так понял из последний команды что дело не в самбе всё таки, а правила ФС начали блокировать доступ, я правильно понял?

supp0rtmail2019 ()
Последнее исправление: supp0rtmail2019 (всего исправлений: 3)
Ответ на: комментарий от supp0rtmail2019
Disabled

Значит, со стороны SELinux неявных вмешательств нет, идём дальше.

я так из последний команды что дело не в самбе всё таки, а правила начали блокировать доступ, я правильно понял?

Да, если файл имеет все те же права, что и целевые объекты, то, выходит, что все, кроме admin users (и, наверно, write list), отбиваются из-за недостатка прав в ФС. Уже что-то.

Перепроверить, что у тестового файла 1 права верные, можно так (из мана)

       Copying the ACL of one file to another
              getfacl file1 | setfacl --set-file=- file2

NDfan ()
Ответ на: комментарий от NDfan
getfacl 1
# file: 1
# owner: root
# group: root
user::rwx
user:red_01:rwx
user:support_1:rwx
group::rwx
group:design:rwx
group:support:rwx
mask::rwx
other::rwx

вот ответ на getfacl права у support_1 есть, но ответ такой

sudo su support_1 -m -c "head 1"
su: /bin/bash: Permission denied
а вот ответ root, он прочитал что там записана цифра «1» вот под root пользователи и могут заходить на сервер, если их добавить в ту строчку.
sudo su root -m -c "head 1"
1
из этого напрашивается вывод acl показывает одно, что права есть, а на деле не даёт нечего сделать, как я в принципе и думал, скорей всего самба, пропускает, а acl блокирует, отсюда напрашивается вопрос почему acl так криво работает(причина известна, но что именно сделал скрипт)? Хотя может что то ещё блокирует доступ, а до ACL дело не доходит?!?(но я всё таки на ACL больше грешу)

supp0rtmail2019 ()
Ответ на: комментарий от supp0rtmail2019

Интересно.

Тут ещё один момент надо учитывать - эта директория является персональным home у Samba (надо бы выяснить точно), а ОС к home относится очень щепетильно.

Строже, чем, к прочим директориям. Обычно, например, сторонних пользователей, несмотря o=rwx всё равно не пускает (может зависеть от ОС).

Важно, чтобы при работе с «хомяком», были в явном виде права user= или group= (group - через ACL, либо классическим включением товарища в primary group владельца home).

Это одно соображение.

Далее, прав на файлик 1 может не хватить, надо у содержащей его директории хотя бы доступ к метадате разрешить. Примерно так:

setfacl --test -m support_1:x /home/samba/cliparts
setfacl -m support_1:x /home/samba/cliparts

(не забываем про ранее предложенный сброс перечня всех прав в файл! )

NDfan ()
Ответ на: комментарий от NDfan

Вот для теста попробовал, создал папку а в ней файл, права полные в том числе на исполнение «x» и на пользователя и на его группу выставил, а он не запускает файл всё равно, не понимаю что не так то

[root@fileserv samba]# mkdir test && echo test2020 > ./test/test ; chmod 777 ./test/test
[root@fileserv samba]# setfacl -R -m u:support_1:rwx,d:u:support_1:rwx test/
[root@fileserv samba]# getfacl -R test
# file: test
# owner: root
# group: root
user::rwx
user:red_01:rwx
user:support_1:rwx
group::rwx
group:design:rwx
group:support:rwx
group:correct:rwx
mask::rwx
other::rwx
default:user::rwx
default:user:red_01:rwx
default:user:support_1:rwx
default:group::rwx
default:group:design:rwx
default:group:support:rwx
default:group:correct:rwx
default:mask::rwx
default:other::rwx

# file: test/test
# owner: root
# group: root
user::rwx
user:red_01:rwx
user:support_1:rwx
group::rwx
group:design:rwx
group:support:rwx
group:correct:rwx
mask::rwx
other::rwx

[root@fileserv samba]# sudo su support_1 -m -c "head ./test/test"
su: /bin/bash: Permission denied
[root@fileserv samba]# sudo su root -m -c "head ./test/test"
test2020
сменил группу владельца файла и на support и оно смогло его выполнить
[root@fileserv samba]# ls -l ./test/test
-rwxrwxrwx+ 1 root support 9 Дек 16 09:51 ./test/test
[root@fileserv samba]# sudo su root -m -c "head ./test/test"
test2020

не совсем понял прикол, ведь по сути у меня и так стоят полные права вообще для всех?!? Может ACL потерял права рулить правами, но всё ещё пытается это делать, в итоге блокируя все правила установленные через setfacl?!?

supp0rtmail2019 ()
Последнее исправление: supp0rtmail2019 (всего исправлений: 1)
Ответ на: комментарий от supp0rtmail2019

Посмотри начало моего предыдущего комментария. Сильно подозреваю, что эти аномалии связаны с тем, что события происходят в home пользователя Samba. Т.е. если бы это была левая директория с теми же правами, то наверно было бы тут проще, а тут CentOS блюдёт безопасность по дополнительным канонам.

Вот тут вроде толково:

https://unix.stackexchange.com/questions/91488/allow-a-user-to-read-some-othe...

https://serverfault.com/questions/316306/allow-access-to-particular-folder-in...

NDfan ()
Ответ на: комментарий от NDfan

Не совсем понимаю, что да как, к примеру я добавил в admin user = @group_1, у всех кто входит в группу group_1 и у кого она вторичная есть доступ с полными привилегиями от root игнорируя правила на папки и файлы, на них не действует не стандартные правила выставленные от chmod и не действуют права выставленные от setfacl, можно только ограничить доступ в конфиге шары, строго прописав какие пользователи могут ходить в эту папку, если для папки home и samba в ней выставить группу group_1 и убрать её из admin user = , то самба не пускает, ещё что смущает, это то что в сетевом окружение сервер потух, его теперь там не видно. Раньше пользователей не прошедших авторизацию кидало в nobody и они как гости могли ходить по серверу, а теперь и эта функция не работает.

supp0rtmail2019 ()
Последнее исправление: supp0rtmail2019 (всего исправлений: 1)
Ответ на: комментарий от supp0rtmail2019

Забавно. Честно говоря, с этими познаниями волшебного мира ACL, можно глубоко закопаться. Подытог того, что лично я рекомендую на данный момент:

А) Откат на прежние права. Открывается эта мегаприблуда, и ищутся на сервере все версии файлов настроек и логов, имена которых задекларированы в первых двух десятках строк. Вот прям сквозным поиском! Может, в home прежнего админа какие наработки есть (также его и рутовый .bash_history). В логах может быть полезный выхлоп какой-нибудь.

Б) nobody. Вариант быстрый неправильный: берётся господин nobody, и любым способом включается в админ-юзерс (в явном виде / включением в группы). Риски, думаю, понятны - широкий круг малопонятных лиц, получает фактические права root в дереве каталогов /home/samba. Но зато работа других коллег будет разблокирована. На усмотрение.

В) nobody. Потенциально правильный: взять того же nobody, и каскадом добавить ему в явном виде виде хорошие права в --user и --default. Или ещё как-нибудь, но чтобы его точно пускали, на редактирование.

Перед всеми работами, повторюсь, бэкапчики обязательно - прав в директории samba, и настроек в /etc/samba.

Если что-то не работает, то выкрутить уровень логирования, и смотреть его в прямом эфире.

Как-то так.

NDfan ()
Последнее исправление: NDfan (всего исправлений: 1)
Ответ на: комментарий от NDfan

Забавная история, посмотрели данный сервер и другие администраторы, которые в linux шарят по более моего и сказали что всё должно работать и нечего не должно мешать, единственное появилась проблема с зависанием /home, пока мы смотрели походу кто-то что-то открыл и процессы зависли, всё указывало на вышедший из строя диск в raid10.

Диск я поменял и перезагрузил систему, но система захотела загрузиться именно с этого пустого диска, разбираться было некогда, отключил диск и оставил систему до вечера когда нагрузка снизиться. Но ближе к вечеру мне пожаловались что при открытии определённой папки всё зависает, перезагрузка самбы нечего не дала и я решил раз уж перезагружать сервер, то и с загрузкой разобраться.

Подключил диск и в биосе начал пробовать найти системный диск, он был успешно найден и система загрузилась, но без /home, зато самба заработала как надо. Я вновь выключил серкак и сменил sata для нового диска, система уже сама выбрала нужный диск и загрузилась с /home (этот раздел и является raid10) и с исправной samba, также в сетевом окружении сервер сразу появился.

Вот такая вот история, возможно кому-то будет полезна, если появиться ещё информация отпишусь.

supp0rtmail2019 ()
Последнее исправление: supp0rtmail2019 (всего исправлений: 1)