Jak skonfigurować ulimit dla użytkownika
Moderatorzy: Moderatorzy, Administratorzy
Jak skonfigurować ulimit dla użytkownika
Mam pytanie do Szanownych Grupowiczów
Temat już się przez grupę przewijał, ale chciałbym sobie tę kwestię uściślić.
W jaki sposób można ustalić parametry ulimit dla użytkownika, który się loguje na konsolę poprzez np. ssh ? Potrafię ustalić te parametry dla użytkownika root, podając w /etc/profile odpowiednie ulimity. Myślałem, że podane tam parametry działają globalnie dla wszystkich użytkowników w systemie. Niestety chyba tak nie jest.
W Slackwarze konwencja z /etc/security/limits.conf chyba nie funkcjonuje i jest to jakoś inaczej rozwiązane.
Czy moglibyście mi pomóc w określeniu miejsca, gdzie można zdefiniować ulimity dla użytkownia shellowego w Slackware 12.
Bardzo dziękuję za pomoc
Pozdrawiam
Witek
Temat już się przez grupę przewijał, ale chciałbym sobie tę kwestię uściślić.
W jaki sposób można ustalić parametry ulimit dla użytkownika, który się loguje na konsolę poprzez np. ssh ? Potrafię ustalić te parametry dla użytkownika root, podając w /etc/profile odpowiednie ulimity. Myślałem, że podane tam parametry działają globalnie dla wszystkich użytkowników w systemie. Niestety chyba tak nie jest.
W Slackwarze konwencja z /etc/security/limits.conf chyba nie funkcjonuje i jest to jakoś inaczej rozwiązane.
Czy moglibyście mi pomóc w określeniu miejsca, gdzie można zdefiniować ulimity dla użytkownia shellowego w Slackware 12.
Bardzo dziękuję za pomoc
Pozdrawiam
Witek
Ostatnio zmieniony 2007-11-22, 10:46 przez vitos, łącznie zmieniany 2 razy.
Re: Jak skonfigurować ulimit dla użytkownika
Tutaj masz dobry art o tym. Ja z niego korzystałem i wszystko śmigało jak należy
Ostatnio zmieniony 2007-11-22, 10:46 przez oSA, łącznie zmieniany 1 raz.
Wszystko na temat dostępu do internetu przez sieci komórkowe (HSDPA, EDGE, GPRS) oraz WiFi, WiMax, CDMA [url=http://www.bez-kabli.pl/]Bez-kabli.pl[/url]
Re: Jak skonfigurować ulimit dla użytkownika
Na końcu /etc/profile
Kod: Zaznacz cały
if [ -n "$SSH_CONNECTION" ] ; then
case "$(id -u)" in
1000) ...
[...]
fi
[url=http://bdtk.sourceforge.net][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] #337142
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
Re: Jak skonfigurować ulimit dla użytkownika
Trochę nie rozumiem tego przykładu??? Mógłbyś objaśnić, bardzo proszę. Ponadto kiedy w /etc/profile wpisałem ulimit -n 8192, to dla root'a taki ulimit się ustawia, natomiast po zalogowaniu się innego użytkownika na konsoli chociażby, czy poprzez ssh, system podaje komunikatdifrost pisze:Na końcu /etc/profile
Kod: Zaznacz cały
if [ -n "$SSH_CONNECTION" ] ; then case "$(id -u)" in 1000) ... [...] fi
Kod: Zaznacz cały
-bash: ulimit: open files: cannot modify limit: Operation not permitted".
Witek
Re: Jak skonfigurować ulimit dla użytkownika
Przeczytaj ten art co Ci podałem. Tam masz wszystko opisane...
Wszystko na temat dostępu do internetu przez sieci komórkowe (HSDPA, EDGE, GPRS) oraz WiFi, WiMax, CDMA [url=http://www.bez-kabli.pl/]Bez-kabli.pl[/url]
Re: Jak skonfigurować ulimit dla użytkownika
Ja skorzystałem z informacji zawartych tutaj na forum i stworzyłem sobie plik
/etc/profile.d/zlimits.h
z zawartością
i do grupy o id 206 wrzucam wszystkich użytkowników, dla których chcę ustawić max 10 procesów.
/etc/profile.d/zlimits.h
z zawartością
Kod: Zaznacz cały
#!/bin/sh
zmien=`echo $GROUPS`
if [ "$zmien" == "206" ]
then
echo -n "Liczba procesów 10"
ulimit -u 10
else
echo -n "Bez ograniczen"
fi
echo ""
Registered Linux User #375982
Re: Jak skonfigurować ulimit dla użytkownika
Naprawdę artykuł jest bardzo dobry.oSA pisze:Przeczytaj ten art co Ci podałem. Tam masz wszystko opisane...
W artykule jest opisany między innymi przypadek jak zmniejszać startowe limity dla użytkowników systemowych będących na przykład zwykłymi użytkownikami z grupy users. Działa to wyśmienicie, gdyż shell uruchamiany przez użytkownika najpierw przelatuje przez /etc/profile a potem wykonuje ~/.bash_profile, jeśli podany oczywiście może być czytany przez użytkownika i stosuje podane obostrzenia jeśli są. Natomiast każdy użytkownik oprócz użytkownika root nie może sobie podnosić limitów, może tylko zaakceptować takie jakie otrzymał od administratora.
Moje pytanie jest następujące, którego rozwiązanie nie jest podane w artykule.
Jak zwiększyć bazowe początkowe limity użytkowników należących do users, żeby od początku limit np. ulimit -n nie wynosił dla nich 1024 tylko dajmy na to 8192 ?
Ja mam z tym jeden bardzo upierdliwy przypadek. Mianowicie na sambie 3.0.27a jest między innymi jeden zasób, który trzyma pliki dbf z windowsowego programu, który po uruchomieniu otwiera sobie na początek około 400 plików (jest to program GIS). Czterech użytkowników otworzy sobie po jednej sesji tego programu i już nam się robi 1600 plików. Niestety nie wiem czemu czasem jeden z potomnych procesów smbd uruchamia się jako user samba (takiego sobie założyłem żeby robił jako guest) i wtedy zaczynają się problemy. Logi procesu smbd dla usera, który akurat otworzył jeden z programów puchną i zapełniają dysk z logami. Jest w nich napisane tak:
Kod: Zaznacz cały
0) smdb/notify_inotify.c:inotify_handler(234) No data on inotidy df?!
Nasuwa mi się przypuszczenie, że albo ustawić większe ulimit -n dla użytkownika samba, albo nakazać sambie, żeby uruchamiała procesy potomne tylko jako root.
Niestety nie wiem jak to zrobić
Bardzo proszę o pomoc.
Witek
PS. smb.conf
Kod: Zaznacz cały
[global]
server string = Intranet Linux Server
workgroup = WORK
interfaces = 192.168.0.3/24, 127.0.0.1
bind interfaces only = yes
smb ports = 445 139
map to guest = Bad Password
guest account = samba
auth methods = guest, sam
passdb backend = tdbsam:/etc/samba/private/passdb.tdb
dos charset = 852
unix charset = ISO8859-2
display charset = ISO-8859-2
log file = /var/log/samba/samba.%m
log level = 0 passdb:1 auth:1 winbind:0
syslog = 0
max log size = 200
lock directory = /var/run/samba/lock
pid directory = /var/run/samba
name resolve order = lmhosts hosts wins bcast
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_SNDBUF=8192 SO_RCVBUF=8192
os level = 65
lm announce = no
preferred master = yes
domain master = yes
wins support = yes
ldap ssl = no
create mask = 0770
directory mask = 0770
force create mode = 0770
force directory mode = 0770
hosts allow = 127., 192.168.0.0/255.255.255.0
# zasób z plikami baz dbf programu otwierającego je w ogromnej ilości
[program]
volume = Program
comment = Oprogramowanie gis
path = /mnt/hd1/gis
force user = samba
force group = users
browseable = yes
case sensitive = no
valid users = user1, user2
write list = user1, user2
[ Dodano: 2007-11-25, 17:08 ]
Udało mi się znaleźć odpowiedź i rozwiązanie problemu związanego ze zwiększeniem ilości bazowej filedescriptorów w systemie.
Cała kwestia wiąże się z modyfikacją pliku ./include/linux/fs.h w źródłach kernela i jego rekompilacja (u mnie 2.6.20)
Edytujemy następującą definicję:
W pliku ./include/linux/fs.h definicję INR_OPEN, czyli wyjściowa ilość fd dla użytkownika - standardowo jest 1024, ja ustawiłem ją na 8192 oraz NR_FILE, którą ustawiłem z kolei na 32768.
Początek pliku ./include/linux/fs.h :
Kod: Zaznacz cały
/*
* This file has definitions for some important file table
* structures etc.
*/
#include <linux/limits.h>
#include <linux/ioctl.h>
/*
* It's silly to have NR_OPEN bigger than NR_FILE, but you can change
* the file limit at runtime and only root can increase the per-process
* nr_file rlimit, so it's safe to set up a ridiculously high absolute
* upper limit on files-per-process.
*
* Some programs (notably those using select()) may have to be
* recompiled to take full advantage of the new limits..
*/
/* Fixed constants first: */
#undef NR_OPEN
#define NR_OPEN (1024*1024) /* Absolute upper limit on fd num */
#define INR_OPEN 8192 /* Initial setting for nfile rlimits */
.
.
.
#ifdef CONFIG_DNOTIFY
extern int dir_notify_enable;
#endif
#define NR_FILE 32768 /* this can well be larger on a larger system */
Warto zwrócić uwagę jeszcze na jedną rzecz. Mianowice w pliku ./include/linux/limits.h także istnieje definicja NR_OPEN, której zmiana powoduje dodanie ilości fd ustalonej tutaj oraz w ./include/linux/fs.h. Osobiście nie zmieniam zawartości pliku limits.h, jedynie poza ustaleniem ilości otwartych plików dla procesu z 256 na 1024.
Co do problemów z sambą opisanymi w poprzednim poście, to kwestie dotyczyły następujących spraw. W zdefiniowanym zasobie, na którym klienci otwierali mnóstwo plików ustawiłem opcję "force user = jakis_uzytkownik_z_grupy_users", która powodowała, że proces potomny demona smbd forkował się nie jako root, tylko jako "jakis_uzytkownik_z_grupy_users", który posiadał już ulimit -n tylko 1024. No i wtedy zaczynały się problemy. Trzeba było zabijać felerny proces smbd, który wysypywał gigantycznych rozmiarów log oraz "żarł" 100% cpu.
Reasumując problem z sambą. Albo nie należy używać parametru "force user" w smb.conf, albo wystarczająco podnieść startowy ulimit -n.
Mam nadzieję, że komuś moje spostrzeżenia się przydają.
Dodatkowo artykuł , na którym się wsparłem.
Pozdrawiam
Witek
Ostatnio zmieniony 2007-11-25, 17:11 przez vitos, łącznie zmieniany 5 razy.