V tomto tutoriálu se naučíme, co je příkaz su (přepnutí uživatele) v Unixu/Linuxu a rozdíl mezi příkazy su a su -. Linux je jádro operačního systému pro více uživatelů, což znamená, že k systému Linux se může přihlásit více uživatelů současně.
Mezi různými uživateli můžete přepínat na samotném příkazovém řádku pomocí příkazu su. Příkaz su znamená 'náhradní uživatel' nebo může přepínat mezi uživateli. Tento příkaz změní pověření uživatele na pověření zadaného uživatele nebo root (ve výchozím nastavení).
Co dělá příkaz su
Příkaz su, jak je uvedeno výše, změní přihlašovací údaje uživatele na jiné uživatele. Podívejme se na příklad
[raghu@redhat-server ~]$ su jack
Password:
[jack@redhat-server raghu]$ id
uid=501(jack) gid=501(jack) groups=501(jack),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh
Příkaz id vypíše informace o aktuálním uživateli. Ve výše uvedeném výstupu můžete vidět změněného uživatele. Pokud příkazu su nejsou zadány žádné argumenty, ve výchozím nastavení se změní na uživatele root. Manuálové stránky Ubuntu vysvětlily více informací.
[jack@redhat-server raghu]$ su
Password:
[root@redhat-server raghu]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh
Simulace přihlášení pomocí su -
Pomocí příkazu su --login nebo su -l nebo jen 'su -' můžete přepnout uživatele, jako by to bylo přihlášení z terminálu.
[raghu@redhat-server ~]$ su - jack
Password:
[jack@redhat-server ~]$ id
uid=501(jack) gid=501(jack) groups=501(jack),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh
Rozdíl mezi su a su-
Rozdíl mezi 'su' a 'su -' je v tom, že některé proměnné prostředí, jako je proměnná PATH, nemění hodnoty pouze pomocí su (tj. pokud je vynechána volba -l nebo -). Některé příkazy se nemusí spustit, pokud není správně nastavena PATH. Zvažte například následující scénář:
[jack@redhat-server ~]$ su root
Password:
[root@redhat-server jack]# fdisk -l
bash: fdisk: command not found
[root@redhat-server jack]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/jack/bin
Můžete vidět, že adresáře sbin nejsou zahrnuty v PATH uživatele root. Nespustí tedy příkaz fdisk. Nyní se pokusíme přihlásit pomocí příkazu su:
[jack@redhat-server ~]$ su -
Password:
[root@redhat-server ~]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1044 8281507+ 8e Linux LVM
[root@redhat-server ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
Dalším rozdílem mezi těmito dvěma příkazy jsou přihlašovací skripty. Nejprve si proberme některé přihlašovací skripty:
Když se uživatel přihlásí do systému, jsou spuštěny následující 4 soubory, pokud jsou přihlašovací údaje uživatele legitimní:
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
Když se přihlásíte pomocí příkazu 'su -', všechny tyto skripty se provedou. Ale pomocí su se spouštějí pouze skripty bashrc, tj. skripty /etc/bashrc a ~./bashrc.
V ubuntu můžete obdržet selhání ověřování, když spustíte příkaz su. Tato chyba se zobrazí, protože v ubuntu je root účet ve výchozím nastavení zakázán.
user@host:~$ su
Password:
su: Authentication failure
Místo su použijte sudo -i
nebo sudo
následovaný vaším příkazem.
Závěr
V tomto tutoriálu jsme se naučili rozdíl mezi příkazy „su“ a „su -“ v Linuxu. Více informací je k dispozici v man su. Doufám, že se vám čtení líbilo a níže prosím zanechte své návrhy.
Přečtěte si také:
- 38 základních linuxových příkazů s příklady
- Jak přidat uživatele do Sudoers na Debianu