sudo apt update/upgrade

akfvh·2022년 12월 28일
1

들어가며

🤚 해당 글은 학습을 목적으로 정리한 글이며
🤚 노력은 하겠지만 정확한 정보를 보장하지 않으며
🤚 정보의 출처로 사용하기 부적합함을 알립니다.
🤚 각 정보의 출처는 별도 표기한 출처에서 직접 확인하실 수 있습니다.


WSL 환경 구축 시, 그리고 wsl을 부팅할 때 마다 무심코 입력했던 sudo apt update, 그리고 sudo apt upgrade 명령어에 대해 간략하게 알아보고자 한다.
sudo, apt, update/upgrade의 세 부분으로 나눠 살펴보고자 한다.

Commandline 분석

1. SUDO

Sudo (su “do”) allows a system administrator to delegate authority to give certain users (or groups of users) the ability to run some (or all) commands as root or another user while providing an audit trail of the commands and their arguments. For more information, see the introduction to Sudo.

프로그램을 루트 권한, 또는 관리자 권한으로 실행할 수 있는 권한을 부여한다.

대부분 linux 배포판에 미리 설치되어 있으며, 입력 창에 SUDO를 입력하고 엔터를 쳤을 때 일부 usage가 나오는 것을 통해 설치되어있음을 확인할 수 있다.

  • sudo 입력 후 enter를 쳤을 때 나오는 출력화면.
  • SUDO가 설치되어있음을 알 수 있다.

root계정으로 직접 전환하여 커맨드를 실행하는 대신 sudo명령어를 사용하는 이유는 root 계정과 관련된 보안 이슈가 주를 이루며 다음과 같은 이유들이 있다.

  1. ROOT는 쉽고 확실한 공격벡터이다.

    • login name이 명확하며 이에 따라 비밀번호에 대한 자동화된 brute force attack등의 공격을 하면 되므로 별도 계정 환경보다 취약하다.

    • 가장 강력하고 권한이 많은 사용자이기 때문에 보안에 실패하게 되면 상당히 큰 위험에 노출된다.

    • 따라서 root계정을 제거하는 것이 보안에 도움이 될 수 있으며, 해당 과정은 주의를 필요로 하므로 추후 다시 다루기로 한다.

  2. 선택적 권한 부여

    • sudo의 configuration을 수정해 일부 사용자에게 특정 커맨드에 대한 실행 권한을 부여할 수 있다.

    • 이러한 방식을 사용하면 해당 사용자가 해당 커맨드를 실행하는 데 나의 비밀번호, 혹은 root계정의 비밀번호를 필요로 하지 않고, 해당 유저의 비밀번호를 요구하므로, root계정을 보호할 수 있다.

  3. LOGGING

    • 앞에서 가져온 설명의 뒷부분에서 알 수 있는 내용이다.

    • 일부 유저나 그룹에게 특정 커맨드에 대한 권한을 부여함과 동시에 해당 커맨드와 arguments에 대한 trail을 제공한다.

사이트를 참고했습니다. 자세한 설명은 직접 확인해보실 수 있습니다.

이러한 sudo 명령어의 역할을 apt update/upgrade와 연관지어 유추하자면, 본래 root권한으로 실행해야 할 apt 명령어에 대해 root 계정으로 전환하지 않고, 해당 계정에서 실행할 수 있게 해주고, 그 이유는 계정 보안과 관련되어 있다. 라고 정리할 수 있을 것 같다.

2. APT

앞서, SUDOAPT 명령어를 실행하는 데 필요한 ROOT권한을 사용자 계정에서 실행할 수 있도록 한다고 했다. 이제 APT 명령어는 어떠한 종류의 명령어를 실행하는 지 알아보려고 한다.

Advanced Packaging Tool

APT는 Ubuntu, Debian 및 관련 linux 배포판에서 deb패키지의 설치, 삭제, 업데이트 등 관리를 위해 사용할 수 있는 commandline utility이다.

기존 apt-getapt-cache의 자주 사용되는 툴들을 특정 default value와 옵션과 함께 합친 명령어이다.

따라서 별도 옵션 없이 보편적인 패키지 관리 용도로는 APT명령어를 사용 해도 무방하고, 더 전문적이고 세밀한 사용 목적을 위해서는 apt-get명령어를 사용하면 되겠다. 아마 후자의 경우는 사용자가 필요에 따라 알아서 사용할테니 일반적인 사용을 위해서는 전자도 충분함을 알면 되겠다.

update/upgrade

마지막으로 글의 본 목적인 aptupdate/upgrade명령어이다.

