AppArmor 버그로 인해 AA 제거, AA 복구 또는 Apt를 사용한 새 앱 설치가 차단됩니다.

AppArmor 버그로 인해 AA 제거, AA 복구 또는 Apt를 사용한 새 앱 설치가 차단됩니다.

AppArmor가 내 시스템에 문제를 일으키고 있습니다. 이제 AppArmor가 실행을 방해하므로 비활성화했습니다. 새로운 apt 애플리케이션을 설치할 수 없습니다. 어쨌든 시도하면 ...

E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.

명령을 실행하면 다음과 같은 결과가 나타납니다.

Reloading AppArmor profiles

재부팅할 때까지 그대로 유지됩니다. AppArmor를 제거하려고 하면 비슷한 메시지가 나타납니다. 이로 인해 새 애플리케이션을 추가하고 기존 애플리케이션을 업그레이드할 수 없습니다.

LSB-RELEASE에서:

DISTRIB_ID=neon
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="KDE neon 5.27"

이 문제를 해결하려면 어떻게 해야 합니까?

답변1

실제로 AppArmor를 비활성화하는 것은 약간 까다롭지만 단계를 수행하는 순서를 알고 있다면 특별히 힘들지는 않습니다. 키는 실제로 사용자 공간에 전혀 존재하지 않지만 커널 명령줄 매개변수, 특히 lsm=활성화 및 우선순위를 제어하는 ​​값에서 발생합니다.리눅스 보안 모듈.

먼저 cat /sys/kernel/security/lsm터미널에서 명령을 실행하여 커널이 로드하고 있는 모듈의 참조 지점을 얻으십시오. 그러면 다음과 같은 내용이 보고될 수 있습니다 lockdown,capability,landlock,yama,apparmor. 이제 매개변수에서 AppArmor LSM을 제거하여 재부팅을 위해 시스템을 준비할 차례입니다. AppArmor가 누락되었기 때문입니다 1sm=.

  1. aa-status어떤 AA 프로필이 활성화되어 있는지 확인하려면 tp의 출력을 살펴보세요 .

  2. 문제 sudo aa-teardown, 이렇게 하면 활성으로 보고된 모든 프로필이 제거됩니다. aa-status디스어셈블리 프로세스가 종료된 후 다시 호출하여 성공을 확인합니다.

  3. 시스템 시작 시 AppArmor 데몬을 로드하지 않도록 서비스 관리자에게 지시하십시오. 모듈이 로드되지 않도록 커널 명령줄을 변경하면 필연적으로 실패하게 됩니다. 요즘은 대부분 SystemD를 사용하는 것 같은데 이건...

    sudo systemctl stop apparmor.service
    sudo systemctl disable apparmor.service
    

    sudo systemctl mask apparmor.service실행을 방지할 뿐만 아니라 모든 명령을 방지하는 두 번째 명령(개인 취향)을 자유롭게 사용할 수도 있습니다.다른서비스는 자신이 시스템에 존재하는지 알지 못합니다. 또는 rc.d를 계속 사용하는 경우 이 시퀀스도 작업을 수행합니다.

    sudo invoke-rc.d apparmor stop
    sudo update-rc.d -f apparmor remove
    
  4. 실행 중인 시스템에서 즉시 부트로더 구성을 변경할지, 아니면 부팅 중에 부팅 프로세스를 중단하고 부트로더 인터페이스를 통해 현재 기본 커널 명령줄을 편집할지 결정합니다. 어쨌든, 여기서 마법이 일어납니다. 먼저 다음 apparmor=0으로 추가하세요.첫 번째 인수커널 명령줄에서 지정된 위치로 이동하여 lsm=이 프로세스 시작 시 살펴본 쉼표로 구분된 목록에서 제거하십시오. apparmor현재 커널 매개변수가 lsm=어디에도 지정되지 않은 경우(따라서 컴파일된 커널의 기본값에 의존하는 경우) 원하는 곳에 자유롭게 삽입하세요. 위치는 영향을 미치지 않습니다.

    명확하게 말하면 이전 명령의 출력이 시스템과 입니다경우cat유사한lockdown,capability,landlock,yama,apparmorlsm=lockdown,capability,landlock,yamaapparmor=0

이제 시스템이 부팅되면 lsmod | grep apparmor및 의 빈 출력이 ps aux | grep -v grep | grep apparmor표시되어 완전히 비활성화되었음을 확인할 수 있습니다. 이를 통해 패키지 관리 작업을 성공적으로 완료하고 다시 시작할 수 있기를 바랍니다.

답변2

유지 관리 수행

귀하의 의견을 잘못 읽었으므로 더 길어지기 전에 함께 알아가는대로 "진행적 답변"을 게시하겠습니다. 패키지가 성공적으로 설치된 것처럼 보이지만 서비스가 모든 구성 파일 로드를 거부합니다. 다음 단계부터 시작해 보겠습니다.

  1. 이제 패키지가 설치되었으므로 다음 명령을 사용하여 서비스를 일시적으로 "이동"해 보겠습니다 sudo systemctl stop apparmor.
  2. 성공적으로 중지되면 sudo systemctl disable apparmor.
  3. 시스템이 정지되지 않도록 재부팅하세요.

이제 서비스가 시스템을 중단시키지 않으므로 계속하겠습니다...

  1. AppArmor 항목 읽기우분투 위키.
  2. 업데이트 및 업그레이드를 수행하려면:sudo apt update && sudo apt upgrade
    • 위 업그레이드의 문제를 해결하기 위해 Peter의 답변 중 일부가 포함된 1로 돌아가겠습니다.

