Ubuntu 18.04.4 LTS에 대한 수정 사항

Ubuntu 18.04.4 LTS에 대한 수정 사항

질문

내 컴퓨터(Ubuntu 18.04)에서는 man콘솔에서 페이지를 잘 볼 수 있습니다.

man --html그런데 ( man -H)나 man --gxditview( man -X)가 제대로 작동 하지 않는 것 같아요 .

무엇이 잘못되었는지에 대한 힌트가 있는 사람이 있습니까?

관련 기사

잠재적인 해결 방법

다른 게시물과 비슷한 것을 사용할 수 있을 것 같지만 man2html가능하다면 "내장" 설정을 먼저 수정하는 방법을 알고 싶습니다.

또한 yelp man:cp의 제안은 다음과 같습니다.위에 링크된 포스팅, 꽤 좋아보이므로 지금은 그대로 사용할 것입니다(그러나 외부 참조가 거기에 있기를 바랍니다...).

생식

환경 변수를 "최소화"했습니다.다음 명령을 사용하십시오:

$ alias bash-isolate='env -i HOME=$HOME DISPLAY=$DISPLAY SHELL=$SHELL TERM=$TERM USER=$USER PATH=/usr/local/bin:/usr/bin:/bin bash --norc'
$ bash-isolate

# In isolated session
$ env | sort
DISPLAY=:1
HOME=/home/eacousineau
PATH=/usr/local/bin:/usr/bin:/bin
PWD=/home/eacousineau
SHELL=/bin/bash
SHLVL=1
TERM=screen
USER=eacousineau
_=/usr/bin/env

모든 예제는 이 환경에서 릴리스됩니다.

이 디스플레이는 man일반적으로 다음과 같이 작동합니다.


$ man cp | head -n 4
CP(1)                                       User Commands                                      CP(1)

NAME
       cp - copy files and directories

man --html=/usr/bin/firefox그러나 전화를 시도하면 man --gxditview다음과 같은 메시지가 나타납니다.

$ which groff
/usr/bin/groff

$ firefox
# A window opens up fine and dandy.

$ man --html=/usr/bin/firefox cp
Unable to init server: Could not connect: Connection refused
Error: cannot open display: :1
man: couldn't execute any browser from /usr/bin/firefox

$ gxditview
# A window opens up fine and dandy, also.