해당 명령어들을 위해 apt-getmanpage를 참고했다.

apt updateapt upgrade는 분명히 다른 기능을 하는 명령어지만, 설명에서는 일상에서 사용하는 보편적인 개념으로서의 업데이트를 사용하고있다.

1. update

sudo apt update

Used to re-synchronize the package index files from their sources.
The indexes of available packages are fetched from the location(s) specified in /etc/apt/sources.list(5). An update should always be performed before an upgrade or dist-upgrade.
linux man page

패키지들의 index file들을 source와 재동기화한다고 한다.

간단히 말하자면 저장소의 패키지들에 대해 패키지의 source와 비교하여 버전정보(올바른 단어 선택인지는 모르겠다)를 최신화한다고 할 수 있겠다.

플레이스토어에 이따금씩 "업데이트 가능 앱"을 표시해주는 기능과 유사하게 볼 수 있을 것 같다.

🔔중요한 것은 저장소에서 패키지들의 버전 업데이트가 실제로 이루어지지는 않으며, 패키지 정보의 최신화 이후 apt upgrade를 통해 실제 업데이트를 해주어야한다는 것이다.

🔔반대로 말하자면 실제로 패키지를 최신버전으로 업데이트 하는 apt upgrade에 앞서 apt update가 이루어져야 패키지의 업데이트가 가능하다 !

2. upgrade

sudo apt upgrade

Used to install the newest versions of all packages currently installed on the system from the sources enumerated in /etc/apt/sources.list(5). Packages currently installed with new versions available are retrieved and upgraded;
( . . . )
An update must be performed first so that apt-get knows that new versions of packages are available.
linux man page

저장소에 설치된 패키지들의 최신 버전을 /etc/apt/sources.list에 나열된 source를 기반으로 설치한다고 한다. apt update와 달리 실제로 시스템의 업데이트가 이루어진다.

생략된 부분에서는 저장소에 설치된 패키지와 그 상태에 따라 apt-get upgrade명령어가 실행되는 양상을 다루고 있다. 궁금하면 직접 manpage를 참고해보자.

🔔 패키지들의 새로운 버전이 있는지 apt-get가 알 수 있도록 update를 먼저 수행하라고 한다.

🔔 update의 manpage에서 설명한 내용 그대로 다시 설명하고있다.

🔔 꼭 기억하도록 하자 !

패키지 업데이트 과정

그래서 패키지 업데이트는 어떻게 한다고?

정말 마지막으로 apt명령어들을 사용한 linux의 패키지 업데이트 과정을 간략하게 써보려고 한다.

실제로 해본 패키지 업데이트 수행 과정이다

  1. UPDATE
sudo apt update

앞에 서술했듯, apt-get가 패키지들의 최신 버전 정보를 알 수 있도록 update를 실행해주자.

sudo를 사용하기에 비밀번호를 요구하는 것을 확인할 수 있다.

  1. (CHECK UPGRADABLE)
sudo apt list --upgradable

update가 끝났으면, upgrade가 가능한 패키지들의 리스트들을 확인하자. upgrade가능한 패키지들이 몇 개인지는 나오지만, 상세 리스트는 나오지 않기 때문이다.

실질적인 기능 상으로 보자면 생략 가능한 단계이기도 하다.

  1. UPGRADE
sudo apt upgrade

업데이트된 패키지들의 최신버전 정보를 기반으로 upgrade를 실행하자.

마치며

평소에 제대로 알지 못하고 사용했던, sudo, apt와 관련해서 간략하게 적어보려던 글이 구글링을 하며 모르는 개념과 용어들을 타고타고 구글링해가며 익히고 정리하다보니 생각보다 많이 길어졌다. 하지만 그만큼 배운 점도 많았고, 배울 것도 많음을 알게 되었다.

다음은 글을 쓰며 접했던 더 공부해보고 싶었던 것들이다.

  • linux와 linux의 여러 배포판
  • root와 보안
  • apt의 다양한 툴들
  • apt-get의 다양한 옵션들

이렇게 적어두면 언젠가는 공부하겠지

그리고 여러 블로그들을 참고해가며 글을 썼지만, linux 명령어들에 대한 정보는 역시 linux manpage를 참고하는게 가장 깔끔하고 신뢰가 갔다. 해석이 필요하고 설명에 포함된 개념과 키워드들에 대한 학습이 필요해서 잘 참고하지 않았었지만, 이를 습관화해야겠다고 느꼈다.

profile
TIL/projects

0개의 댓글