"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를 사용하여 구문을 확인하는 것이 좋습니다.
>>> 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 '/usr/bin/head -5 /etc/shadow' 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!