우선 sudo에 대해서 알아보도록 하자.
보통 Linux 서버를 운영하면, 관리자 계정과 일반 사용자 계정으로 나뉘어져 운영을 하게 된다.
관리자 계정은, 보통 root 계정이고 사용자 계정은, 운영자가 아닌 일반 사용자 or 개발자에게 개별적으로 할당하는 계정(사용자 권한)을 말한다.
그런데 리눅스 서버에 서비스를 운영하다보면, 일반 사용자 계정을 사용 하는 사람도 때에 따라서 관리자의 권한이 필요할 때가 있다.
이때, 일반 사용자는 su 명령어를 통해서 root 권한으로 로그인하여 관리자 계정으로 재로그인 할수도 있지만, sudo 라는 명령어를 통해서 임시적으로 root 권한을 가질 수 잇다.
sudo 명령어는 유닉스 및 유닉스 계열 운영 체제에서, 다른 사용자의 보안 권한, 보통 슈퍼유저로서 프로그램을 구동할 수 있도록 하는 프로그램이다. 명칭은 본래 슈퍼유저로서의 실행에 사용되던 것에서 "superuser do"에서 유래하였으나, 후에 프로그램의 기능이 확장되며 "substitute user do"(다른 사용자의 권한으로 실행)의 줄임말로 해석되게 되었다. 기본적으로 sudo는 사용자 비밀번호를 요구하지만 루트 비밀번호(root password)가 필요할 수도 있고, 한 터미널에 한번만 입력하고 그 다음부터는 비밀번호가 필요 없다. sudo는 각 명령줄에 사용할 수 있으며 일부 상황에서는 관리자 권한을 위한 슈퍼유저 로그인(superuser login)을 완벽히 대신하며, 주로 우분투, 리눅스와 애플의 OS X에서 볼수 있다.
sudo 명령어를 사용하려면, 관리자가 일반 계정에 sudo 사용 권한을 주어야 하는데, 권한을 주기 위해서는 sudoers 파일에 설정이 필요하다.
sudo 명렁어는 /etc/sudoers 설정 파일에 명시되어 있는 User만 사용 가능하다. 이를 수정하려면 visudo 명령어를 이용하는것이 정석적이다. 이를 사용하지 않을시 sudoers 파일에 보안상 문제가 생길수 있다.
윈도우의 '관리자 권한으로 실행'과 비슷한 기능을 한다.
보안이 중요해진 이후에 나오는 리눅스 주요 배포판은 윈도우의 UAC처럼 권한 상승 안내문이 나온다.
만약 chown -R 명령어를 잘못 사용해서 sudo 관련 폴더 소유자가 root가 아닌 일반 계정으로 바뀌면 재설치하기 전에는 다시는 root의 권한이 필요한 작업을 할 수 없다. 물론 root로 로그인할 수 있다면 su를 쓰거나 root로 로그인해서 다시 복구하면 되지만 보통 sudo를 사용하겠다는 것은 우분투의 경우와 같이 root 계정을 아예 막겠다는 이야기라는 것이 문제다.
이처럼 사실 sudo는 상당히 조심해서 써야 하는 명령어이다. 이를테면 sudo rm -rf ./*를 잘못 쳐서 sudo rm -rf /*을 치는 순간 돌아올 수 없는 길을 건넌 것이다. 중요한 명령을 sudo로 실행할 때는 제대로 입력했는지 확인하는 습관을 가지자.
위에서 언급된 visudo가 별 특별한 에디터는 아니고 편집기 자체는 그냥 vim과 똑같지만, /etc/sudoers 파일에 문법적 오류 등이 있는 경우 파일을 쓰는 것을 방지한다. 예를 들어 sudoers 파일을 편집하다가 ALL로 써야 하는걸 AL;로 써버린 후 오타를 알아차리지 못한 채 저장하고 나면 sudo는 파일을 읽지 못하고 오류를 내게 된다. 심지어는 root 계정이 아닌 이상 이걸 되돌릴 수도 없는데, 이는 /etc/sudoers를 편집하는 일 자체가 슈퍼유저 권한이 필요하기 때문이다. visudo를 사용하면 실제로 파일을 덮어쓰기 전에 문법 오류가 있는지 검사하고 덮어쓰기를 방지해 이런 실수를 미연에 방지한다.
sudoers 파일은 readonly로만 열리기 때문에 수정, 저장할 수가 없다.
파일에서도 주석으로 작성되어 있다.
## This file must be edited with the 'visudo' command.
그렇기 때문에 위에서 언급했듯이 visudo 명령어를 통해서 수정하자.
[일반 계정에게 sudo 권한 부여하기]
권한 부여 방법
/etc/sudoers 파일에 아래와 같은 방법으로 설정하면, Root 권한을 획득할 수 있다.
일반 계정 : <일반계정> ALL=(ALL) ALL
일반 그룹 : <%일반그룹> ALL=(ALL) ALL
만약 sudo 명령어 사용시 비밀번호 입력이 필요없도록 하려면,
일반 계정 : <일반계정> ALL=(ALL) NOPASSWD:ALL
일반 그룹 : <%일반그룹> ALL=(ALL) NOPASSWD:ALL
위와 같이 설정해주면 된다.
[/etc/sudoers.d 폴더 안에 파일]
파일을 만들때, /etc/sudoers 파일과 마찬가지로 /etc/sudoers.d 폴더안에 파일을 만들때는 visudo를 이용한다.
이러한 파일을 만들거나 편집하는 구문은 아래와 같다.
sudo visudo -f filename
[sudoers 보안]
일반 사용자에게 관리자의 권한을 제공한다는건 당연히 보안에 취약한 부분이 있다.
예를 들어, sudo 모드 권한을 제공한 일반계정이 탈튀된다면,
사실상 관리자의 권한이 모두 탈취되었다고 볼 수 있기 때문이다.
이를 보완하기 위해,
sudo 권한을 제공하되, 일부 명령어를 제한하여 제공할 수 있다.
위와 같이 제공한다면, testuser라는 일반계정은 비밀번호 입력 없이 sudo 명령을 통해서,
/usr/sbin/httpd와 /etc/rc.d/init.d/mysqld 명령을 사용할 수 있다.
추가로 다른 계정에 sudo 권한을 주기 위해서 계정을 추가하거나 그룹을 생성해서도 진행한다.
그리고 sudoers Permission 관련 명령어를 입력해서 권한을 바꿔줘야 한다.
권한이 없다고 하는 경우
1. /etc/sudoers의 Permission이 440인지 먼저 확인한다.
=> 아닐 경우 chmod 440 /etc/sudoers를 입력해서 권한 변경
2. /usr/bin.sudo 의 Permission 이 4011인지 확인(setuid 확인)
=> 아닐 경우 chmod 4011 /usr/bin/sudo를 입력해서 변경
3. /의 Permission이 755인지 확인
=> 아닐 경우 chmod 755 / 또는 chmod 711 /
4. /etc의 Permission 755인지 확인
=> 아닐 경우 chmod 755 /etc 또는 chmod 711 /etc
출처 :
https://lifeplan-b.tistory.com/159
'[OS] > Linux' 카테고리의 다른 글
[참고] Red Hat Linux, Fedora, CentOS와 Rocky Linux의 관계!! (54) | 2023.12.05 |
---|---|
[참고][Linux] sed 명령어 파일 편집 방법 (특수문자 / 처리 방법) (51) | 2023.11.28 |
[리눅스/유닉스] du 명령어, 디렉터리별 디스크 사용량 확인하기. 퍼센테이지 비율로 확인하기 , ls명령어와 크기가 다른 이유? (0) | 2023.07.17 |
[Linux] 권한 관리 명령어 사용 방법(chmod, chown, chgrp) (0) | 2022.09.14 |
[Linux] ssh port 변경 (0) | 2022.09.01 |
[Linux] 어떤 Linux 파일 시스템을 사용해야합니까? (1) | 2022.09.01 |
[Linux] scp 명령어 사용법 (0) | 2022.08.24 |
[AWS][Linux] fstab 정의 및 옵션 (0) | 2022.08.10 |
댓글