��� �������� �������� �� ��������� ������: 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
. ��������, ���������
��������� �������� ���� �������� ��� ������������, ������� �� ��������:
�����������, ��� ��������� Set-UID root :/* system1.c */ #include <stdio.h> #include <stdlib.h> int main (void) { if (system ("mail $USER < system1.c") != 0) perror ("system"); return (0); }
����� ��������� ��� ���������, ������� ��������� �������� (>> 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