Bug 7742 - /bin/sh сбрасывает привилегии, что мешает работать setgid программам, порождающим потомков
Summary: /bin/sh сбрасывает привилегии, что мешает работать setgid программам, порожда...
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: bash (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-08-24 14:33 MSD by Илья Казначеев
Modified: 2005-10-15 17:06 MSD (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Илья Казначеев 2005-08-24 14:33:07 MSD
Из man system: 
== 
       Do  not  use  system()  from  a  program  with suid or sgid privileges, 
       because strange values for some environment variables might be used  to 
       subvert system integrity.  Use the exec(3) family of functions instead, 
       but not execlp(3) or execvp(3).  system() will not, in fact, work prop- 
       erly  from  programs  with  suid or sgid privileges on systems on which 
       /bin/sh is bash version 2, since bash 2 drops  privileges  on  startup. 
       (Debian  uses  a  modified  bash which does not do this when invoked as 
       sh.) 
== 
Из за этой милой шалости авторов bash не работает, например, игра crawl 
[dungeoncrawl.org]. Она setgidная, свои сейвы кладет в общий /var/games/crawl. 
Однако, она вызывает внешний /usr/bin/zip для их запаковки, который в процессе 
system() теряет setgid и, соответственно, всякую возможность к записи 
получившегося сейва в /var/games/crawl. 
 
Я полагаю, что надо сделать, как в Debian. 

Actual Results:
Comment 1 Anton Gorlov 2005-08-24 14:35:45 MSD
А как оно в дебиане сделано?
Comment 2 Dmitry V. Levin 2005-08-24 15:05:15 MSD
I disagree.
If you need to keep effective [ug]id, consider using -p option.
Comment 3 Илья Казначеев 2005-08-24 15:14:33 MSD
Я не знаю, как оно точно сделано в дебиане, но (Debian  uses  a  modified  bash 
which does not do this when invoked as sh.) 
 
То есть, они это дело запатчили. 
 
>If you need to keep effective [ug]id, consider using -p option. 
If you need to think, consider using brains. 
 
If you use system(), you can't pass -p to /bin/sh because you don't have 
handler. 
And you can't use exec*() because of system() because you need to have patterns 
globbed, for example, and basically you just want to invoke string as a whole 
without half-assely tokenizing it yourself. 
 
Короче - мне пофиг, я всех уведомил, но пакет crawl, с учетом этого, собрать 
не-воз-мож-но. А в debian он давно есть, и все довольны. 
 
P.S. Уж не говоря, что bash _ДОЛЖЕН_ подразумевать --posix, когда запускается, 
как /bin/sh. 
Comment 4 Илья Казначеев 2005-08-24 15:17:04 MSD
s/because of/instead of/ 
s/handler/handler to do so/ 
Comment 5 Dmitry V. Levin 2005-08-24 16:37:31 MSD
Во первых, если вы рассчитываете на конструктивный результат (а иначе зачем
использовать bugzilla), то вам следует формулировать свою точку зрения более
корректно.

Во вторых, подход, который был избран в Debian, я уже рассматривал ранее и
отверг как снижающий безопасность применения bash в этих условиях и таким
образом просто неприемлемый.

Самое главное, и это написано в system(3), использовать system(3) в
привилегированном приложении небезопасно.  Если некий пакет в Debian позволяет
себе подобную вольность, следует поставить в известность мантейнера этого
пакета. и автора потенциально уязвимой программы

И наконец, /bin/sh это отнюдь не bash --posix, поэтому ничего он не должен.

P.S. Эту bugzilla иногда использут разработчики, не владеющие русским языком.
В случае, когда сообщение об ошибке или комментарий потенциально может привлечь
их внимание, следует использовать язык общения разработчиков разных стран
(английский).
Comment 6 Илья Казначеев 2005-08-24 16:51:15 MSD
Debian still has package named "crawl", that is, definitely, set-gid game that 
uses system() to spawn tar process for savefiles compression. 
 
It have security fixes done for it, so I assume it is monitored properly, and 
set-gid system() does not bugs them. But you may try to report that bug and 
I'll see what they'll tell you. 
 
/bin/sh should conform to POSIX, otherwise it's such a sucky /bin/sh. 
 
Foreign developers should take note of "Аффтар, учи албанский!" 
Comment 7 Denis Ovsienko 2005-08-26 17:20:27 MSD
Why doesn't crawl make use of zlib/bzlib?
Comment 8 Илья Казначеев 2005-08-26 23:52:05 MSD
I think that's because noone taught it to do so.

And anyway, it have got a lot of files to compress, not a single one. So you'll
propose to build tar into game binary?

It simply used unix-way - evoke process to do work for it. In this case this did
not work. Life sucks and then you die, you know it.