GNU/Linux >> Znalost Linux >  >> Linux

Dáváte skupinová oprávnění souborům jiných uživatelů?

Používám Debian 7 a vytvořil jsem nového uživatele (webovou stránku) s adresářem htdocs, jako je tento:

$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website

Nyní bych chtěl, aby uživatelé jiné skupiny (vývojáři) měli přístup k adresáři uživatele. Zkoušel jsem:

$ sudo chown -R :developers /home/website

Vidím, že skupina je přiřazena (pomocí ls -la nebo stat ) a že uživatelé jsou ve skupině, ale nemají přístupová práva?

drwxr-xr-x     3     website     developers     4096 May 3 09:09     website

Také chci:

  • Povolit další skupině, ‚dodavatelům‘ přístup k souborům webových stránek

  • Omezit přístup uživatelů webových stránek pouze do jejich domovských adresářů

  • Zajistěte, aby nové soubory webu zdědily tato oprávnění

Musíte používat seznamy řízení přístupu – nebo existuje lepší způsob, jak toho dosáhnout (například nepoužívat samostatného uživatele pro každý web)?

Přijatá odpověď:

Je těžké dávat přesné příkazy bez znalosti O/S nebo distribuce; a ano! ACL by fungovalo, ale existuje také standardní způsob.

Je zde adduser a useradd , jeden z nich ve vaší distribuci může automaticky vytvořit domovský adresář uživatele. Pokud ano, pak obsah /etc/skel/ adresář by byl zkopírován do domovského adresáře uživatele, nastavena oprávnění a možná by se mohly provést nějaké další vhodné akce.

Mohou existovat skupiny předdefinované pro sdílení, jako například ‚zaměstnanci‘; ale pokud chceme vytvořit vlastní skupinu pro sdílení, není na tom nic špatného. Takže vytvořte novou skupinu nebo použijte existující skupinu. Ujistěte se, že uživatelé, kteří mají být členy skupiny, byli jako takoví definováni pomocí usermod , moduser nebo vigr možná podle operačního systému. Každý aktuálně přihlášený uživatel se musí odhlásit a znovu přihlásit, aby se stal členem nové skupiny.

Vytvořte adresář společný pro všechny uživatele, například /home/share_directory/ nebo jakýkoli jiný adresář, který má pro vaši situaci největší smysl. Relevantním osvědčeným postupem je nepoužívat adresář v rámci domovský adresář libovolného uživatele. Pokud by nikdo kromě vlastníka a skupiny neměl vidět soubory v adresáři, změňte oprávnění adresáře na 0770. Pokud je čtení pro „ostatní“ v pořádku, použijte 0775. Vlastníkem adresáře by měl být téměř jistě root.

chown root:group_name /home/share_directory/

Dále změňte bit setuid.

chmod +s /home/share_directory/

Pokud by žádný uživatel neměl mít možnost upravovat soubor jiného uživatele, nastavte také pákový bit.

chmod +t /home/share_directory/

Tyto příklady nastavují setuid i sticky bity současně pomocí osmičkové notace.

chmod 5775 /home/share_directory/

nebo

chmod 5770 /home/share_directory/

U aktualizované otázky se zdá, že ACL je tím správným nástrojem. Většina distribucí Linuxu nyní obsahuje acl možnost v defaults volba. Pokud vaše distribuce neobsahuje acl možnost ve výchozím nastavení, pak je potřeba trochu práce, abyste ji mohli začít používat. Nejprve připojte souborové systémy pomocí acl možnost v /etc/fstab.

sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1

V případě potřeby znovu připojte souborový systém:sudo mount -o remount,acl / . Poté vytvořte skupinu, do které může uživatel patřit pro tento účel. Možná budete muset nainstalovat také nástroje ACL:apt-get install acl .

sudo groupadd developers
sudo usermod -a -G developers $username

(Nebo může být skupina „dodavateli“.) Aktuálně přihlášený uživatel se musí odhlásit a znovu přihlásit, aby se stal členem nové skupiny. Samozřejmě to nedělejte, pokud máte v adresáři /var/www obsah, který si chcete ponechat, ale pouze pro ilustraci nastavení pro spuštění:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public

Výše je rozdíl mezi setfacl Příkazy jsou tyto:první instance používá výchozí skupinu (vlastník skupiny adresáře), zatímco druhá specifikuje skupinu explicitně. -d přepínač nastaví výchozí masku (-m ) pro všechny nové objekty souborového systému v adresáři. Přesto musíme příkaz spustit znovu bez -d přepínačem aplikujte ACL na samotný adresář. Poté v konfiguračním souboru nahraďte odkazy na „/var/www“ za „/var/www/public“ a znovu načtěte.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Pokud bychom chtěli omezit mazání a přejmenování všem kromě uživatele, který soubor vytvořil:sudo chmod +t /var/www/public . Tímto způsobem, pokud chceme vytvořit adresáře pro frameworky, které existují mimo kořen dokumentu Apache nebo možná vytvořit adresáře zapisovatelné serverem, je to stále snadné.

Související:Debian – Jak převést 32bitový (x86) systém založený na Debianu na 64bitový?

Adresář protokolů zapisovatelných Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Adresář knihovny čitelné na Apache:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

Trocha „hraní“ v adresáři, na kterém nezáleží, by vám měla pomoci dosáhnout toho, aby to bylo vhodné pro vaši situaci.

K omezením používám dva různé přístupy:shell, rssh , byl vytvořen tak, aby poskytoval přístup SCP/SFTP, ale žádný přístup SSH; nebo pro omezení použití na domovský adresář můžete použít interní subsystém sftp, nakonfigurovaný v /etc/ssh/sshd_config .

Subsystem sftp internal-sftp

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

Vytvořte skupinu pojmenovanou například sftponly. Udělejte uživatele členem skupiny sftponly. Změňte jejich domovské adresáře na / kvůli chrootu. Adresář /home/username by měl vlastnit root. Můžete také nastavit uživatelský shell na /bin/false, abyste zabránili přístupu SSH. Většinou mám obavy z interaktivního přístupu, takže obecně volím rssh cesta. (Nemohou psát nikam kromě případů, kdy jsem definoval schopnost zápisu.)


Linux
  1. Použití sudo k delegování oprávnění v Linuxu

  2. Zpřístupnit všechny nové soubory v adresáři skupině?

  3. Získání nových souborů k dědění skupinových oprávnění v systému Linux?

  1. Linux – Problémy s oprávněními pro sdílený adresář na serveru?

  2. Jak třídit soubory podle jejich oprávnění pomocí Ls?

  3. Co způsobuje, že soubory ztrácejí oprávnění?

  1. Jak přidat uživatele do skupiny sudo v Linux VPS?

  2. Problém s oprávněními s Laravel na CentOS

  3. Jak vynutím skupinu a oprávnění pro vytvořené soubory v konkrétním adresáři?