Jogosultság beállítás probléma

Fórumok

Sziasztok!

A segítségeteket kérném az alábbi feladat megoldásában. Fontos lenne, hogy CentOS/Redhat alapon kellene a megoldás.

Create users lucy and lisa and make them members of the group support as a secondary group membership.
Create users bob and adam and make them members of the group marketing as a secondary group membership.
Create shared group directories /groups/sales and /groups/marketing and make sure these groups meet the following requirements:
- members of the group support have full access to their diretcory.
- members of the group marketing have full access to their directory.
- Users have persmissions to delete only their own files, but Bob is the boss, so user Bob has access to delete all user's files.

 

[root@localhost ~]# useradd lucy
[root@localhost ~]# useradd lisa
[root@localhost ~]# groupadd support
[root@localhost ~]# usermod -aG support lucy
[root@localhost ~]# usermod -aG support lisa
[root@localhost ~]# groupmems -l -g support
lucy  lisa
[root@localhost ~]# useradd bob
[root@localhost ~]# useradd adam
[root@localhost ~]# groupadd marketing
[root@localhost ~]# usermod -aG marketing bob
[root@localhost ~]# usermod -aG marketing adam
[root@localhost ~]# groupmems -g marketing -l
bob  adam
[root@localhost ~]#

(Minden usernek adtam jelszót és úgy próbálgattam velük a dolgokat lentebb. Minden userrel beléptem, touch-al hoztam létre velük üres fájlokat, amiket törölni akartam másik userrel és Bob-bal is)

# Innentől három különféle módon is próbáltam

---------------------------------------------------------------
1: SGID + sticky
---------------------------------------------------------------
[root@localhost ~]# mkdir -p /groups/support
[root@localhost ~]# mkdir /groups/marketing
[root@localhost ~]# chown .support /groups/support/
[root@localhost ~]# chown .marketing /groups/marketing/
[root@localhost ~]# chmod g+rwx /groups/support/
[root@localhost ~]# chmod g+rwx /groups/marketing/
[root@localhost ~]# chmod g+s,o+t /groups/support/
[root@localhost ~]# chmod g+s,o+t /groups/marketing/

[root@localhost ~]# ls -al /groups/
total 0
drwxr-xr-x.  4 root root       38 Jun  5 03:02 .
dr-xr-xr-x. 19 root root      271 Jun  5 03:01 ..
drwxrwsr-t.  2 root marketing   6 Jun  5 03:02 marketing
drwxrwsr-t.  2 root support     6 Jun  5 03:01 support
[root@localhost ~]#

[root@localhost ~]# setfacl -R -m u:bob:rwx /groups/
[root@localhost ~]# setfacl -m d:u:bob:rwx /groups/

[root@localhost ~]# getfacl /groups/
getfacl: Removing leading '/' from absolute path names
# file: groups/
# owner: root
# group: root
user::rwx
user:bob:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:bob:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[root@localhost ~]# getfacl /groups/support/
getfacl: Removing leading '/' from absolute path names
# file: groups/support/
# owner: root
# group: support
# flags: -st
user::rwx
user:bob:rwx
group::rwx
mask::rwx
other::r-x

[root@localhost ~]# getfacl /groups/marketing/
getfacl: Removing leading '/' from absolute path names
# file: groups/marketing/
# owner: root
# group: marketing
# flags: -st
user::rwx
user:bob:rwx
group::rwx
mask::rwx
other::r-x

[root@localhost ~]#

[bob@localhost marketing]$ ls -al
total 0
drwxrwsr-t+ 2 root marketing 56 Jun  5 03:13 .
drwxrwxr-x+ 4 root root      38 Jun  5 03:02 ..
-rw-rw-r--. 1 adam marketing  0 Jun  5 03:13 adam1
-rw-rw-r--. 1 adam marketing  0 Jun  5 03:13 adam2
-rw-rw-r--. 1 bob  marketing  0 Jun  5 03:13 bob1
-rw-rw-r--. 1 bob  marketing  0 Jun  5 03:13 bob2
[bob@localhost marketing]$ rm adam1
rm: cannot remove 'adam1': Operation not permitted
[bob@localhost marketing]$

# Bob nem tudja törölni

---------------------------------------------------------------
2: SGID nélkül, sticky nélkül, othersnek semmi
---------------------------------------------------------------

[root@localhost ~]# rm -rf /groups/
[root@localhost ~]# mkdir -p /groups/support
[root@localhost ~]# mkdir -p /groups/marketing
[root@localhost ~]# chown .support /groups/support/
[root@localhost ~]# chown .marketing /groups/marketing/
[root@localhost ~]# chmod 770 /groups/support/
[root@localhost ~]# chmod 770 /groups/marketing/
[root@localhost ~]# ls -la /groups/
total 0
drwxr-xr-x.  4 root root       38 Jun  5 03:21 .
dr-xr-xr-x. 19 root root      271 Jun  5 03:21 ..
drwxrwx---.  2 root marketing   6 Jun  5 03:21 marketing
drwxrwx---.  2 root support     6 Jun  5 03:21 support
[root@localhost ~]# setfacl -R -m u:bob:rwx /groups/
[root@localhost ~]# setfacl -m d:u:bob:rwx /groups/
[root@localhost ~]#

