저는 페도라 33을 사용하고 있습니다. 나는 단순한 사실에 혼란스러워합니다.
설치되지 않은 프로그램을 실행하려고 하면 dnf가 저장소를 검색하여 설치를 제안합니다. '예'라고 답하면 설치가 되어 정상적으로 사용할 수 있습니다.
소프트웨어( )를 설치하려고 하면 dnf install <package>
감독자 비밀번호를 묻는 메시지가 나타납니다.
내 예에서는 "ranger"를 두 가지 방법으로 모두 설치해 보았지만 차이점을 찾을 수 없는 것 같습니다. 둘 다 동일한 bin 디렉토리에 있으며 둘 다 프로세스의 사용자로 실행됩니다.
내 질문은 다음과 같습니다. 어쨌든 비밀번호 없이 간단히 소프트웨어를 설치할 수 있다면 dnf에서 비밀번호를 요구하는 이유는 무엇입니까?
답변1
설명하는 시나리오에서 "귀하"는 설치된 패키지가 없습니다.패키지 키트서비스(이미 루트로 실행 중)가 사용자를 대신하여 설치 중입니다. PackageKit은 PolicyKit을 사용하여 소프트웨어 패키지를 설치할 수 있는 사람과 설치할 수 없는 사람을 결정합니다. 권한이 없는 사용자가 소프트웨어를 설치할 수 없도록 하려면 PolicyKit 정책을 변경하여 이를 허용하지 않을 수 있습니다. PackageKit이 존재하는 이유 중 하나는 사용자가 사용하는 배포판( dnf
, , yum
, , apt
, 또는 pacman
무엇이든) 에서 패키지 관리 시스템의 세부 사항을 알 필요가 없다는 것입니다. 그들은 단지 PackageKit에 요청하면 됩니다. 패키지를 설치하면 PackageKit이 이를 처리합니다. 패키지 관리 및 특정 배포판 설치에 대한 세부 정보입니다. Fedora에 패키지를 수동으로 설치하는 경우 dnf
패키지 관리 시스템과 직접 상호 작용합니다. PackageKit은 사용자를 대신하여 이 작업을 수행하지 않습니다. 따라서 해당 수준에서 설치를 실행하려면 루트로 실행하거나 루트 비밀번호를 제공해야 합니다. 소프트웨어 패키지. 그러나 일반 사용자로서 루트로 실행하지 않고도( 또는 등을 pkcon install <packagename>
통해) PackageKit에 사용자를 대신하여 설치하도록 요청할 수 있습니다(PolicyKit에 구성된 시스템 정책에서 허용하는 한) . ) 또는 루트 비밀번호를 제공하십시오.su
sudo
아직 설치하지 않은 패키지에서 제공하는 명령줄에서 무언가를 실행하려고 하면 패키지를 설치하라는 메시지가 표시되는 동작에 대해 설명합니다.PackageKit 명령을 찾을 수 없습니다".저는 이런 행동을 정말 싫어합니다. 새로 설치된 Linux 시스템에서 가장 먼저 하는 일은 패키지를 제거하여 PackageKit-command-not-found
이런 일이 발생하지 않도록 하는 것입니다...
답변2
설치되지 않은 프로그램의 이름을 입력하면 dnf
해당 프로그램이 설치되지 않습니다.패키지 키트이것은명령어를 찾을수 없음플러그인(패키지 PackageKit-command-not-found
). PackageKit은 PolicyKit을 사용하여 권한 있는 작업을 수행할 때 암호를 요구할지 여부를 결정하며 로컬 활성 관리자는 패키지 설치를 위해 암호를 제공할 필요가 없습니다(이것은 Fedora 특정 기능이 아니며 usptream에서 제공됩니다. 참조)이번 FESCO 토론). 이것이 바로 PackageKit을 백엔드로 사용하는 GNOME 소프트웨어와 같은 GUI 도구에서 패키지를 설치하거나 업데이트할 때 비밀번호를 제공할 필요가 없는 이유입니다.
암호를 묻지 않는 pkcon
명령 줄에서 PackageKit을 사용할 수도 있습니다 .pkcon install <package>
그리고 왜 dnf
필요한가요 sudo
? PolicyKit을 전혀 사용하지 않습니다.
답변3
현재 기존 리포지토리에서 관리하는 패키지만 설치하도록 DNF를 제한합니다. 구현하다둘 다편집증이 있는 경우 명시적으로 허용하고 명시적으로 거부하지만적어도명시적 거부 자체는 그다지 좋지 않으므로 명시적 허용을 수행합니다.
- 명시적으로 허용:
- cron 어딘가에 사용 가능한 패키지 목록을 캐시합니다.
- 즉, 사용 가능한 dnf 목록입니다.
- 이 목록의 설치 패키지만 허용
- 이름이 지정된 패키지만 허용됩니다
[0-9A-Za-z][0-9A-Za-z._-]+
(-로 시작할 수 없음). - 다른 건 다 부정해
- 명시적으로 거부:
- "-"로 시작하는 모든 옵션을 거부합니다.
- "/"가 포함된 옵션은 거부되므로 로컬 및 원격 패키지를 설치할 수 없습니다.
- 시험:
- 래퍼에 대한 sudo 액세스 제공
- /usr/bin/dnf를 실행하려는 경우 sudo가 실패하는지 확인하세요.
- 스크립트가 다음과 같은지 확인하세요.명령 주입 보안
내가 뭐 놓친 거 없니? 설치할 수 있는 패키지가 없는 한(즉, 악용 가능한 패키지에 루트 권한 에스컬레이션이 있거나 기본값이 잘못 구성되어 있는 경우) 이를 악용하여 루트 권한을 얻는 방법을 생각할 수 없습니다.
사용자가 바이너리(커널 취약점을 악용하는 데 사용될 수 있음)를 빌드하는 것을 원하지 않는 경우 스크립트에서 다음 바이너리를 제외할 수도 있습니다.
- 걸프 협력 협의회
- C++
- 그 소리
- 가다
- 녹
- 복전어
- 다른 사람들?