我正在开发我的定制板和定制的类 UNIX 操作系统。当我使用 ssh 连接并且没有 root 用户时,会收到此 SELinux 错误:无法获取有效的上下文。其中用户不是 root 用户。在我的日志中我读到
pam_selinux(sshd:session): Unable to get valid context for user
ssh_selinux_getctxbyname: Failed to get default SELinux security
ssh_selinux_getctxbyname: Failed to get default SELinux security
ssh_selinux_setup_pty: security_compute_relabel: Invalid argument
在我的外壳上我读到了Unable to get valid context for user
.
所以:我认为这是一个/usr/sbin/sshd
SELinux 上下文,而且它的标签是错误的。sestatus -v
从无 root 用户运行 我读到:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: permissive
Policy MLS status: disabled
Policy deny_unknown status: denied
Memory protection checking: actual (secure)
Max kernel policy version: 31
Process contexts:
Current context: system_u:system_r:initrc_t
Init context: system_u:system_r:init_t
File contexts:
Controlling terminal: system_u:object_r:initrc_devpts_t
/etc/passwd system_u:object_r:etc_t
/etc/shadow system_u:object_r:shadow_t
/bin/login system_u:object_r:login_exec_t
/bin/sh system_u:object_r:bin_t
/sbin/init system_u:object_r:init_exec_t
/usr/sbin/sshd system_u:object_r:root_t
/lib/libc.so.6 system_u:object_r:lib_t -> system_u:object_r:lib_t
运行id -Z
我得到 /usr/sbin/sshd system_u:system_r:kernel_t
或system_u:system_r:initrc_t
。我尝试使用restorecon -v -r /*
和/usr/sbin/sshd
进程重新标记为 system_u:system_r:kernel_t
,而/usr/sbin/sshd
文件上下文变为 system_u:system_r:bin_t
。
我认为 sshd 的一个很好的上下文可能是system_u:object_r:sshd_exec_t
。我尝试使用 root 用户的 chcon 设置它,但是当我id -Z
从无 root 用户运行时,上下文不会重新标记,并且重新启动后,没有 root 用户 sshd 上下文变得未标记。
在我的系统上,我无法使用 semange 程序,并且没有要设置的“登录布尔值”。我的 getsebool -a 列表非常短。
在我的/etc/pam.d/sshd
配置中,我有以下几行:
session optional /lib/security/pam_selinux.so close
session optional /lib/security/pam_selinux.so multiple open
通过删除上面 pam 配置文件中的第二行,我只得到日志错误,但没有控制台错误。另外删除这两行我会收到日志和控制台错误。为什么?
有人能帮我吗?谢谢