Назад | Перейти на главную страницу

sshd [4344]: ошибка: ssh_selinux_setup_pty: security_compute_relabel: недопустимый аргумент?

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 не является той версией, которой должна быть, и она была заменена. Либо вы сами, либо кто-то другой.

Обновление 1

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

должен это сделать. Надеюсь, поможет