[lucy@localhost support]$ rm lisa1
rm: remove write-protected regular empty file 'lisa1'? y
[lucy@localhost support]$ ls -al
total 0
drwxrwx---+ 2 root support 45 Jun  5 03:24 .
drwxrwxr-x+ 4 root root    38 Jun  5 03:21 ..
-rw-rw-r--. 1 lisa lisa     0 Jun  5 03:23 lisa2
-rw-rw-r--. 1 lucy lucy     0 Jun  5 03:24 lucy1
-rw-rw-r--. 1 lucy lucy     0 Jun  5 03:24 lucy2
[lucy@localhost support]$

# Másik user is le tudta törölni

---------------------------------------------------------------
3: Csak sticky, othersnek semmi
---------------------------------------------------------------

[root@localhost ~]# rm -rf /groups/
[root@localhost ~]# mkdir -p /groups/support
[root@localhost ~]# mkdir -p /groups/marketing
[root@localhost ~]# chown .support /groups/support/
[root@localhost ~]# chown .marketing /groups/marketing/
[root@localhost ~]# chmod 770 /groups/support/
[root@localhost ~]# chmod 770 /groups/marketing/
[root@localhost ~]# chmod o+t /groups/support/
[root@localhost ~]# chmod o+t /groups/marketing/
[root@localhost ~]# setfacl -R -m u:bob:rwx /groups/
[root@localhost ~]# setfacl -m d:u:bob:rwx /groups/

[bob@localhost support]$ ls -al
total 0
drwxrwx--T+ 2 root support 58 Jun  5 03:27 .
drwxrwxr-x+ 4 root root    38 Jun  5 03:25 ..
-rw-rw-r--. 1 lisa lisa     0 Jun  5 03:27 lisa1
-rw-rw-r--. 1 lisa lisa     0 Jun  5 03:27 lisa2
-rw-rw-r--. 1 lucy lucy     0 Jun  5 03:27 lucy1
-rw-rw-r--. 1 lucy lucy     0 Jun  5 03:27 lucy2
[bob@localhost support]$ rm lisa1
rm: remove write-protected regular empty file 'lisa1'? y
rm: cannot remove 'lisa1': Operation not permitted
[bob@localhost support]$

# Bob nem tudja törölni

Szerintetek hogyan lenne megoldható a feladat? :)

Hozzászólások

szerintem nem kell acl-lel bajlódni, csak elrontja a g biteket (a group bitek az acl mask-ot jelentik onnastól hogy van rajta acl). nem egyértelmű a feladat abból a szempontból, hogy csak közvetlen a csoport kvt-ak alatti fajlokra működjön úgy ahogy, vagy rekurzívan az alkvt-akra is. ha alkönyvtárakat nem vesszük figyelembe, akkor sztem elég ha bob a 2 csoport kvt-nak a tulajdonosa, akkor tud fájlokat törölni a sticky bit ellenére is.

sudoers szabalyokkal (plusz esetleg még wrapper szkriptekkel, ahol nem lehet sudoers-ben ellenőrizni valamit) szoktam még ilyen cifraságokat megoldani.

csak annak usability hátránya van: rá kell venni a usert de inkább az általa használt programokat, hogy pl. egy fájl törlést azt nem natúran unlink-kel csináljon, hanem sudo-n keresztül. ha mondjuk véges számú cli paranccsal dolgozik, akkor lehet alias-olni, vagy a PATH-ba felvenni wrapper parancsokat, amik sudo-zva hívják a tényleges parancsot; de ha bármilyen fájlkezelőt is támogatni kell, akkor LD_PRELOAD-os trükkhöz nyúlok (noha mindenre az se jó).

akkor pl. lehetne ilyen sudoers szabály:

Runas_Alias BOBS_GROUPS = %support, %marketing
bob ALL=(BOBS_GROUPS) NOPASSWD: /usr/local/bin/wrapper/rm

ezzel bob bárki nevében tudja a wrapper parancsot futtatni, aki a fenti csoportok tagja.
és a wrapper/rm ellenőrizné hogy az általunk kitalált jogosultság rendszerben van-e joga a $SUDO_USER-nek azt csinálni amit épp kért, figyelve a race condition-re, symlinkekre, path traversal-ra, stb. nem lehetetlen csak eléggé fail prone.

meg a default acl azért se bullet proof megoldás, mert mi van ha valaki nem O_CREAT-tel létrehoz új fájlt, hanem belemozgatja az acl-ezett kvt-ba; tudtommal akkor nem alkalmazza rá a default acl-eket (centos se).

> members of the group support have full access to their directory.

Ha mondjuk én `support1` vagyok, és létrehozok egy fájlt 0600 joggal a közös könyvtárban, akkor `support2` nem tudja írni/olvasni, de esetleg (sticky bittől függően) tudja törölni. Ez így oké a feladat kitűzőjének?

Az nem volt ott esetleg, hogy a userek Sambán keresztül jönnek?