bash 스크립트를 시작합니다(Java에서 동기식으로유리 물고기사용자) 다른 사용자로 명령을 실행합니다(예:내 사용자):
#!/bin/bash
echo myPassword | su -c "command" myUser &
glassfish 사용자로 bash 쉘에서 이 스크립트를 실행하면 명령이 즉시 실행됩니다. 하지만 Java에서 이 스크립트를 실행하면 10~15초 후에 명령이 실행됩니다.
로그인 보안 시간이 초과된 것 같나요?
이것이 SELINUX와 관련이 있는지 궁금합니다. 다음은 Java 프로그램(Glassfish)을 시작하는 명령줄입니다.
/usr/share/glassfish3/glassfish/bin/asadmin start-domain
다음은 asadmin 시작 스크립트의 SELINUX 상태입니다.
$ ls -Z /usr/share/glassfish3/bin/asadmin
-rwxr-xr-x. glassfish glassfish unconfined_u:object_r:bin_t:s0 /usr/share/glassfish3/bin/asadmin
실행 중: - Centos 6.4의 GNU bash, 버전 4.2.53(1)-릴리스(x86_64-redhat-linux-gnu) - java 1.6.45 X86_64 및 Glassfish 3.1.2.2
업데이트: @larsks 댓글에 대한 응답으로
SeLinux가 시행 모드에 있습니다. 스크립트가 실행되면 다음 감사 로그가 생성됩니다.자바에서:
BEFORE THE COMMAND
type=SERVICE_START msg=audit(1438862733.335:8932): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg=' comm="fprintd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
type=USER_AVC msg=audit(1438862733.336:8933): pid=883 uid=81 auid=4294967295 ses=4294967295 subj=system_u:system_r:system_dbusd_t:s0-s0:c0.c1023 msg='avc: denied { send_msg } for msgtype=method_return dest=:1.2520 spid=16027 tpid=16026 scontext=system_u:system_r:fprintd_t:s0 tcontext=system_u:system_r:initrc_t:s0 tclass=dbus exe="/usr/bin/dbus-daemon" sauid=81 hostname=? addr=? terminal=?'
HERE IS THE 10-15s WAIT
type=USER_AUTH msg=audit(1438862758.408:8934): pid=16026 uid=1001 auid=4294967295 ses=4294967295 subj=system_u:system_r:initrc_t:s0 msg='op=PAM:authentication acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=? res=success'
type=USER_ACCT msg=audit(1438862758.410:8935): pid=16026 uid=1001 auid=4294967295 ses=4294967295 subj=system_u:system_r:initrc_t:s0 msg='op=PAM:accounting acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=? res=success'
type=CRED_ACQ msg=audit(1438862758.411:8936): pid=16026 uid=1001 auid=4294967295 ses=4294967295 subj=system_u:system_r:initrc_t:s0 msg='op=PAM:setcred acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=? res=success'
type=USER_START msg=audit(1438862758.422:8937): pid=16026 uid=1001 auid=4294967295 ses=4294967295 subj=system_u:system_r:initrc_t:s0 msg='op=PAM:session_open acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=? res=success'
type=USER_END msg=audit(1438862758.429:8938): pid=16026 uid=1001 auid=4294967295 ses=4294967295 subj=system_u:system_r:initrc_t:s0 msg='op=PAM:session_close acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=? res=success'
type=CRED_DISP msg=audit(1438862758.429:8939): pid=16026 uid=1001 auid=4294967295 ses=4294967295 subj=system_u:system_r:initrc_t:s0 msg='op=PAM:setcred acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=? res=success'
NOW THE COMMAND HAS BEEN EXECUTED
스크립트가 실행되면 다음 감사 로그가 생성됩니다.배쉬에서:
BEFORE THE COMMAND
type=SERVICE_START msg=audit(1438863622.854:9013): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg=' comm="fprintd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
type=USER_AUTH msg=audit(1438863622.877:9014): pid=16215 uid=1001 auid=0 ses=1116 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:authentication acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=pts/1 res=success'
type=USER_ACCT msg=audit(1438863622.879:9015): pid=16215 uid=1001 auid=0 ses=1116 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:accounting acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=pts/1 res=success'
type=CRED_ACQ msg=audit(1438863622.879:9016): pid=16215 uid=1001 auid=0 ses=1116 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:setcred acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=pts/1 res=success'
type=USER_START msg=audit(1438863622.882:9017): pid=16215 uid=1001 auid=0 ses=1116 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:session_open acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=pts/1 res=success'
type=USER_END msg=audit(1438863622.888:9018): pid=16215 uid=1001 auid=0 ses=1116 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:session_close acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=pts/1 res=success'
type=CRED_DISP msg=audit(1438863622.888:9019): pid=16215 uid=1001 auid=0 ses=1116 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:setcred acct="administrator" exe="/usr/bin/su" hostname=? addr=? terminal=pts/1 res=success'
NOW THE COMMAND HAS BEEN EXECUTED
답변1
selinux AVC가 있는 경우 도구를 사용하여 특정 작업을 허용하도록 로컬 정책을 설정할 수 있습니다 audit2allow
.
# audit2allow -M local -a
local.pp
그러면 감사 로그에서 selinux 거부를 초래하는 모든 동작을 허용하는 정책( )이 생성됩니다 . 그런 다음 다음 명령을 실행하여 모듈을 활성화할 수 있습니다.
# semodule -i local.pp
파일에서 소스 코드를 볼 수 있습니다 local.te
.
귀하의 질문에 대한 AVC의 결과는 다음과 같습니다.
module local 1.0;
require {
type fprintd_t;
type initrc_t;
class dbus send_msg;
}
#============= fprintd_t ==============
allow fprintd_t initrc_t:dbus send_msg;