SELinux работает в разрешающем режиме:
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: disabled
Policy version: 21
Policy from config file: targeted
Когда я вхожу в систему через ssh, /var/log/secure
жалуются, что:
sshd[4957]: Accepted publickey for quanta from 192.168.3.40 port 55822 ssh2
sshd[4957]: pam_unix(sshd:session): session opened for user quanta by (uid=0)
sshd[4957]: error: ssh_selinux_setup_pty: security_compute_relabel: Invalid argument
Google укажет мне этот ветка на форуме Fedora:
Возможно, самый простой (хотя и самый долгий) способ - создать файл
/.autorelabel
иreboot
.
но мне интересно, есть ли другой способ избавиться от этого без перезагрузки?
Контекст безопасности quanta
:
$ id -Z
system_u:system_r:unconfined_t:SystemLow-SystemHigh
Сопоставление между пользователем Linux и user_u
:
$ sudo /usr/sbin/semanage login -l
Login Name SELinux User MLS/MCS Range
__default__ user_u s0
root root SystemLow-SystemHigh
Пользователи SELinux:
$ sudo /usr/sbin/semanage user -l
Labeling MLS/ MLS/
SELinux User Prefix MCS Level MCS Range SELinux Roles
root user s0 SystemLow-SystemHigh system_r sysadm_r user_r
system_u user s0 SystemLow-SystemHigh system_r
user_u user s0 SystemLow-SystemHigh system_r sysadm_r user_r
Контекст безопасности, который sshd
работает как:
$ ps -eZ | grep sshd
system_u:system_r:unconfined_t:SystemLow-SystemHigh 9509 ? 00:02:11 sshd
system_u:system_r:unconfined_t:SystemLow-SystemHigh 18319 ? 00:00:00 sshd
system_u:system_r:unconfined_t:SystemLow-SystemHigh 18321 ? 00:00:00 sshd
Конфигурация PAM для sshd:
#%PAM-1.0
auth include system-auth
account required pam_nologin.so
#account required pam_access.so
account include system-auth
password include system-auth
session optional pam_keyinit.so force revoke
session include system-auth
session required pam_loginuid.so
Что я уже пробовал и не помогло:
# yum reinstall selinux-policy-targeted
# restorecon -R -v /etc/selinux/
# restorecon -R -v /home/
/var/log/audit/audit.log
:
type=USER_AUTH msg=audit(1362372405.835:28361028): user pid=14332 uid=0 auid=503 subj=system_u:system_r:unconfined_t:s0-s0:c0.c1023 msg='op=pubkey_auth rport=50939 acct="quanta" exe="/usr/sbin/sshd" (hostname=?, addr=192.168.3.40, terminal=? res=success)'
ОБНОВЛЕНИЕ 4 марта, понедельник, 21:20:49, ICT 2013
Ответ Майклу Хэмптону:
Имейте в виду, что причина для перезагрузки изменение контекстов безопасности влияет на работающие службы, поэтому, как минимум, вы должны перезапустить затронутые службы (т.е. перезапустить sshd).
root 10244 1 0 17:18 ? 00:00:00 /usr/sbin/sshd
/var/log/secure
Mar 4 17:18:48 hostname sshd[10308]: error: ssh_selinux_setup_pty: security_compute_relabel: Invalid argument
ОБНОВЛЕНИЕ Вт, 5 марта, 21:54:00 ICT 2013
Можете ли вы предоставить результат
ls -lZ /dev/pts /dev/ptmx
?
# ls -lZ /dev/pts/ /dev/ptmx
crw-rw-rw-. 1 root tty system_u:object_r:ptmx_t 5, 2 Mar 5 21:54 /dev/ptmx
/dev/pts/:
total 0
crw--w----. 1 quanta tty system_u:object_r:devpts_t 136, 0 Mar 5 21:54 0
crw--w----. 1 dieppv tty system_u:object_r:devpts_t 136, 1 Feb 26 17:08 1
crw--w----. 1 dieppv tty system_u:object_r:devpts_t 136, 2 Feb 25 17:53 2
ОБНОВЛЕНИЕ 6 марта, среда, 10:57:11, ICT 2013
Я составил openssh-5.8p1, затем скопировал файлы конфигурации (/etc/ssh/
и /etc/pam.d/sshd
) и запустился на другом порту.
Что меня удивило, так это /var/log/secure
не жалуется, когда я пытаюсь войти:
sshd[5061]: Server listening on 192.168.6.142 port 2317.
sshd[5139]: Accepted publickey for quanta from 192.168.3.40 port 54384 ssh2
sshd[5139]: pam_unix(sshd:session): session opened for user quanta by (uid=0)
Контекст безопасности нового /usr/local/sbin/sshd
демон такой же, как и старый (/usr/sbin/sshd
):
ps -efZ | grep /usr/local/sbin/sshd
system_u:system_r:unconfined_t:SystemLow-SystemHigh root 5061 1 0 10:56 ? 00:00:00 /usr/local/sbin/sshd
system_u:system_r:unconfined_t:SystemLow-SystemHigh root 7850 3104 0 11:06 pts/3 00:00:00 grep /usr/local/sbin/sshd
У тебя есть идеи?
ОБНОВЛЕНИЕ 6 марта, среда, 15:36:39, ICT 2013
Убедитесь, что вы скомпилировали его с помощью
--with-selinux
, по умолчанию это не делается.
OpenSSH has been configured with the following options:
User binaries: /usr/local//bin
System binaries: /usr/local//sbin
Configuration files: /etc/openssh
Askpass program: /usr/local//libexec/ssh-askpass
Manual pages: /usr/local//share/man/manX
PID file: /var/run
Privilege separation chroot path: /var/empty
sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local//bin
Manpage format: doc
PAM support: yes
OSF SIA support: no
KerberosV support: no
SELinux support: yes
Smartcard support:
S/KEY support: no
TCP Wrappers support: no
MD5 password support: yes
libedit support: no
Solaris process contract support: no
Solaris project support: no
IP address in $DISPLAY hack: no
Translate v4 in v6 hack: yes
BSD Auth support: no
Random number source: OpenSSL internal ONLY
Host: i686-pc-linux-gnu
Compiler: gcc
Compiler flags: -g -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wno-pointer-sign -fno-strict-aliasing -fno-builtin-memset -fstack-protector-all -std=gnu99
Preprocessor flags:
Linker flags: -fstack-protector-all
Libraries: -lresolv -lcrypto -ldl -lutil -lz -lnsl -lcrypt
+for sshd: -lpam -lselinux
+for ssh: -lselinux
/var/log/secure
при входе в порт 22 (/usr/sbin/sshd
):
sshd[27339]: Accepted publickey for quanta from 192.168.3.40 port 50560 ssh2
sshd[27339]: pam_unix(sshd:session): session opened for user quanta by (uid=0)
sshd[27339]: error: ssh_selinux_setup_pty: security_compute_relabel: Invalid argument
sshd[28025]: Received disconnect from 192.168.3.40: 11: disconnected by user
sshd[28022]: pam_unix(sshd:session): session closed for user quanta
/var/log/secure
при входе в порт 2317 (/usr/local/sbin/sshd
):
sshd[27705]: Accepted publickey for quanta from 192.168.3.40 port 34175 ssh2
sshd[27705]: pam_unix(sshd:session): session opened for user quanta by (uid=0)
sshd[27707]: Received disconnect from 192.168.3.40: 11: disconnected by user
sshd[27705]: pam_unix(sshd:session): session closed for user quanta
а вот журнал, подтверждающий, что он попадает в ssh_selinux_setup_pty
:
sshd[4023]: debug1: SELinux support enabled
sshd[4023]: debug3: ssh_selinux_setup_pty: setting TTY context on /dev/pts/3
sshd[4023]: debug3: ssh_selinux_setup_pty: User context is user_u:system_r:unconfined_t, target tty is
system_u:object_r:devpts_t
sshd[4023]: debug3: ssh_selinux_setup_pty: done
Сначала я написал относительно сложный ответ, который на самом деле относился только к EL6, но затем всплывают некоторые вещи, которые я нахожу довольно странными в ваших обстоятельствах.
Сообщение об ошибке:
ssh_selinux_setup_pty: security_compute_relabel: Invalid argument
Является очень странно. Я говорю это потому, что на EL5 с последней версией SSHD это сообщение об ошибке невозможно. Его нет в источнике. Везде. Я обработал все дерево исходных текстов и исправления redhat для "ssh_selinux_setup_pty". Его там нет.
Однако он присутствует в Fedora 18.
Это наводит меня на мысль, что используемая вами версия SSHD не является той версией, которой должна быть, и она была заменена. Либо вы сами, либо кто-то другой.
SSHD в критическом разделе, который не работает, выполняет что-то подобное (с python); Я доверяю контекстам selinux, используемым в sshd, как вы упомянули.
from selinux import *
sec_class = string_to_security_class("chr_file")
print security_compute_relabel("system_u:object_r:unconfined_t", \
"system_u:object_r:initrc_devpts_t", sec_class)
Это должно вернуться:
[0, some_context_stuff]
Вам нужно запустить это, используя тот же контекст, что и sshd. "Initrc_devpts_t" определенно прав. Другой контекст - это указанный вами контекст пользователя.
Ваш код в sshd в настоящее время получает -1, что указывает на эту ошибку. Это произойдет, если пользовательский контекст (аргумент 1), созданный в sshd, неверен.
Если вы можете заставить этот питон не выдавать -1 в первом элементе кортежа, то единственное, что я могу предложить, - это изменить источник sshd, чтобы добавить дополнительную строку отладки в эту функцию, чтобы узнать, что действительно контекст оказывается и включаем логирование debug3 в конфиге sshds.
В openbsd-compat/port-linux.c: ssh_selinux_setup_pty
if (getfilecon(tty, &old_tty_ctx) == -1) {
error("%s: getfilecon: %s", __func__, strerror(errno));
goto out;
}
+debug3("%s: User context is %s, target tty is %s", __func__, user_ctx, old_tty_ctx);
if (security_compute_relabel(user_ctx, old_tty_ctx,
SECCLASS_CHR_FILE, &new_tty_ctx) != 0) {
error("%s: security_compute_relabel: %s",
__func__, strerror(errno));
goto out;
}
В /.autorelabel
файл просто вызывает запуск сценариев запуска restorecon -r -v /
во время загрузки, а затем снова перезагрузитесь. (На самом деле он запускает какой-то вызов fixfiles
выводит много точек, но поскольку это всего лишь интерфейс для restorecon
Мне все равно ...)
Вы можете просто запустить это самостоятельно без перезагрузки, и это вообще моя первый шаг при попытке диагностировать странную проблему SELinux. Имейте в виду, что причина для перезагрузки изменение контекстов безопасности влияет на работающие службы, поэтому, как минимум, вы должны перезапустить затронутые службы (т.е. перезапустить sshd).
Если это делает решите проблему, то где-нибудь в выходных данных вы увидите измененный контекст безопасности, который был причиной и решением проблемы. Скорее всего это не в /home
или /etc/selinux
.
проблема такая же в centos 7.2, работающей в целевой политике
Nov 14 17:34:41 server sshd[13863]: error: PAM: pam_open_session(): Cannot make/remove an entry for the specified session
Nov 14 17:34:42 server sshd[13863]: error: ssh_selinux_setup_pty: security_compute_relabel: Invalid argument
Nov 14 17:34:43 server sshd[13868]: Received disconnect from x.x.x.x: 11: disconnected by user
но получить ссылку из: http://www.unix.com/man-page/centos/8/sysadm_selinux/
semanage user -m -R 'staff_r sysadm_r system_r unconfined_r' sysadm_u
должен это сделать. Надеюсь, поможет