나는 우리에게 문제가 있는 구성 파일이나 문제가 있는 응용 프로그램이 있다고 생각합니다. 업데이트가 완료되면 해당 업데이트를 찾을 수 있는지 확인하겠습니다.

문제 해결 방법 준비

어떤 구성 파일이 문제가 있거나, 손상되었거나, 손상되었는지 알 수 없기 때문입니다.무례한, 설치된 각 의류 프로필을 나열하고 테스트해야 합니다. APT 도구를 테스트하는 동안 출력을 아름답게 만드는 데 도움이 되는 도구를 사용해 보겠습니다.

  1. 아직 유니버스 리포지토리를 추가하지 않은 경우 다음을 사용하세요.sudo add-apt-repository universe
  2. 설치 treesudo apt install -y tree
  3. 질문tree /etc/apparmor.d/ > ~/apparmorProfilesList.txt

apparmorProfilesList.txt를 열고 확인해야 할 숫자를 세어보세요.

프로필 비활성화

안타깝게도 스크립트를 통한 도움 없이는 모든 프로필을 한 번에 비활성화할 수 없습니다. 따라서 txt 파일에 나열된 각 프로필을 한 번에 하나씩 비활성화해야 합니다. 또한 더 자세히 조사한 결과 불만 제기 모드는 직장 프로필 위반만 보고합니다. 불만 모드는 작동하지 않기 때문에 도움이 되지 않습니다. 따라서 하나씩만 비활성화한 다음 하나씩 다시 활성화할 수 있습니다. 작성하는 데 시간이 걸리므로 이것이 허용되는지 댓글을 통해 알려주십시오.

(댓글을 받지 못해서 계속해서 이 답변을 완성하겠습니다.)

방법

이 문제를 해결하기 위한 나의 접근 방식은 아래 Peter의 접근 방식과 약간 다릅니다. 저는 distro 지원 커널에서 프로젝트를 "끄고" 싶지 않습니다. Ubuntu는 LSM 및 AppArmor를 지원하므로 커널 지원은 활성화된 상태로 유지되어야 합니다. 내 접근 방식은 다음과 같습니다.

  1. AppArmor SystemD 서비스를 비활성화합니다.
  2. 모든 AppArmor 구성 파일을 disabled디렉터리 로 이동
  3. 구성 파일을 로드하지 않고 AppArmor SystemD 서비스를 다시 시작합니다. 이로 인해 예상되는 오류가 발생할 수 있지만 서비스가 중단되어서는 안 됩니다.
  4. SystemD 서비스를 일시 중단하는 프로필을 찾을 때까지 2단계의 각 프로필을 한 번에 하나씩 활성 프로필 디렉터리로 이동합니다.
  5. 문제가 되는 프로필에 오류가 있으면 보고하세요.

구현하다

다음 스크립트를 사용하여 비활성화 프로세스 속도를 높일 수 있습니다. 편집자/중재자는 BASH 전문가와는 거리가 멀기 때문에 이 스크립트를 자유롭게 편집하시기 바랍니다(이 이름을 "disableAllProfiles"로 지정하고 실행 가능하게 만드십시오 [ +x]).

#!/bin/bash
# NOTE : Quote it else use array to avoid problems #
PROFILES="/etc/apparmor.d/*"
for p in $PROFILES
do
  echo "Processing $p file..."
  # take action on each file. $p stores current profile
  mv -v "$p" /etc/apparmor.d/disable/
done

ls및 에 대한 /etc/apparmor.d/질문을 발행합니다 /etc/apparmor.d/disable. 팁: 비활성화에는 파일이 있어야 하고, 그 부모에는 파일이 없어야 합니다.. 프롬프트가 올바르면 계속하십시오. 이제 다음을 수행할 수 있습니다.

  1. SystemD 서비스를 다시 활성화하고 다시 시작합니다. ( systemctl enable apparmor && systemctl start apparmor구성 파일 디렉터리가 비어 있으므로 오류가 발생할 수 있습니다.)
  2. 비활성화된 디렉토리의 첫 번째 서비스를 상위 디렉토리로 다시 이동합니다 /etc/apparmor.d/.
  3. 서비스를 다시 로드하여 프로필이 추가되었음을 시스템에 알립니다.sudo service apparmor reload
  4. 프로필을 계속 이동하고, 정지 상태가 나타날 때까지 이동할 때마다 3단계를 반복하세요 Reloading AppArmor Profiles. 프로세스를 종료하고 보류 중인 프로필을 기록해 둡니다. 보류 중인 프로필을 disable디렉터리에 다시 배치하고 모든 프로필이 다시 배치되거나 비활성화될 때까지 목록 아래로 계속 이동합니다.

오류 보고서

위의 모든 작업이 완료되면 비활성화된 디렉터리를 정지시키는 구성 파일이 생성됩니다. 다음과 같이 발행됩니다.

dpkg -S <offending profile>

이는 구성 파일이 어떤 패키지에 속하는지 알려줍니다. 사용우분투 런치패드패키지를 검색합니다. 프로필과 관련된 오류를 확인하거나 새로운 오류를 신고하세요.


노트:위의 테스트 방법이 첫 번째 프로필이나 모든 프로필에서 실패하면 상황이 더 악화될 수 있습니다.

관련 정보