| ��� �������� �������� �� ��������� ������: English Castellano Deutsch Francais Nederlands Indonesian Russian |
����� Frédéric Raynal, Christophe Blaess, Christophe Grenier �� ������: Christophe Blaess - ����������� ������� �� �����������. �� ���������� Linux � ������ ������� ����� ����� ������ �� ���� �������. �������� ������������ ��������� man �������, ����������� Linux Documentation Project. Christophe Grenier - ������� 5 ����� � ESIEA, ��� �� ����� �������� ����������. �������� ���������� ������������ �������������. Frédéric Raynal ���������� Linux �� ����������������� �������� ���������(����������� � ��.). ����� ����, �� ������ ���������� Dancer in the Dark : ������ Bjork ������� �����������, ���� ����� �� ����� �������� ��� ����������� (� �� ���� ������� ������ �� ������� �����, ������������ ������������ � �������������). ����������: |
������:
������ ������ - ������ �� ����� ������ � �������� ����� ��� � ������������ � �����������. �� ������� �������, ��� �������� �� ������� ������� ���� �������� ������������.
�� �������� � ���� ������ ��� � ������ ����������, ������� �������� ������ ����������� ������������� Linux, ������� ���� � ������������, �����������, ��������, ���������� ������������ ����� root. �������� �� �������� �������� ����������� �� ���� ����������, ���������� ������������ ��������� ���� �������: ��� �� ������ ��������� ������� ����� ��������� ������������ ���������� ���������. ����������� ��������� ���� ���������� - ���� �������, ������ ��������� ��������������, ������ �������� ������� ��������� ���������� ����� ����. ����� ����, ����������� �������� �������� ���������� ��������� ������� � ����, �������� ��, �� ������ ����� ������ ���������.
��� ��������� ������������ ������ ������� � ������ �������, �����������
��������� ������������, � ����������� ���������� �������, ���������� � ���� �������.
������������ ����� ���� �������� �������� �������� ������� ������������,
��� ��� ��������� ��� � ������������ � ������ - ������ ������ ����������� ��.
�� ���������� ���������� ��������� "������������" ������� ��������� �������� �
����� ������, ��� ��������� ����. �� �� ����� �������� � ��������� �������
������������, ��� ��� ��� ����� ��������� ��-�� ������ � ������������ (������������
������� cgi-bin, ...) ��� ��-�� ������ � �������, ����������� ��������� �����
DOS-����(Denial Of Service - ����� � ������������), ����� ������ ���������
������� �� ����� ��������. ��� �������� - ������ ���������� � ������������� ����.
������ � ����������� ���������� ������ �������� ���, ��� ������ ��������� ��������
������ � ������� ������ ������������. ��������� ������ pine,
acroread, netscape, access,... �����
����������� ������ � ���������� ��� ���������� ������ ���������� ��� ���������
��������.
�� ��������, ������������ ���������������� - ������ �������.
������ ���� ������ ���������� ������, ������� ����� ���� ������������ ��� ����������� Unix �������. �� ����� �� ������ ��������� � ��� ��� ������� ���� ����, ������ �� ������������ ������ �����������, ����� ���� ����� �������� ����. ����� �������, ��� ������� ��������� ��� ��� ���������� �����, �� ������� ������ ��� ��������� ��� ������. ��� ������������ ������ ����, �� ����� �������������� ������ �������. ����� �������� � ��������� ������� �� ������. �����, �� ������� ��� �������� ��. ��� ������� ������� �� ����� ������������ ���� � ������������ �� ��� ��� �������������� � ������ ���������������� ���������� �����������.
� ������ - ������ - ������ �������������� �� �������, ������ ��� ��������
��� � ������������: ���������� � ������������ � ������ Set-UID �
Set-GID.
����� �� ����������� ���� ���������� �� ������� system(), ��� ���
��� ������ ��� ���������.
�� ����� ����� ������������ ��������� ��������� �� ��, ����� �������� ��, � ���
�� �������. ������ �������, �������� � ������ �������, ��������� � � ������ ������
����������������: perl, java, ������� shell... ��������� ���� � ������������ �������
�� �����, ������ ��� �� ������ ���, ��� �� � ������ ��� ������������ system().
� Unix ������� ������������ �� �������� �������������, �� �� ����� � ��� ����������.
������ � ����� �������� ������� - � �������������� ������� ����������� ������ -
������� �� �������� �������� �� ������������. ��������� ������������� ���������
����������� ������ �������������� �������� ��� ����������� ������� � ���������� ���������.
�����, ��������� UID (User Identifier - ������������� ������������) ���������
����������� �������������. ����� ��������� �������, ��� ������������ ������������� �����
�����. ��� ����� ����������� � ����� /etc/passwd.
UID ������ 0 � ������ �� ��������� root, ����� ������ ������ � �������.
�� ����� ���������, ��������, ������� ����� ��������� ����, �� ����� �����
�������� ���������� ������������ ������, ����������� �������, ��������������
������� ���������� � ������ �� ������������ (IP �����) ��� ������ ��������� ������
����� ��� mlock() ��� ���������� ���������� ������� ��� sched_setscheduler()
��� ��������� ��������� �����������.
� ����� �� ��������� ������ �� ������ � ������������ Posix.1e, ������� ��������� ������������
���������� ����������, ������������ ��� root, �� ������ ����� ������������, ���
����������������� ������������ ����� ������ ��� ��� ������ �� ������.
�����, � ������� �� ����� ��������, ���� ����� ����������, �� ���� ������������������ ������������ �� ������ �������� �������� ����������, ������� � ���� ���. � ������ �������, ������� ����� - ���� ����� �������, �� ���������� ���� ���������� ������������ � ������, ������ � ������� ��� ��� ��������.
����� ������������ ������������ ������� ������������, �� ���� ����������� ����� � ������� ��� ���, ����� ��� ������� ����� ����������� ����������������� � �����������, ���������� � UID ������. ����� ���������� - ������� - �������� ��� Linux, ��� ����� ������ ������������ ����������������. ��-������ ��������� ����� �������, ���������� RUID (Real UID - �������� UID), ������� ������������� ID ������������, ������������ ���. ���� ��������� ��������� ���� � ������ �� �� ����� ���� �������. ������ ������� ��������� ����������: ���� EUID (Effective UID - ����������� UID) - ��� ��������� �� �������� ���� ��� ���������� ������� ������� (�������� ������, ����������������� ��������� ������).
�������� ���������� ������� ������������ - ������ ����������� ��� �������� ��� ��� UID, � �� ��� ��������� UID. �����������, �������� �������� �������� ID root-�, ������ ������ ������ ������� ������ ����� ������������ �������, ��� ������ ��� ��� ���� ������ � ��������� ���������� (news, mail, lp...) ��� ������ ��� ��������� ������ ������ ���������� (�����, ������ ����� � �.�.) ��� �� ��� ����� ������������� ��� ������� ����������� ������������, ��������, ���� �� ������ �����.
����� ��������� ���������� � ������������, ��� ����������� UID ������� ��
��������� (UID ������������, ������� �������� ���), ����������� ���� ������ �����
������������� ����������� ���, ���������� Set-UID.
���� ��� ���������� � �������� ���� ������� ����� (����� ��� � ���� ����������, ������,
������ ��� ������������, ������ ������ � ��������� �������������) � ����� ������������
�������� 4000. ��� Set-UID ����������� ������ s ��� ����������� ���� �
������� ������� ls:
������� ">> ls -l /bin/su -rwsr-xr-x 1 root root 14124 Aug 18 1999 /bin/su >>
find / -type f -perm +4000" ���������� ������ ��������� ����������,
��� Set-UID � ������� ���������� � 1.
����� ���� ��������� ��������� � ������������ ����� Set-UID, ��� ����������
UID ��������� ��������� � �������� EUID ��������.
� ������ �������, RUID �� ���������� � ������������� ������������, ������������
���������.
��������, ����� ������������ ����� ����� ������ � ��������� /bin/su,
�� ��� ����������� � ������� ��������� (root) � ������� ������������ � �������.
������� ��������, ��� ���� ���� ���������� ��� ��������� ��������� � ���� ���������.
������ ������� ����� ����� ����������� ID ������, EGID, � �������� �������������
RGID.
��� Set-GID (������������ 2000) � ������ ������� ������������ �����, �������
����, ��� ���� ������������ ������ ��������� ����� ��� EGID, � ��
GID ������������, ������������ ���������.
���������� ���������� ��������� ������ ��� Set-GID ������������� � 1, �� ���
���� ���������� ��� ������.
���������� ��� ����������, �� ������� ������ ������ � ������������, ������������ �
�����������, ������ �����������, ��� ���� ����� ���� ������������ ��������
fcntl(fd, F_SETLK, lock).
������ ���������� �� ���������� ��� Set-GID, ������ ��������� � �����.
��������, ��������� ���� ���������� ��� ��� ���������� ������ ����������� � ���������
�������.
���� ��������� ���� ���� �� �������. ������� �� ������ ��������� ������� ������� ������ �� ����������. ������ ��� ��������� ��������� ��������� ��� ������� ��������� ����������. ������ ��� ���� ������� �� ������������ ������, ��� ���� ���������� ����������� ���������� ����� ���������� ����. ���������, ������ �������� ��� ����� ������� �� �������� ��������� (race condition) - ���������� ������� ����� ����� ������������, � ������� �������� ���������� ��������� ��������� (������ ����) � �� ����� ��� ���������� �������, ��� �� ������� ��� ��.
������ ��� ���� ���� ������ �������� ��������� ��������� ��������� �
������������ ��������� ����������, � �� ����� ��� ������ ��� �������
�� ��������� ���� ������ �� ���������� ��������� �����.
������ �� ������ ������ �������� ����������� ������ ������ ������� (������ �����, ������,
���� ������� /etc/shadow, ���������������������� ����� ���� � /proc).
����� ���� � �������� �������� ��������� � ������������ ����� Set-UID (���
Set-GID). ������ ����� ����� ����� ����������� �� ����� ���������� ��������� ���
ID �������� �� ID ������������. ������� ����� ����� �������� ������������
��������� ������. ����� - ����������, ������ ����������� ��� ��������, �������������
� ���� ��� ������������ ���������, ������� ������ ����������������� ������
��� ������ ������������. �������� ����� lpd ��������� ������
������������ �������� �������� �� �������, sendmail - ��������� �
�������������� ����������� �����, ��� apmd - ����������� � Bios ������
������� ������������ ����������.
��������� ������ ��������� ������ � �������� �������������� �� ���� (Ftp, Http, Telnet...
�������). ������, ���������� inetd, ��������� ������������ ������ ��
���� ��������.
�� ����� ������� �����, ��� ��������� ����� ���� ���������, ��� ������ ��� ��������������� - ���� ����� ����� - � ������������� �������� �� ������������ ���. ��� ���������� ���������� ������ ����, �� ������ ���� ��������� � ������� � �����, ������� ���������� ��� ������������� ������� � ������� �� ����� ����� ��������.
����� ���������� ����������� � EUID �������� �� ��� RUID, ��� ������������� ������������ ����������, ������� ��� �����, �� ������� � ���� ��� (������ � �����, ����������������� ��������� �����...). ������ ������ ���������� ����� ������ �� ����� �������� �����, �������� ��� �������� �����, � ��������� ����� ���������� ����� ����������� � ������������ ������ ������������. �������� ��������� ��������� EUID ���������� ��� ������ ���������� ������:
int seteuid (uid_t uid);������� ������ ����� �������� �������� ������ EUID � ��������� ��� �������� RUID. � ���� ������ ������ UID �������� � ��������� �����, ���������� SUID (Saved UID - ����������� UID), �� ������ � SID (Session ID - ID ������), ������� ������������ ��� �������������� � ����������� ����������. ������ �������� ������� ����� SUID � �������� EUID. �����������, ��������� � ������� EUID (root) ����� ������ �� ������� ��� ���� EUID ��� � RUID (����� ������� ��������
/bin/su).
����� ��������� ���� ����, ���������� ������ EUID � ������������ ������ ���� RUID ������������. ����� ����� ���� ��������� ���������� ��������� �����, �������� ��������� ����������� UID � EUID. ��� ������:
uid_t e_uid_initial;
uid_t r_uid;
int
main (int argc, char * argv [])
{
/* ��������� ��������� UID-� */
e_uid_initial = geteuid ();
r_uid = getuid ();
/* ������������ ����� ������� �� ���� ������������,
* ������������ ��������� */
seteuid (r_uid);
...
privileged_function ();
...
}
void
privileged_function (void)
{
/* ���������� ����� ��������� ���������� */
seteuid (e_uid_initial);
...
/* ����� ����, ������� ����� ���������� */
...
/* ����� � ������ ������������, ������������ ��������� */
seteuid (r_uid);
}
������ ����� ������� ���������� ��� � ��������� ������������, ��������� � ������������� ���������� EUID, � ����� � ���������� ���������� ���������� ����� "�����������" ����������. ������, ������ ���������� ���������� ���������� ��� ������ �� ������������ ������. ��� �� ������ � ��������� ������, ��� ����� �������� ��������� ���������� ��������� ���� ����������, ������� ����� ��������� ��������� ������, ������ ��� ��������� ������ ����������. � ���-���� ������ ������ �������� �� ������ ������� ������ � ����������� �������� ���������.
���������� ����� ����� ������� �����-���� ������� ��������� ������. ������
��������� ������ ��������� � ������� mail, ��������������� ��� ����������
����������� ������ (����� � ����������, ��������� ������, ���������� � �.�.) ���
���������� ����� ������� ������ � �������� ��������.
���������� ������� - ������������ ������������ ������� :
int system (const char * command)
������ ������� ����� ������: ��� �������� �������� ��� ���������� �������,
���������� �� ��� ��������. ��������� �������� ������� �� ������� ������������.
�������� ������ ��������� ��� ������������ ���������� ��������� PATH.
��������� �� ���������� ���������� ������� mail. ��������, ���������
��������� �������� ���� �������� ��� ������������, ������� �� ��������:
/* system1.c */
#include <stdio.h>
#include <stdlib.h>
int
main (void)
{
if (system ("mail $USER < system1.c") != 0)
perror ("system");
return (0);
}
�����������, ��� ��������� Set-UID root :
����� ��������� ��� ���������, ������� ��������� �������� (>> cc system1.c -o system1 >> su Password: [root] chown root.root system1 [root] chmod +s system1 [root] exit >> ls -l system1 -rwsrwsr-x 1 root root 11831 Oct 16 17:25 system1 >>
/bin/sh) � ������ -c, ����� �������� �� ����������
��� �������. �����, �������� �������� ����� �������� ��������� � ������������
� ���������� ��������� PATH, ����� ����� ����������� ����, �������
���������� mail.
����� ����������������� ���������, ������������ ���������� ��������
�������� ���� ���������� ����� �������� ����������. ��������:
���� �������>> export PATH=. >> ./system1
mail ������ � ������� ��������.
���������� ������� ����������� ���� (�������� ������, ����������� ��������� ���������)
� ������� ��� mail, � ��������� ����� ����� �������� � EUID-�� ���������
��������� ����������!
����� ��� ������ ��������� /bin/sh. ������, ��� ��� �� ���������� � ����������������
����������� ������ (��� ��������� ������� mail), �� ������ ������� ���
�� ��������. ������� ������:
��� ���������:#! /bin/sh # "mail" script running a shell # getting its standard input back. /bin/sh < /dev/tty
>> export PATH="." >> ./system1 bash# /usr/bin/whoami root bash#
�������, ������ ������� ������� � �������� ������� ���� � ���������, ��������
/bin/mail. ����� ��������� ����� ��������: �������������� ����������
������� �� ��������� �������. ���� /bin/mail ������ ���� ��
����� �������, �� �������� ��� ��������� GhostScript? (����� �� � /usr/bin,
/usr/share/bin, /usr/local/bin?).
� ������ �������, ��� ���� ��� ����� �������� ��� ������������� ���������
������ ��������: ������������� ���������� ��������� IFS.
�������� ���������� �� ��� ������� ���� � ��������� ������. ��� ���������� ��������
�����������. �� ��������� ��� ������, ��������� � ������� �������.
���� ������������ ������� ���� ���� /, ������� "/bin/mail"
����� ������ ��������� ��� "bin mail".
����������� ����, ������� ���������� bin, � ������� ��������
����� ���� �������� ����� ���� ���������� ���������� PATH, ��� ��
������ �����, ��� �������� ��������� ��� ��������� � EUID ����������.
��� Linux ���������� ��������� IFS - ��� �� ��������,
� ��� ��� ��� bash � pdksh ������� �� ��������� ������� �� ��������� ��� �������.
�� ����� � ������������� ����������, �� ������ �����, ��� ��������� �������
����� ���� ����� ����������� ������������ ���� ����������.
��������� ������ ���������� ��������� ����� ������� ���������� ��������.
��������, ���������� mail ��������� ������������ ��������� �������
��� ��������� ��������� ��������� ����������� ������������������ "~!".
���� ������������ ����� "~!command" � ������ ������,
������� �����������. ��������� /usr/bin/suidperl, ������������
��� ������� �������� perl � ����� Set-UID, �������� /bin/mail, �����
��������� ��������� root-� ��� ����������� ��������. ��� ���
/usr/bin/suidperl Set-UID root, ����� /bin/mail
���������� � ������������ root � �������� ��� �����, ������� ������ ������.
����� ������������ ����� ������� ����, ��� �������� �������� ������� ������� � �����������
~!command � ��� ����� ���������.
���� perl ������ ���������� suidperl �������� ��������� ������
��-�� �������������� ��������, ����������� � ����� �����, ���������� ���������
�� root, ������� �������� ����������� ������������������ ���������� mail,
� ������� �� ����� ����� ����������� � ������� root.
���� �������� �� ����������, ��� ��� ��������� mail �� ���������
������ ����������� ������������������� ��� �������������� ���������� (�� � ���������).
� ���������, ������������������� ����������� ������� ���������� (��������
���������� �� �������) ��������� ����������� ������������������, ���� �����������
���������� ��������� interactive. ���������? ����� � ������������
����� ����� ��������������� (� ������ ������������) � ����������, ������� ������
�������� ������������ �������.
��������������� �� ��� ���������. ������, /bin/mail ��������
������������������� ����� �������� �������, �.�. ��� ��������� ����������
����, �������� ������ ���������� ������, ��� ������ ���� �������
�������������� ��� �������� �������. ������, ���� ���� ������������
/usr/bin/suidperl �� ����� � ���������� interactive,
��� �� ������ ���� ��� ������ ������� ������� ��������� ��������� ����������
����� ��, ����� ��� � ����, �������� ����� ��� ��������� Set-UID root.
���������� Linux ���������� ���� Set-UID � Set-GID ��� ���������� ��������
(��. /usr/src/linux/fs/binfmt_script.c � /usr/src/linux/fs/exec.c).
�� ������� ���������� ����� ������ ��� �������, ��� ������ Perl �� ������ ���������
��������� /usr/bin/suidperl, ����� ������� � �������� ��� ����.
�� ������ ����� ����� ������ ������� system().
������ ������� - ������������ ��������� ������ ����� ��� execl()
��� execle().
������ ��� ����� ������ �� ��, ��� ��� ������� ��������� ����� ����������
�� ��� ������������, � ����� �������� ������� �������. ��� �������� ������� ����� �������
��� ������ fork � ���������������� ��������� ��������� ������.
����� ������� ���������:
if (system ("/bin/lpr -Plisting stats.txt") != 0) {
perror ("Printing");
return (-1);
}
������������:
pid_t pid;
int status;
if ((pid = fork()) < 0) {
perror("fork");
return (-1);
}
if (pid == 0) {
/* �������� ������� */
execl ("/bin/lpr", "lpr", "-Plisting", "stats.txt", NULL);
perror ("execl");
exit (-1);
}
/* ������������ ������� */
waitpid (pid, & status, 0);
if ((! WIFEXITED (status)) || (WEXITSTATUS (status) != 0)) {
perror ("Printing");
return (-1);
}
��������, ��� ���� �������! � ��������� ��������� ��
����������� �������� �������, ��������, ����� ��� ���� ������������� ����������� ����
����������, ��� ��������:
system ("mail root < stat.txt");
�� ���� ��������������� ������������ <
�������� ���������. �� ������ ������ �� �� ��������� ������� ������������������
����� ��� fork(), open(), dup2(),
execl() � �.�.
� ����� ������, ���������� �������� ����� ������������� ������� system(),
�� � ��������������� ������������� ����� ���������.
��� Linux ���������� ��������� �������� � ����� ��������� �� ������� ��������:
char ** environ. ��� ������� ������������� NULL.
������ �������� � ����� "���=��������".
�� �������� �������� ��������� ��� ������ Gnu ����������:
��� ���������� ���������int clearenv (void);
�������� NULL. ����� ���������������� ������ ���������� ���������, ��������� �������������� ��������, ��� ������ �������:extern char ** environ;
int setenv (const char * name, const char * value, int remove)
int putenv(const char *string)
����� ������� ������� system(). ��������:
clearenv ();
setenv ("PATH", "/bin:/usr/bin:/usr/local/bin", 1);
setenv ("IFS", " \t\n", 1);
system ("mail root < /tmp/msg.txt");
���� ����������, �� ������ ��������� ���������� ���������
�������� ���������� ����� ��������� ���������
(HOME, LANG,
TERM, TZ � �.�.). ����������, ����� �������������, ������
���� ���������� ������ ���� ������ ���������. ��� �����, ��� �� �������� ��� ���������
����� ���������������� ������ ����������. ���� � suidperl �� ��������� ��,
���� ������� ������� ���� �� ������� ���������.
�� ��������, ������ ������ � ����, ��-������, ������������ ������ ������� �����������. �����, �������� ������������ ����������� ��� �������� �������. ��� �� �������, ��� ���������������� Set-UID ���������� ��������� ������ ���� �������, � ����� ��������� ������� �����������.
�������� ������� ��������� ���������� ��� ������ ��������� ���������� �������� � ������������ ���������. ���� ��������� �������, �������� �����������. ����� �� �����������. ���� �� ���������� ����, ��������� ������ ������������ �������� �������, ���������� ���� �������� ������������� ��������, ��� ����� �������� � ����� �������.
�� ������ ��������, �� ������� � ���������� PATH, ��� ��������� �������������
system() ����������� ��� ������������� ��������� ����������� ������� ����� ���
popen() ��� ��������� �������, ��������, execlp() ��� execvp().
��� ��������� ������������ ��������, ������ �������� ������������ �����������
��������������� ��������� ������������ �����������, ��������, ��������� �������.
��� ���������� ����������� � ������ ���������, ��� ��� ��� ������ ��������,
������������� ������ ������� wordexp(). �� ������ ���� �����������
��������� ��, ��� ��� �������� ������ ���� $(command)
�������� ��������� ��������� ������� �������. �������� ������ "$(/bin/sh)"
������� Set-UID ��������. ����� �������� �����, wordexp() �����
������� WRDE_NOCMD, ������� ��������� ������������� ������������������
$( ).
��� ������� ������� ������, ��� ���� ���� ���������� � �� �������� �������,
������� ������������� �������� ������ � �������� (��� ������������������
:!command � vi).
������ ����������� �� ���, ��������� ���������� �������� � ���� ������(���������
���������, ����-���������...), ������ ������� ���������� (��� �� ������ � /bin/mail)
��� ����� ������� ������ �������.
��� ������ �������� ��������� �������:
� ��������� ������ �� ��������� � ������, �� ����������� � ������� ������� ����� ���, ��� ��������� �� ������������ ������. ����� �� ������, ��� �������� �������.
|
|
Webpages maintained by the LinuxFocus Editor team
© Frédéric Raynal, Christophe Blaess, Christophe Grenier, FDL LinuxFocus.org Click here to report a fault or send a comment to LinuxFocus |
Translation information:
|
2001-08-20, generated by lfparser version 2.17