$ man --gxditview cp
groff: gxditview: Signal 31 (core dumped)
man: command exited with status 1: (cd /usr/share/man && /usr/lib/man-db/zsoelim) | (cd /usr/share/man && /usr/lib/man-db/manconv -f UTF-8:ISO-8859-1 -t UTF-8//IGNORE) | (cd /usr/share/man && preconv -e UTF-8) | (cd /usr/share/man && tbl) | (cd /usr/share/man && groff -mandoc -TX75 -X)

동일한 명령을 실행하지만 앞에 다음을 추가하면 export MAN_DISABLE_SECCOMP=1동작에 차이가 없습니다 .

$ export MAN_DISABLE_SECCOMP=1
$ env | sort
DISPLAY=:1
HOME=/home/eacousineau
MAN_DISABLE_SECCOMP=1
PATH=/usr/local/bin:/usr/bin:/bin
PWD=/home/eacousineau
SHELL=/bin/bash
SHLVL=1
TERM=screen
USER=eacousineau
_=/usr/bin/env

$ man --html=/usr/bin/firefox cp
# Same as above.
$ man --gxditview cp
# Same as above.

xhost +나는 또한 and를 가지고 놀려고 시도했지만 xhost +local:root(그리고 빠르게 전화를 걸고 xhost -/ xhost -local:root나중에 해당 세션을 종료함) 동일한 동작을 발견했습니다.

답변1

Ubuntu 18.04.4 LTS에 대한 수정 사항

달리기

BROWSER=firefox man --html cp

터미널 창에서

tail -f /var/log/syslog

다른 창에는 가상 머신에서 다음과 같은 출력이 표시됩니다.

Jun 20 22:25:00 redacted kernel: [186784.927254] audit: type=1400 audit(1592684700.904:81): apparmor="DENIED" operation="file_inherit" profile="man_groff" name="/tmp/hmanwJkIBp/cp.html" pid=6943 comm="preconv" requested_mask="w" denied_mask="w" fsuid=1000 ouid=1000
Jun 20 22:25:00 redacted kernel: [186784.960191] audit: type=1400 audit(1592684700.936:82): apparmor="DENIED" operation="file_inherit" profile="man_groff" name="/tmp/hmanwJkIBp/cp.html" pid=6944 comm="tbl" requested_mask="w" denied_mask="w" fsuid=1000 ouid=1000
Jun 20 22:25:00 redacted kernel: [186785.004522] audit: type=1400 audit(1592684700.980:83): apparmor="DENIED" operation="file_inherit" profile="man_groff" name="/tmp/groff-regions-GzqhRi" pid=6952 comm="troff" requested_mask="w" denied_mask="w" fsuid=1000 ouid=1000
Jun 20 22:25:01 redacted kernel: [186785.022296] audit: type=1400 audit(1592684700.992:84): apparmor="DENIED" operation="open" profile="man_groff" name="/etc/papersize" pid=6952 comm="troff" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
Jun 20 22:25:01 redacted kernel: [186785.652245] audit: type=1400 audit(1592684701.628:85): apparmor="DENIED" operation="connect" profile="/usr/bin/man" pid=6958 comm="firefox" family="unix" sock_type="stream" protocol=0 requested_mask="send receive connect" denied_mask="send connect" addr=none peer_addr="@/tmp/.X11-unix/X0" peer="unconfined"
Jun 20 22:25:01 redacted kernel: [186785.654920] audit: type=1400 audit(1592684701.632:86): apparmor="DENIED" operation="connect" profile="/usr/bin/man" pid=6961 comm="firefox" family="unix" sock_type="stream" protocol=0 requested_mask="send receive connect" denied_mask="send connect" addr=none peer_addr="@/tmp/.X11-unix/X0" peer="unconfined"

의미 apparmor및 구성 파일을 의미 man_groff하며 /usr/bin/man어떤 방식으로든 비기능적 명령에 참여합니다.

실행하면 sudo aa-status | grep man다음이 출력됩니다.

   /usr/bin/man
   /usr/lib/connman/scripts/dhclient-script
   man_filter
   man_groff

프로필을 비활성화 man하고 커널에서 AppArmor 정의를 제거하려면 다음을 실행합니다.

sudo ln -s /etc/apparmor.d/usr.bin.man /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.bin.man

그리고 출력을 다시 확인하십시오 sudo aa-status | grep man. 항목 /usr/bin/man, man_filter및가 man_groff사라져야 합니다.

그런 다음 실행

BROWSER=firefox man --html cp

또는

man --html=firefox cp

또는

MAN_DISABLE_SECCOMP=1 man --gxditview cp

즐기다.


노트:저는 이전에 AppArmor를 사용해 본 적이 없으며 Ubuntu VM에서 AppArmor가 활성화되어 있다는 사실조차 몰랐습니다. 다음 링크는 프로필을 비활성화하는 데 필요한 정보를 제공합니다.

답변2

기본 AppArmor 프로필을 완전히 비활성화하지 않으려면 /etc/apparmor.d/usr.bin.man편집하여 필수 누락 규칙을 추가하거나/etc/apparmor.d/local/usr.bin.man

aa-notifyaa-logprof여기에 설명된 것과 유사한 도구의 사용 및 조합우분투의 훌륭한 튜토리얼, 필요한 규칙을 찾을 수 있습니다.

# Needed by /usr/bin/man main profile:
#include <abstractions/nameservice>
capability sys_admin,

# Needed by man_groff child profile:
#include <abstractions/user-tmp>
/etc/papersize r,

관련 정보