su options - komutu başka bir kullanıcı olarak çalıştırma


75

Bir komut dosyasını bir komut dosyasından başka bir kullanıcı olarak nasıl çalıştıracağınızı merak ediyordum.

Senaryonun sahibinin kökü olarak ayarlanmış. Komutu hudson kullanıcısı olarak çalıştırmak için aşağıdaki komutun betiğin içinde çalıştırılmasını sağladım:

su -c command hudson

Bu doğru sözdizimi mi?


Diğer Google çalışanları için: Bazı kullanıcılar bu yeteneği isteyerek devre dışı bırakabilir. Kaçabilirsiniz sudo cat /etc/passwd | grep user-abc. Böyle bir şey görürseniz: user-abc:x:994:994::/home/user-abc:/bin/falseo zaman işe yaramaz. Bunun nedeni, " /bin/false" son bölümünün , bu kullanıcı için bir kabuk olmadığı anlamına gelir.
Alexander Bird

Yanıtlar:


78

Evet. İşte --help:

$ su --help
Usage: su [options] [LOGIN]

Options:
  -c, --command COMMAND         pass COMMAND to the invoked shell
  -h, --help                    display this help message and exit
  -, -l, --login                make the shell a login shell
  -m, -p,
  --preserve-environment        do not reset environment variables, and
                                keep the same shell
  -s, --shell SHELL             use SHELL instead of the default in passwd

Ve bazı testler ( hesabın sudoşifresini bilmediğim için kullandım nobody)

$ sudo su -c whoami nobody
[sudo] password for oli: 
nobody

Komutunuz argümanlar aldığında, onu alıntılamanız gerekir. Eğer yapmazsan, garip şeyler olur. İşte ben-as root - tam komuttan alıntı yapmadan / home / oli (oli) olarak bir dizin oluşturmaya çalışıyorum :

# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'

Yalnızca bayrak mkdiriçin değer olarak okunur ve kullanıcı adı olarak -ckullanmaya çalışır /home/oli/java. Alıntı yaparsak, sadece işe yarıyor:

# su -c "mkdir /home/oli/java" oli
# stat /home/oli/java
  File: ‘/home/oli/java
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 811h/2065d  Inode: 5817025     Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/     oli)   Gid: ( 1000/     oli)
Access: 2016-02-16 10:49:15.467375905 +0000
Modify: 2016-02-16 10:49:15.467375905 +0000
Change: 2016-02-16 10:49:15.467375905 +0000
 Birth: -

52

Not: "Komut dosyasının sahibinin root olarak ayarlanması" hiçbir şey yapmıyor; setuid biti ayarlasanız bile hala çalışmıyor


Aslında betiği root olarak çalıştırdığınızı varsayarsak, kullanabilirsiniz sudo. suöncelikli olarak kullanıcılar arasında geçiş yaparken sudo, diğer kullanıcılar gibi komutları yürütmek içindir. -uBayrak komutunu olarak yürütmek için hangi kullanıcı belirtmenizi sağlar:

sudo -u hudson command

1
Ben (Sudoers iyi yönetildiği yerle sistemlerde) karşı karşıya kullanmaya çalışıyor elde ettiğini Birçok kez sudosadece bu alabilirsiniz: root is not in the sudoers file. Hangi yapar su - <username> -c "command to run"tek seçenek.
RAM237

Önemsiz olmayan bir komut yürütülürken alıntı yapılmasına gerek yoktur. (Örneğin, sudo -u kilgore mv this that)
23:10
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.