>  기사  >  운영 및 유지보수  >  리눅스 시스템에서 sudo 명령을 사용하는 방법

리눅스 시스템에서 sudo 명령을 사용하는 방법

王林
王林앞으로
2023-05-14 15:01:205442검색

예: mount, Halt, su 등과 같은 일부 명령을 실행하거나 /etc/mtab, /etc/samba/smb.conf 등과 같은 일부 시스템 구성 파일을 편집합니다. 이러한 방식으로 루트 사용자 로그인 횟수와 관리 시간을 줄일 뿐만 아니라 시스템 보안도 향상시킵니다.

1. sudo의 특징

sudo가 수행하는 역할은 보안 측면에서 더욱 주의해야 한다는 것을 의미합니다. 그렇지 않으면 불법 사용자가 루트 권한을 빼앗게 됩니다. 동시에 시스템 관리자가 보다 효율적이고 편리하게 사용할 수 있도록 사용 편의성도 고려해야 합니다. sudo 디자이너의 목표는 사용자에게 작업을 완료할 수 있도록 허용하면서 가능한 한 적은 권한을 부여하는 것이었습니다. 따라서 sudo
에는 다음과 같은 특징이 있습니다.

# 1. sudo는 지정된 사용자가 지정된 호스트에서 특정 명령을 실행하는 것을 제한할 수 있습니다.
# 2. sudo는 로그를 제공할 수 있고, 각 사용자가 sudo를 사용하여 수행한 작업을 충실하게 기록하고, 로그를 중앙 호스트 또는 로그 서버로 전송할 수 있습니다.
# 3. sudo는 시스템 관리자를 위한 구성 파일을 제공하여 시스템 관리자가 사용자 권한과 호스트를 중앙에서 관리할 수 있도록 합니다. 기본 저장 위치는 /etc/sudoers입니다.
# 4.sudo는 타임스탬프 파일을 사용하여 "티켓 확인"과 유사한 시스템을 완성합니다. 사용자가 sudo를 실행하고 비밀번호를 입력하면 사용자는 기본 생존 기간이 5분인 "티켓"을 얻습니다(기본값은 컴파일 중에 변경될 수 있음). 시간 초과 후에는 사용자가 비밀번호를 다시 입력해야 합니다.

2. sudo 명령

sudo 프로그램 자체는 suid 비트가 설정된 바이너리 파일입니다. 권한을 확인할 수 있습니다.

코드 복사 코드는 다음과 같습니다.


$ls -l /usr/bin/sudo
---s--x--x 2 root root 106832 02-12 17 :41 /usr/bin/sudo

소유자는 루트이므로 모든 사용자는 루트로 프로그램을 실행할 수 있습니다. suid가 설정된 프로그램은 실행 시 사용자에게 소유자의 euid를 제공할 수 있습니다. 이것이 suid를 설정하는 프로그램을 주의 깊게 작성해야 하는 이유입니다. 그러나 명령 파일의 suid를 설정하는 것과 sudo로 실행하는 것은 서로 다른 개념이고 서로 다른 역할을 합니다.

Sudo 구성은 /etc/sudoers 파일에 기록되며, 이에 대해서는 아래에서 자세히 설명하겠습니다. 구성 파일은 어떤 사용자가 어떤 명령을 실행할 수 있는지 지정합니다. sudo를 사용하려면 사용자는 특정 사용자 이름과 비밀번호를 제공해야 합니다. 참고: sudo에는 대상 사용자의 비밀번호가 아니라 sudo를 실행하는 사용자의 비밀번호가 필요합니다. sudoers에 속하지 않은 사용자가 sudo를 통해 명령을 실행하면 sudo는 이 이벤트를 관리자에게 보고합니다. 사용자는 sudo -v를 사용하여 자신이 sudo 사용자인지 확인할 수 있습니다. 그렇다면 "티켓"의 시간도 업데이트할 수 있습니다. 그렇지 않은 경우 메시지가 표시되지만 관리자에게 알리지는 않습니다.

sudo 명령 형식은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.


