>  기사  >  운영 및 유지보수  >  Linux sudo 명령에 대한 지식 포인트는 무엇입니까?

Linux sudo 명령에 대한 지식 포인트는 무엇입니까?

WBOY
WBOY앞으로
2023-05-31 11:31:301033검색

"Sudo"는 Unix/Linux 플랫폼에서 매우 유용한 도구입니다. 이를 통해 시스템 관리자는 일반 사용자에게 합리적인 "권한"을 할당하여 슈퍼유저나 다른 권한 있는 사용자만 완료할 수 있는 다음과 같은 일부 작업을 수행할 수 있습니다. mount, quit, 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

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 prompt] [-u username#uid] {-e file [...] -i -s command}
 
 

   下面我们再来看一下sudo其它常用的一些参数:
   
选项     含义     作用
   
sudo -h     Help     列出使用方法,退出。
   
sudo -V     Version     显示版本信息,并退出。
   
sudo -l     List     列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
   
sudo -u username#uid     User     以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是#uid。
   
sudo -k     Kill     清除“入场卷”上的时间,下次再使用sudo时要再输入密码。
   
sudo -K     Sure kill     与-k类似,但是它还要撕毁“入场卷”,也就是删除时间戳文件。
   
sudo -b command     Background     在后台执行指定的命令。
   
sudo -p prompt command     Prompt     可以更改询问密码的提示语,其中%u会代换为使用者帐号名称,%h会显示主机名称。非常人性化的设计。
   
 sudo -e file     Edit     不是执行命令,而是修改文件,相当于命令sudoedit。

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

3. sudo 구성

sudo 구성은 /etc/sudoers 파일을 편집하여 이루어져야 하며, 슈퍼유저만 수정할 수 있으며, visudo를 사용하여 편집해야 합니다. visudo를 사용하는 이유는 두 가지입니다. 하나는 두 명의 사용자가 동시에 수정하는 것을 방지할 수 있다는 것이고, 다른 하나는 제한된 구문 검사도 수행할 수 있다는 것입니다. 따라서 귀하가 유일한 슈퍼유저이더라도 visudo를 사용하여 구문을 확인하는 것이 좋습니다.

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

>>> sudoers file: syntax error, line 22 <<

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

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

# Runas alias specification
   
# User privilege specificationroot    ALL=(ALL)ALL

루트에는 모든 권한이 있음을 알 수 있습니다. 아래 줄을 추가합니다. 마지막으로 탭을 공백으로 사용하는 것이 쉽습니다):

foobar ALL=(ALL)    ALL

저장하고 종료한 후 foobar 사용자로 전환합니다. 해당 ID를 사용하여 명령을 실행합니다:

[foobar@localhost ~]$ ls /root
   
ls: /root: 权限不够
   
[foobar@localhost ~]$ sudo ls /root
   
PassWord:
   
anaconda-ks.cfg Desktop install.log install.log.syslog

좋아요, foobar의 권한을 제한하고 그가 원하는 것은 무엇이든 못하게 합시다. . 예를 들어, 그가 루트처럼 ls 및 ifconfig를 사용하도록 하려면 해당 줄을 다음으로 변경합니다:

foobar localhost=    /sbin/ifconfig,   /bin/ls

그런 다음 명령을 실행합니다:

[foobar@localhost ~]$ sudo head -5 /etc/shadow
   
Password:
   
Sorry, user foobar is not allowed to execute &#39;/usr/bin/head -5 /etc/shadow&#39; as root on localhost.localdomain.
   
[foobar@localhost ~]$ sudo /sbin/ifconfigeth0      Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B...

现在让我们来看一下那三个ALL到底是什么意思。第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明
foobar可以在此主机上执行后面的命令。第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个
ALL当然就是指命令名了。例如,我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令,这样编写配置文件:

foobar    linux=(jimmy,rene)    /bin/kill

但这还有个问题,foobar到底以jimmy还是rene的身份执行?这时我们应该想到了sudo -u了,它正是用在这种时候。 foobar可以使用sudo -u jimmy kill PID或者sudo -u rene kill PID,但这样挺麻烦,其实我们可以不必每次加-u,把rene或jimmy设为默认的目标用户即可。再在上面加一行:

Defaults:foobar runas_default=rene

Defaults后面如果有冒号,是对后面用户的默认,如果没有,则是对所有用户的默认。就像配置文件中自带的一行:

Defaults    env_reset

另一个问题是,很多时候,我们本来就登录了,每次使用sudo还要输入密码就显得烦琐了。我们可不可以不再输入密码呢?当然可以,我们这样修改配置文件:

foobar localhost=NOPASSWD:     /bin/cat, /bin/ls

再来sudo一下:

[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log
   
install.log.syslog

当然,你也可以说“某些命令用户foobar不可以运行”,通过使用!操作符,但这不是一个好主意。因为,用!操作符来从ALL中“剔出”一些命令一般是没什么效果的,一个用户完全可以把那个命令拷贝到别的地方,换一个名字后再来运行。

四. 日志与安全

sudo为安全考虑得很周到,不仅可以记录日志,还能在有必要时向系统管理员报告。但是,sudo的日志功能不是自动的,必须由管理员开启。这样来做:

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

在syslog.conf最后面加一行(必须用tab分割开)并保存:

local2.debug                    /var/log/sudo

重启日志守候进程,

ps aux grep syslogd

把得到的syslogd进程的PID(输出的第二列是PID)填入下面:

kill –HUP PID

这样,sudo就可以写日志了:

[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg
   
Desktop install.log
   
install.log.syslog
   
$cat /var/log/sudoJul 28 22:52:54 localhost sudo:   foobar :
   
TTY=pts/1 ; PWD=/home/foobar ; USER=root ; COMMAND=/bin/ls /root

不过,有一个小小的“缺陷”,sudo记录日志并不是很忠实:

[foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null
   
[foobar@localhost ~]$
   
cat /var/log/sudo...Jul 28 23:10:24 localhost sudo:   foobar : TTY=pts/1 ;
   
PWD=/home/foobar ; USER=root ; COMMAND=/bin/cat /etc/shadow

重定向没有被记录在案!为什么?因为在命令运行之前,shell把重定向的工作做完了,sudo根本就没看到重定向。这也有个好处,下面的手段不会得逞:

[foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 权限不够

sudo 有自己的方式来保护安全。以root的身份执行sudo
-V,查看一下sudo的设置。因为考虑到安全问题,一部分环境变量并没有传递给sudo后面的命令,或者被检查后再传递的,比如:PATH,HOME,
SHELL等。当然,你也可以通过sudoers来配置这些环境变量。

위 내용은 Linux sudo 명령에 대한 지식 포인트는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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