# [RISOLTO] login via SSH e limiti con PAM

## lavish

Salve a tutti!

Sto settando un server con gentoo hardened. 

Ho riscontrato un problema per quanto riguarda il setting dei limiti con pam: facendo il login via ssh come utente, i limiti per il mio gruppo sono corretti. Se mi loggo come root via su -, i limiti rimangono gli stessi identici. La cosa grave, e' che i processi avviati da root in queste condizioni, sono sottoposti agli stessi limiti che ho settato per il gruppo users.

Un esempio vale piu' di mille parole:

/etc/security/limits.conf

```
*               hard    rss             50000

@users          soft    core            15000

@users          hard    core            20000

@users          soft    data            15000

@users          hard    data            20000

@users          soft    nofile          30

@users          hard    nofile          50

@users          soft    rss             50000

@users          hard    rss             10000

@users          hard    stack           10000

@users          soft    nproc           40

@users          hard    nproc           50

@users          hard    priority        5
```

/etc/ssh/sshd_config

```
Port 4022

Protocol 2

LoginGraceTime 1m

PermitRootLogin no

MaxAuthTries 3

PasswordAuthentication no

UsePAM yes

Subsystem       sftp    /usr/lib/misc/sftp-server
```

emerge --info

```
Portage 2.1.2.7 (hardened/x86/2.6, gcc-3.4.6, glibc-2.5-r3, 2.6.20-hardened-r5 i686)

=================================================================

System uname: 2.6.20-hardened-r5 i686 Pentium III (Coppermine)

Gentoo Base System release 1.12.9

Timestamp of tree: Thu, 28 Jun 2007 14:59:01 +0000

dev-lang/python:     2.4.4-r4

dev-python/pycrypto: 2.0.1-r5

sys-apps/sandbox:    1.2.17

sys-devel/autoconf:  2.60

sys-devel/automake:  1.9.6-r2, 1.10

sys-devel/binutils:  2.17

sys-devel/gcc-config: 1.3.16

sys-devel/libtool:   1.5.22

virtual/os-headers:  2.6.17-r2

ACCEPT_KEYWORDS="x86"

AUTOCLEAN="yes"

CBUILD="i686-pc-linux-gnu"

CFLAGS="-march=i686 -O2 -pipe -fforce-addr"

CHOST="i686-pc-linux-gnu"

CONFIG_PROTECT="/etc"

CONFIG_PROTECT_MASK="/etc/env.d /etc/gconf /etc/php/apache2-php5/ext-active/ /etc/php/cgi-php5/ext-active/ /etc/php/cli-php5/ext-active/ /etc/revdep-rebuild /etc/terminfo"

CXXFLAGS="-march=i686 -O2 -pipe -fforce-addr"

DISTDIR="/usr/portage/distfiles"

FEATURES="distlocks metadata-transfer sandbox sfperms strict"

GENTOO_MIRRORS="http://distfiles.gentoo.org http://distro.ibiblio.org/pub/linux/distributions/gentoo"

PKGDIR="/usr/portage/packages"

PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --filter=H_**/files/digest-*"

PORTAGE_TMPDIR="/var/tmp"

PORTDIR="/usr/portage"

SYNC="rsync://rsync.gentoo.org/gentoo-portage"

USE="acl apache2 berkdb crypt hardened nls nptl pam pic readline ssl tcpd urandom x86 xorg zlib" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol" ELIBC="glibc" INPUT_DEVICES="mouse keyboard" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" USERLAND="GNU"

Unset:  CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, LDFLAGS, LINGUAS, MAKEOPTS, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, PORTDIR_OVERLAY
```

esempio:

```
0 $ ssh -p 4022 www.minimalblue.com

Password: 

Last login: Sat Jun 30 13:23:39 2007 from www.routerlogin.com on pts/4

Welcome to MinimalBlue.com

You are allowed to create your own website under $HOME/webroot/htdocs. It will

be available at http://<your_user>.minimalblue.com/.

Remember that you have a quota of 10MB for your home directory and 100MB for

your website ($HOME/webroot/htdocs + $HOME/webroot/cgi-bin).

To use perl cgi scripts, put them into $HOME/webroot/cgi-bin/ and don't forget

to make them executables. They will be available at

http://<your_user>.minimalblue.com/cgi-bin/.

Enjoy ;)

lavish@nebula ~ $ groups 

wheel users portage

lavish@nebula ~ $ ulimit -a

core file size          (blocks, -c) 15000

data seg size           (kbytes, -d) 15000

file size               (blocks, -f) unlimited

pending signals                 (-i) 2031

max locked memory       (kbytes, -l) 32

max memory size         (kbytes, -m) 10000

open files                      (-n) 30

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 40

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

lavish@nebula ~ $ su -

Password: 

nebula ~ # groups 

root bin daemon sys adm disk wheel floppy dialout tape video

nebula ~ # ulimit -a

core file size          (blocks, -c) 15000

data seg size           (kbytes, -d) 15000

file size               (blocks, -f) unlimited

pending signals                 (-i) 2031

max locked memory       (kbytes, -l) 32

max memory size         (kbytes, -m) 10000

open files                      (-n) 30

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 40

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited
```

