Bug 7742 - /bin/sh сбрасывает привилегии, что мешает работать setgid программам, порождающим потомков
: /bin/sh сбрасывает привилегии, что мешает работать setgid программам, порожда...
Status: CLOSED NOTABUG
: Sisyphus
(All bugs in Sisyphus/bash)
: unstable
: all Linux
: P3 major
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2005-08-24 14:33 by
Modified: 2005-10-15 17:06 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2005-08-24 14:33:07
Из 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 From 2005-08-24 14:35:45 -------
А как оно в дебиане сделано?
------- Comment #2 From 2005-08-24 15:05:15 -------
I disagree.
If you need to keep effective [ug]id, consider using -p option.
------- Comment #3 From 2005-08-24 15:14:33 -------
Я не знаю, как оно точно сделано в дебиане, но (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 From 2005-08-24 15:17:04 -------
s/because of/instead of/ 
s/handler/handler to do so/ 
------- Comment #5 From 2005-08-24 16:37:31 -------
Во первых, если вы рассчитываете на конструктивный результат (а иначе зачем
использовать bugzilla), то вам следует формулировать свою точку зрения более
корректно.

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

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

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

P.S. Эту bugzilla иногда использут разработчики, не владеющие русским языком.
В случае, когда сообщение об ошибке или комментарий потенциально может привлечь
их внимание, следует использовать язык общения разработчиков разных стран
(английский).
------- Comment #6 From 2005-08-24 16:51:15 -------
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 From 2005-08-26 17:20:27 -------
Why doesn't crawl make use of zlib/bzlib?
------- Comment #8 From 2005-08-26 23:52:05 -------
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.