Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Was sind die Wissenspunkte zum Linux-Sudo-Befehl?

Was sind die Wissenspunkte zum Linux-Sudo-Befehl?

WBOY
WBOYnach vorne
2023-05-31 11:31:30984Durchsuche

„Sudo“ ist ein sehr nützliches Tool auf der Unix/Linux-Plattform. Es ermöglicht dem Systemadministrator, normalen Benutzern einige angemessene „Rechte“ zuzuweisen, sodass sie einige Aufgaben ausführen können, die nur Superuser oder andere privilegierte Benutzer ausführen können Abschließen von Aufgaben, wie zum Beispiel: Ausführen einiger Befehle wie mount, halt, su usw. oder Bearbeiten einiger Systemkonfigurationsdateien, wie /etc/mtab, /etc/samba/smb.conf usw. Auf diese Weise wird nicht nur die Anzahl der Root-Benutzeranmeldungen und die Verwaltungszeit reduziert, sondern auch die Systemsicherheit verbessert.

1. Merkmale von sudo

Die Rolle, die sudo spielt, ist dazu bestimmt, in Bezug auf die Sicherheit äußerst vorsichtig zu sein, sonst führt es zu illegalem Verhalten Benutzer erfassen Root-Berechtigung. Gleichzeitig muss auch die Benutzerfreundlichkeit berücksichtigt werden, damit Systemadministratoren es effizienter und komfortabler nutzen können. Das Ziel der Sudo-Designer bestand darin, den Benutzern so wenige Berechtigungen wie möglich zu geben und ihnen dennoch die Möglichkeit zu geben, ihre Arbeit abzuschließen. Daher hat sudo
die folgenden Eigenschaften:

  # 1. sudo kann bestimmte Benutzer daran hindern, bestimmte Befehle auf bestimmten Hosts auszuführen.
# 2. sudo kann Protokolle bereitstellen, zuverlässig aufzeichnen, was jeder Benutzer mit sudo getan hat, und die Protokolle an den zentralen Host oder Protokollserver übertragen.
# 3. sudo stellt Konfigurationsdateien für Systemadministratoren bereit, sodass Systemadministratoren Benutzerberechtigungen und Hosts zentral verwalten können. Der Standardspeicherort ist /etc/sudoers.
# 4.sudo verwendet Zeitstempeldateien, um ein System ähnlich der „Ticketprüfung“ zu vervollständigen. Wenn der Benutzer sudo ausführt und das Passwort eingibt, erhält der Benutzer ein „Ticket“ mit einer Standardüberlebenszeit von 5 Minuten (der Standardwert kann während der Kompilierung geändert werden). Nach dem Timeout muss der Benutzer das Passwort erneut eingeben.

2. Sudo-Befehl

Das Sudo-Programm selbst ist eine Binärdatei mit gesetztem SUID-Bit. Wir können seine Berechtigungen überprüfen:

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

Sudo-Konfigurationen werden in der Datei /etc/sudoers aufgezeichnet, was wir weiter unten im Detail erklären werden. Konfigurationsdateien legen fest, welche Benutzer welche Befehle ausführen können. Um sudo verwenden zu können, muss der Benutzer einen bestimmten Benutzernamen und ein bestimmtes Passwort angeben. Hinweis: Für sudo ist nicht das Passwort des Zielbenutzers erforderlich, sondern das Passwort des Benutzers, der sudo ausführt. Wenn ein Benutzer, der nicht in sudoers ist, einen Befehl über sudo ausführt, meldet sudo dieses Ereignis dem Administrator. Benutzer können mit sudo -v prüfen, ob sie zu den Sudoern gehören. Wenn ja, kann es auch die Zeit auf Ihrem „Ticket“ aktualisieren; andernfalls werden Sie zwar dazu aufgefordert, der Administrator jedoch nicht benachrichtigt.

Das Sudo-Befehlsformat ist wie folgt:

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。

Es gibt auch einige weniger häufig verwendete Parameter, die in der Manpage sudo(8) zu finden sind.

3. Die Konfiguration von sudo

Die Konfiguration von sudo muss durch Bearbeiten der Datei /etc/sudoers erfolgen, und nur Superuser können sie ändern. und muss zum Bearbeiten visudo verwenden. Es gibt zwei Gründe, warum visudo verwendet wird. Zum einen kann es verhindern, dass zwei Benutzer es gleichzeitig ändern. Zum anderen kann es auch eine eingeschränkte Syntaxprüfung durchführen. Selbst wenn Sie der einzige Superuser sind, sollten Sie also besser visudo verwenden, um die Syntax zu überprüfen.

Visudo öffnet standardmäßig die Konfigurationsdatei in vi und verwendet vi, um die Datei zu ändern. Wir können dieses Standardelement zur Kompilierungszeit ändern. visudo speichert Konfigurationsdateien mit Syntaxfehlern nicht ohne Autorisierung. Es zeigt Ihnen die Probleme an und fragt Sie, wie Sie damit umgehen sollen, einfach so:

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

Zu diesem Zeitpunkt haben wir drei Möglichkeiten: Geben Sie „e“ ein " Zum erneuten Bearbeiten geben Sie „x“ ein, um den Vorgang ohne Speichern zu beenden, und „Q“, um den Vorgang zu beenden und zu speichern. Wenn Q ausgewählt ist, wird sudo nicht erneut ausgeführt, bis der Fehler behoben ist.

Werfen wir nun einen Blick auf die mysteriöse Konfigurationsdatei und lernen, wie man sie schreibt. Beginnen wir mit einem einfachen Beispiel: Lassen Sie den Benutzer Foobar alle ausführbaren Root-Befehle über sudo ausführen. Öffnen Sie die Konfigurationsdatei mit visudo als Root. Sie sehen einige Zeilen ähnlich der folgenden:

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

Wir können es auf einen Blick verstehen. Folgen Sie einfach dem vorhandenen Root-Beispiel Fügen Sie unten eine Zeile hinzu (am besten verwenden Sie die Tabulatortaste als Leerzeichen):

foobar ALL=(ALL)    ALL

Nach dem Speichern und Beenden wechseln Sie zum Foobar-Benutzer. Wir verwenden seine Identität, um den Befehl auszuführen:

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

Okay, lasst uns die Rechte von Foobar einschränken und ihn daran hindern, zu tun, was er will. Wir möchten zum Beispiel nur, dass er ls und ifconfig wie root verwendet, ändern Sie diese Zeile in:

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

und führen Sie dann den Befehl aus:

[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来配置这些环境变量。

Das obige ist der detaillierte Inhalt vonWas sind die Wissenspunkte zum Linux-Sudo-Befehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen