← Back to team overview

sslug-teknik team mailing list archive

Re: suid vil ikke gøre som jeg forventer

 

Frank Damgaard skrev:

>> /usr/bin/cu er suid uucp og /dev/cua0 ejes af uucp.
>> Hvorfor er det så kun root der kan åbne devicen med cu?
>
>Jeg har en gruppe der hedder "dialout", og alle der skal anvende
>serielport er med i gruppen dialout (/etc/group) :
>
>crw-rw----   1 root     dialout    4,  64 aug 24 19:44 /dev/ttyS0

Jo. Men jeg vil vide hvorfor det andet ikke virker.

>> $ cu -l cua0 -s9600
>> cu: cua0: Permission denied
>> $ l /dev/cua0 `which cu`
>> crw-------   1 uucp     uucp       5,  64 Aug 24 17:47 /dev/cua0
>> -r-sr-sr-x   1 uucp     uucp       127924 Mar 22 08:07 /usr/bin/cu
>
>Måske der mangler "w" access til serielport ?

Så kig en gang til på fil rettighederne ovenfor.
Devicen har rw for brugeren. Og da cu er suid uucp kører
den som brugeren uucp som har både læse- og skriveret.
Hvorfor er det så ikke ligegyldigt hvem der kører cu?

>Egentlig burde du nok anvende ttyS0, det har været standarden
>i ca. 4-5 år. (pånær redhat.....)

Jeg ved det. Gammel vane. Jeg har jo brugt linux i 6 år.
Driveren siger det også:
kernel: tty_io.c: process 10717 (cu) used obsolete /dev/cua0 -
                             update software to use /dev/ttyS0

Men det gør i dette tilfælde ingen forskel om jeg bruger
cua0 eller ttyS0.

Vi udvider forsøget lidt ved at sætte w på gruppen
på begge devicer. Da cu er både suid og sgid som uucp
skulle den der kører den få "dobbelt adgang" :-)

# chmod g+rw /dev/cua0 /dev/ttyS0; l /dev/cua0 /dev/ttyS0
crw-rw----   1 uucp     uucp       5,  64 May  5  1998 /dev/cua0
crw-rw----   1 uucp     uucp       4,  64 May  5  1998 /dev/ttyS0
$ cu -l ttyS0 -s9600
cu: ttyS0: Permission denied
$ cu -l cua0 -s9600
cu: cua0: Permission denied
$ su root -c "cu -l cua0 -s9600"
Password: 
Connected.

$ cu -l ttyS0 -s9600
cu: ttyS0: Permission denied
$ su root -c "cu -l ttyS0 -s9600"
Password: 
Connected.

Det er underligt. Hvorfor virker suid/sgid ikke? Kan det være en
fejl i linux-2.2.10. Nej vel?
Hvad har jeg overset?

Jeg overvejede om det var noget med /var/lock. Men der er permissions
således:
# l -d /var/lock
drwxrwxr-x   5 root     uucp         1024 Aug 24 21:44 /var/lock

Så prøvede jeg med strace:
$ strace cu -l cua0 -s9600
execve("/usr/bin/cu", ["cu", "-l", "cua0", "-s9600"], [/* 40 vars */]) = 0
strace: exec: Operation not permitted

Hvis jeg laver strace suid root må den da kunne. Men så er det jo
ikke en almindelig bruger der kører cu.

Jeg er ved at blive desparat, så jeg prøver.

Som root:
# chmod u+s /usr/bin/strace.

Som bruger:
$ strace cu -l cua0 -s9600
open("/dev/cua0", O_RDWR|O_NONBLOCK)    = 3
access("/dev/cua0", R_OK|W_OK)          = -1 EACCES (Permission denied)

D.v.s. suid root på strace heller ikke virker. Jeg kan godt åbne
porten read/write, men har ikke read/write ret.
Som root:
# strace cu -l cua0 -s9600
open("/dev/cua0", O_RDWR|O_NONBLOCK)    = 3
access("/dev/cua0", R_OK|W_OK)          = 0

-- 
torben fjerdingstad        | linux-2.2.10-smp/GNU/gnome-1.0
tfj@xxxxxxxxxxxxxxx        |   Man skal ikke skyde bjørnen
http://www.fjerdingstad.dk |     før skindet er solgt.


Follow ups