se invece faccio l'autenticazione DIRETTA da console:

```
nebula ~ # ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

file size               (blocks, -f) unlimited

pending signals                 (-i) 2031

max locked memory       (kbytes, -l) 32

max memory size         (kbytes, -m) 50000

open files                      (-n) 1024

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 2031

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited
```

e cio' sembra corretto...

Qualcuno mi puo' spiegare perche' tutto cio'?

Grazie ragazzi!  :Smile: 

----------

## cloc3

come è configurato /etc/pam.d/su ?

----------

## lavish

come di default:

```
#%PAM-1.0

auth       sufficient   pam_rootok.so

# If you want to restrict users begin allowed to su even more,

# create /etc/security/suauth.allow (or to that matter) that is only

# writable by root, and add users that are allowed to su to that

# file, one per line.

#auth       required     pam_listfile.so item=ruser sense=allow onerr=fail file=/etc/security/suauth.allow

# Uncomment this to allow users in the wheel group to su without

# entering a passwd.

#auth       sufficient   pam_wheel.so use_uid trust

# Alternatively to above, you can implement a list of users that do

# not need to supply a passwd with a list.

#auth       sufficient   pam_listfile.so item=ruser sense=allow onerr=fail file=/etc/security/suauth.nopass

# Comment this to allow any user, even those not in the 'wheel'

# group to su

auth       required     pam_wheel.so use_uid

auth       include              system-auth

account    include              system-auth

password   include              system-auth

session    include              system-auth

session    required     pam_env.so

session    optional             pam_xauth.so

```

----------

## cloc3

 *lavish wrote:*   

> 
> 
> Qualcuno mi puo' spiegare perche' tutto cio'?
> 
> 

 

io no   :Laughing:  .

ma avanzo delle ipotesi   :Rolling Eyes:  .

il processo su eredita i limiti dei propri predecessori (account utente, appunto) e li passa ai processi figli.

tu sei comunque root. forse puoi sistemare in .bashrc uno script che riaggiusti le cose.

----------

## Flameeyes

Okay, per chi fosse interessato, dopo un po' di debug ho trovato la causa di questo 'problema'.

pam_limits, per bug o design, non resetta gli rlimits del sistema quando si apre una nuova shell.. passa su limits.conf e applica le regole che trova.

Visto che l'utente ha già soft e hard limits, e pam_limits non trova altro, li lascia come sta. Questo è tremendamente odioso a mio avviso, ma dovrei provare a contattare gli autori per sapere se è voluto o meno.

La soluzione è porre, per ogni regola che impone un soft/hard limit, una regola precedente valida per * per azzerare il valore al default (0 o unlimited).

pam_limits vedrà quelle regole prima, e setterà il valore.

----------

## lavish

@Flameeyes: smack!

 :Mr. Green: 

Posto anche /etc/security/limits.conf a questo punto, se puo' essere d'esempio per altri:

```
*               soft    core            0

@users          soft    core            0

*               hard    core            unlimited

@users          hard    core            10000

*               soft    data            unlimited

@users          soft    data            15000

*               hard    data            unlimited

@users          hard    data            20000

*               soft    nofile          1024

@users          soft    nofile          30

*               hard    nofile          2056

@users          hard    nofile          50

*               soft    rss             50000

@users          soft    rss             5000

*               hard    rss             50000

@users          hard    rss             10000

*               soft    nproc           1024

@users          soft    nproc           40

*               hard    nproc           2056

@users          hard    nproc           50

@users          hard    maxlogins       5

*               soft    priority        unlimited

@users          soft    priority        5

*               hard    priority        unlimited

@users          hard    priority        5

```

----------

## djinnZ

 *Flameeyes wrote:*   

> Questo è tremendamente odioso a mio avviso, ma dovrei provare a contattare gli autori per sapere se è voluto o meno.

 

Mi pare che sia l'ennesima legacy per compatibilità da qualche parte c'era una specie di spiegazione se la trovo la posto ma a quel che mi ricordo serviva per evitare di ritrovarsi i limiti di weel o root impostati sui demoni avviati come sottoprocessi con su (non con sudo).

----------

## lavish

Nel file che avevo precedentemente postato ci sono alcuni valori errati (unlimited su nice per esempio).

Per completezza riposto il file dei limiti corretto  :Wink: 

```
*               soft    core            0

*               hard    core            unlimited

@users          soft    core            0

@users          hard    core            10000

*               soft    data            50000

*               hard    data            100000

@users          soft    data            15000

@users          hard    data            20000

*               soft    fsize           100000

*               hard    fsize           unlimited

@users          soft    fsize           40000

@users          hard    fsize           50000

lavish          -       fsize           unlimited

*               soft    nofile          1024

*               hard    nofile          2056

@users          soft    nofile          30

@users          hard    nofile          40

*               soft    rss             50000

*               hard    rss             unlimited

@users          soft    rss             5000

@users          hard    rss             10000

*               soft    nproc           100

@users          soft    nproc           40

*               hard    nproc           200

@users          hard    nproc           50

*               -       maxlogins       10

@users          -       maxlogins       3

lavish          -       maxlogins       5

*               soft    priority        0

@users          -       priority        5

```

----------

