Проблема с nfs (unknown 134)

Ответить
andramon
Сообщения: 1
Зарегистрирован: 29 мар 2024, 17:28
Operating system: Rosa Chrome Server 12.5 release 2021.1 for x86_64

Проблема с nfs (unknown 134)

Сообщение andramon » 02 апр 2024, 12:06

Доброго дня. Может кто сталкивался с данной проблемой.
Есть двe VM с идентичными ядрами (Linux version 6.1.81-generic-2rosa2021.1-x86_64) одна (V1) установлена просто с диска, вторая (V2) - установка по средствам PXE (kickstart взят тут http://wiki.rosalab.ru/ru/index.php/Anaconda единственное параметр selinux --disabled был раскоментирован). Так же есть сервер NFS на RHEL. При попытке выполнении mount на V1 все "с коробки" монтируется. При выполнении на V2 получаю ошибку mount.nfs: Protocol error. Начал с сравнения пакетов на V1 и V2, но выравнивание не помогло. Далее решил проверить ,что покажет tcpdum сервере NFS:

Код: Выделить всё

dropped privs to tcpdump
tcpdump: listening on ens18, link-type EN10MB (Ethernet), capture size 262144 bytes
11:37:14.088545 IP (tos 0x0, ttl 64, id 26012, offset 0, flags [DF], proto TCP (6), length 72, options (unknown 134,EOL))
    10.1.1.12.819 > rhelserver.nfs: Flags [S], cksum 0x477f (correct), seq 3098531458, win 64240, options [mss 1460,sackOK,TS val 3960839712 ecr 0,nop,wscale 7], length 0
11:37:14.088612 IP (tos 0xc0, ttl 64, id 19430, offset 0, flags [none], proto ICMP (1), length 112, options (unknown 134,EOL))
    rhelserver > 10.9.255.12: ICMP parameter problem - octet 22, length 80
        IP (tos 0x0, ttl 64, id 26012, offset 0, flags [DF], proto TCP (6), length 72, options (unknown 134,EOL))
    10.1.1.12.819 > rhelserver.nfs: Flags [S], cksum 0x477f (correct), seq 3098531458, win 64240, options [mss 1460,sackOK,TS val 3960839712 ecr 0,nop,wscale 7], length 0
Есть предположение, что unknown 134 это некая опция безопасности (нагуглил про некий CIPSO Format), или метка на пакете, которая не нравится серверу.
P.s. установка пакета netlabel, и последующие выполнение netlabel-config reset, позволяют на V2 примонтировать раздел. Соответственно, после перезагрузка все возвращается.
Собственно вопрос один но с подвопросами: в чем может быть отличие установки систем с одного носителя но разными методами и как эту безопасность отключить в кикстарте?

Аватара пользователя
mikhailnov
Сообщения: 264
Зарегистрирован: 29 авг 2015, 22:53
Operating system: ROSA
Контактная информация:

Проблема с nfs (unknown 134)

Сообщение mikhailnov » 27 апр 2024, 05:08

Здравствуйте!
Спасибо за исследование и сообщение о проблеме.
"selinux --disabled" в кикстарте нет смысла раскомментировать, потому что в Росе SELinux не включен, однако эта опция добавляет "selinux=0" в cmdline ядра. Добавил в пример кикстарта (http://wiki.rosalab.ru/ru/index.php/Anaconda , п. "6.2 Типовой сценарий автоматизированной установки") комментарий об этой строке.
Без "selinux=0" было так:

Код: Выделить всё

# netlabelctl map list
domain:DEFAULT,UNLABELED
Но с "selinux=0" уже так:

Код: Выделить всё

# netlabelctl map list
domain:"_",UNLABELED,4 domain:DEFAULT,CIPSOv4,3 domain:DEFAULT,UNLABELED,6
Оказалось, что маркировка включалась LSM-модулем SMACK: https://github.com/torvalds/linux/blob/ ... lter.c#L43
SMACK при запуске добавлял хук netfilter (фаервола), который маркирует пакеты
(https://github.com/torvalds/linux/blob/ ... lter.c#L32), но с приоритетом NF_IP_PRI_SELINUX_FIRST (хук от SELinux приоритетнее).

Код: Выделить всё

static const struct nf_hook_ops smack_nf_ops[] = {
	{
		.hook =		smack_ip_output,
		.pf =		NFPROTO_IPV4,
		.hooknum =	NF_INET_LOCAL_OUT,
		.priority =	NF_IP_PRI_SELINUX_FIRST,
	},
#if IS_ENABLED(CONFIG_IPV6)
	{
		.hook =		smack_ip_output,
		.pf =		NFPROTO_IPV6,
		.hooknum =	NF_INET_LOCAL_OUT,
		.priority =	NF_IP6_PRI_SELINUX_FIRST,
	},
#endif	/* IPV6 */
};

Код: Выделить всё

static unsigned int smack_ip_output(void *priv,
					struct sk_buff *skb,
					const struct nf_hook_state *state)
{
	struct sock *sk = skb_to_full_sk(skb);
	struct socket_smack *ssp;
	struct smack_known *skp;

	if (sk && sk->sk_security) {
		ssp = sk->sk_security;
		skp = ssp->smk_out;
		skb->secmark = skp->smk_secid;
	}

	return NF_ACCEPT;
}
LSM-модули AppArmor, SMACK, TOMOYO включены в наших ядрах, но не используются, в userspace нет качественной поддержки для них. Принято решение в ядре 6.6 оставить возможность их использовать (например, для экспериментов), но по умолчанию выключить. Для включения теперь необходимо добавить в cmdline ядра:

Код: Выделить всё

apparmor=1 smack=1 tomoyo=1
Их включенность можно оценивать по наличию или отсутствию записей в dmesg (dmesg | grep -iE 'smack|tomoyo').
Еще это чинит иногда появляющееся сообщение о невозможности установить xattr SMACK64 при копировании файлов через cp/mv.

Обновление ядра 6.6 уходит на QA (тестирование), сборка здесь: https://abf.io/build_lists/5028882
Пока не в репозитории, установить можно так:

Код: Выделить всё

sudo dnf --repofrompath kernel,http://abf-downloads.rosalinux.ru/rosa2021.1/container/5028882/x86_64/main/release/ update
В этой сборке добавлен патч https://abf.io/import/kernel-6.6/blob/7 ... ault.patch , делающий описанное.
Собственно вопрос, каким образом и на каком этапе можно отключить данную настройку безопасности при автоматической установки PXE?
Можно просто не писать "selinux --disabled" в кикстарте, SELinux останется выключен, а проблемы не будет и без обновления ядра. С обновлением ядра проблемы не будет и при наличии записи "selinux --disabled".

Ответить

Вернуться в «Общие вопросы по РОСЕ»