sudo -k -l -v -h -k -l -vsudo [-hpsb] [-a auth_type] [-c class-] [- p 프롬프트] [-u 사용자 이름#uid] {-e 파일 [...] -i -s 명령}

일반적으로 사용되는 다른 sudo 매개변수를 살펴보겠습니다.

옵션 의미 기능
sudo-hhelp 열 사용법을 표시하고 종료합니다.
sudo-vversion은 버전 정보를 표시하고 종료됩니다.
sudo-llist는 현재 사용자가 실행할 수 있는 명령을 나열합니다. sudoers 사용자만 이 옵션을 사용할 수 있습니다.
sudo-uusername#uiduser는 지정된 사용자로 명령을 실행합니다. 다음 사용자는 루트가 아니며 사용자 이름 또는 #uid일 수 있습니다.

sudo-kkill은 "입장권"의 시간을 지우고 다음에 sudo를 사용할 때 비밀번호를 입력하도록 요구합니다.

sudo-ksurekill은 -k와 유사하지만 "입장권"을 찢습니다. 즉, 타임스탬프 파일을 삭제합니다.

sudo-bcommandBackground는 지정된 명령을 백그라운드에서 실행합니다.

sudo-ppromptcommandprompt는 비밀번호 프롬프트를 변경할 수 있습니다. 여기서 %u는 사용자 계정 이름으로 대체되고 %h는 호스트 이름을 표시합니다. 매우 사용자 친화적인 디자인.
sudo-efileedit는 명령을 실행하지 않지만 파일을 수정합니다. 이는 sudoedit 명령과 동일합니다.

맨 페이지 sudo(8)에서 찾을 수 있는 덜 일반적으로 사용되는 매개 변수도 있습니다.

3. sudo 구성

sudo 구성은 /etc/sudoers 파일을 편집하여 이루어져야 하며, 슈퍼유저만 수정할 수 있으며, visudo를 사용하여 편집해야 합니다. visudo를 사용하는 이유는 두 가지입니다. 하나는

두 명의 사용자가 동시에 수정하는 것을 방지할 수 있다는 것입니다. 다른 하나는 제한된 구문 검사도 수행할 수 있다는 것입니다. 따라서 귀하가 유일한 슈퍼유저이더라도 visudo를 사용하여 구문을 확인하는 것이 좋습니다.

Visudo는 기본적으로 vi에서 구성 파일을 열고 vi를 사용하여 파일을 수정합니다. 이 기본 항목은 컴파일 타임에 수정할 수 있습니다. visudo는 승인 없이 구문 오류가 있는 구성 파일을 저장하지 않습니다. 다음과 같이 문제에 대한 메시지를 표시하고 이를 처리하는 방법을 묻습니다.

코드 복사 코드는 다음과 같습니다.


>>> sudoersfile:syntaxerror ,line22<<


이 시점에는 세 가지 옵션이 있습니다. 다시 편집하려면 "e"를 입력하고, 저장하지 않고 종료하려면 "x"를 입력하고, 종료하고 저장하려면 "q"를 입력하세요. q를 선택하면 오류가 수정될 때까지 sudo가 다시 실행되지 않습니다.

이제 신비한 구성 파일을 살펴보고 작성 방법을 배워보겠습니다. 간단한 예부터 시작하겠습니다. 사용자 foobar가 sudo를 통해 모든 루트 실행 가능 명령을 실행하도록 합니다. visudo를 루트로 사용하여 구성 파일을 열면 다음과 유사한 몇 줄을 볼 수 있습니다.

코드 복사 코드는 다음과 같습니다.


#runasaliasspecation
#userprivilegespecationrootall=(all)all

우리는 할 수 있습니다 루트에는 모든 권한이 있으므로 아래에 한 줄을 추가합니다(탭을 공백으로 사용하는 것이 가장 좋습니다).

코드 복사 코드는 다음과 같습니다.


foobarall=(all)all


Save 종료 후 foobar 사용자로 전환하면 해당 ID를 사용하여 명령을 실행합니다.

코드 복사 코드는 다음과 같습니다.


[foobar@localhost~ ]$ls/root
ls:/root: 권한 부족
[foobar@localhost ~]$sudols/root
password:
anaconda-ks.cfgdesktopinstall.loginstall.log.syslog

좋아, foobar의 권리를 제한하고 방지하자 그가 원하는 것은 무엇이든 하지 못하게 하세요. 예를 들어, 루트처럼 ls 및 ifconfig를 사용하려면 해당 행을 다음과 같이 변경하세요.

코드 복사 코드는 다음과 같습니다:


foobarlocalhost=/sbin/ifconfig,/bin/ls


명령을 다시 실행하세요:

코드 복사 코드는 다음과 같습니다:


[foobar@localhost~]$sudohead-5/etc/shadow
password:
죄송합니다,userfoobarisnotallowedtoexecute'/usr/bin/head-5/ etc/shadow'asrootonlocalhost.localdomain.
[foobar@localhost~]$sudo/sbin/ifconfigeth0linkencap:ethernethwaddr00:14:85:ec:e9:9b...


이제 이 세 가지가 모두 무엇인지 살펴보겠습니다. 평균. 첫 번째 all은 네트워크의 호스트를 나타냅니다. 나중에 이를 호스트 이름으로 변경했습니다. 이는
foobar가 이 호스트에서 후속 명령을 실행할 수 있음을 나타냅니다. 두 번째 대괄호 안의 모두는 대상 사용자, 즉 명령을 실행할 ID를 나타냅니다. 마지막
모두는 물론 명령 이름입니다. 예를 들어, foobar 사용자가 Linux 호스트에서 jimmy 또는 rene으로 kill 명령을 실행하고 다음과 같이 구성 파일을 작성하기를 원합니다.

foobarlinux=(jimmy,rene)/bin/kill
하지만 여전히 문제가 있습니다. 지미로 처형되나요 아니면 르네로 처형되나요? 이때 바로 이때 사용되는 sudo-u를 생각해야 합니다. foobar는 sudo-ujimmykillpid 또는 sudo-urenekillpid를 사용할 수 있지만 실제로는 -u를 매번 추가할 필요가 없으며 rene 또는 jimmy를 기본 대상 사용자로 설정하기만 하면 됩니다. 위에 다른 줄을 추가하세요:

defaults:foobarrunas_default=rene
기본값 뒤에 콜론이 있으면 후속 사용자에 대한 기본값입니다. 그렇지 않으면 모든 사용자에 대한 기본값입니다. 구성 파일과 함께 제공되는 라인과 같습니다:

defaultsenv_reset
또 다른 문제는 이미 로그인되어 있는 경우가 많아 sudo를 사용할 때마다 비밀번호를 입력하는 것이 번거롭다는 것입니다. 비밀번호 입력을 중단할 수 있나요? 물론 다음과 같이 구성 파일을 수정할 수 있습니다:

foobarlocalhost=nopasswd:/bin/cat,/bin/ls
sudo를 다시 사용하십시오:

코드 복사 코드는 다음과 같습니다.


[foobar@ localhost~]$sudols/rootanaconda -ks.cfgdesktopinstall.log

install.log.syslog

물론 ! 연산자를 사용하여 "일부 명령은 사용자 foobar로 실행할 수 없습니다"라고 말할 수도 있지만 그렇지 않습니다. 좋은 아이디어. ! 연산자를 사용하여 전체에서 일부 명령을 "제거"하는 것은 일반적으로 효과가 없으므로 사용자는 해당 명령을 다른 위치에 복사하고 이름을 변경한 다음 실행할 수 있습니다.
4. 로그 및 보안

sudo는 로그를 기록할 뿐만 아니라 필요한 경우 시스템 관리자에게 보고할 수도 있습니다. 그러나 sudo의 로깅 기능은 자동이 아니므로 관리자가 활성화해야 합니다. 다음과 같이 하세요:

코드 복사 코드는 다음과 같습니다:


#touch/var/log/sudo
#vi/etc/syslog.conf

syslog.conf 끝에 줄을 추가하세요 (탭으로 구분해야 함) 그리고 저장합니다:

local2.debug/var/log/sudo
로그 데몬 프로세스를 다시 시작합니다.

psauxgrepsyslogd
syslogd 프로세스에서 얻은 pid를 입력합니다(출력의 두 번째 열은 pid) 다음과 같습니다:

kill–huppid
이 방법으로 sudo는 /log/sudojul2822:52:54localhostsudo:foobar:
tty=pts/1;pwd=/home/foobar;user=root;command=/를 기록할 수 있습니다. bin/ls/root

그러나 작은 "결함"이 있으며 sudo 로깅은 그다지 충실하지 않습니다.


코드 복사 코드는 다음과 같습니다:



[foobar@localhost~]$sudocat/etc/ Shadow>/dev/null
[foobar@localhost~]$
cat/var/ log/sudo...jul2823:10:24localhostsudo:foobar:tty=pts/1;

pwd=/home/foobar;user=root ;command=/bin/cat/etc/shadow


리디렉션이 기록에 기록되지 않았습니다! 왜? 명령이 실행되기 전에 쉘이 리디렉션을 완료했기 때문에 sudo는 리디렉션을 전혀 볼 수 없습니다. 이것도 장점이 있습니다. 다음 방법은 성공하지 못합니다.

코드 복사 코드는 다음과 같습니다.


[foobar@localhost~]$sudols/root>/etc/shadowbash:/etc/shadow: 권한 부족


sudo에는 보안을 보호하는 고유한 방법이 있습니다. sudo
-v를 루트로 실행하여 sudo 설정을 확인하세요. 보안 문제로 인해 일부 환경 변수는 sudo 이후 명령에 전달되지 않거나 경로, 홈,
shell 등과 같은 확인 후 전달됩니다. 물론 sudoer를 통해 이러한 환경 변수를 구성할 수도 있습니다.

위 내용은 리눅스 시스템에서 sudo 명령을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제