sshd[4344]: 错误: ssh_selinux_setup_pty: security_compute_relabel: 参数无效?

sshd[4344]: 错误: ssh_selinux_setup_pty: security_compute_relabel: 参数无效?
  • OpenSSH_5.8p1,OpenSSL 0.9.8e-fips-rhel5 2008 年 7 月 1 日
  • selinux-策略-2.4.6-338.el5
  • pam-0.99.6.2-12.el5

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

谷歌指向我Fedora 论坛上的帖子:

可能最简单的方法(尽管最长)是创建文件 /.autorelabelreboot

但我想知道还有其他方法可以摆脱这个问题无需重启

安全上下文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

sshd 的 PAM 配置:

#%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)'


更新时间:2013 年 3 月 4 日星期一 21:20:49 ICT

回复 Michael Hampton:

请记住原因重启的原因是更改安全上下文会影响正在运行的服务,因此至少应该重新启动受影响的服务(即重新启动 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


更新时间:2013 年 3 月 5 日星期二 21:54:00 ICT

您能提供的输出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

更新时间:2013 年 3 月 6 日星期三 10:57:11 ICT

我已经整理了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

你有什么想法?


更新时间:2013 年 3 月 6 日星期三 15:36:39 ICT

确保使用 进行编译--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

答案1

/.autorelabel文件只是导致启动脚本restorecon -r -v /在启动时运行,然后再次重新启动。(实际上,它运行一些fixfiles打印大量点的调用,但由于这只是前端,restorecon我并不关心......)

你可以自己运行它而不需要重启,这通常是我的第一的尝试诊断奇怪的 SELinux 问题时,这是步骤之一。请记住,原因重启的原因是更改安全上下文会影响正在运行的服务,因此至少应该重新启动受影响的服务(即重新启动 sshd)。

如果这解决问题,那么在输出的某个地方,你会看到一个改变的安全上下文,这是问题的原因和解决方案。最有可能的是不是/home/etc/selinux

答案2

起初我写了一个相对复杂的答案,它实际上只适用于 EL6,但后来我发现在你的情况下出现了一些非常奇怪的事情。

错误信息:

ssh_selinux_setup_pty: security_compute_relabel: Invalid argument

很奇怪。我之所以这么说,是因为在 EL5 上,使用最新版本的 SSHD,该错误消息是不可能的。它不在源代码中。任何地方。我搜索了整个源代码树和“ssh_selinux_setup_pty”的 Redhat 补丁。它不在那里。

但它确实出现在 Fedora 18 上。

这让我认为你正在运行的 SSHD 版本不是它应该的版本,并且已被替换。 可能是你自己替换的,也可能是别人替换的。

更新 1

不起作用的关键部分的 SSHD 执行类似这样的操作(使用 python);我相信 sshd 中使用的 selinux 上下文正如您所提到的。

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,一些上下文内容 ]

您需要使用与 sshd 相同的上下文来运行它。“initrc_devpts_t”绝对正确。另一个上下文是您提供的引用用户上下文。

sshd 中的代码当前得到 -1,从而产生该错误。如果 sshd 中生成的用户上下文(参数 1)不正确,就会发生这种情况。

如果你可以让这个 python 在元组的第一个元素中不产生 -1,那么我唯一能建议的就是修改 sshd 源,在该函数中添加一个额外的调试行来找出原因真的上下文原来是在 sshds 配置中打开 debug3 日志记录。

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;
    }

答案3

在目标策略中运行的 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

应该这样做。希望有帮助

答案4

请尝试以下操作:

# setsebool ssh_sysadm_login on

# setsebool -P ssh_sysadm_login on

谢谢https://access.redhat.com/solutions/4359441

相关内容