Bir kabuk betiğini şifresi olmayan başka bir kullanıcı olarak çalıştırın


245

Ana ubuntu kabuğundan bir betiği şifresi olmayan farklı bir kullanıcı olarak çalıştırmak istiyorum.

Tam sudo ayrıcalıklarına sahibim, bu yüzden şunu denedim:

sudo su -c "Your command right here" -s /bin/sh otheruser

Sonra şifremi girmek zorundayım, ancak bu betiğin gerçekten o kullanıcının altında çalıştığından emin değilim.

Komut dosyasının gerçekten o kullanıcının altında çalıştığını nasıl doğrulayabilirim?

Yanıtlar:


354

Bunu ikisine de gerek olmadan suveya ile yapabilirsiniz sudo.

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

İlgili bölümler man sudo:

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.
-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

suRoot ise sadece şifre vermeden kullanıcıyı değiştirebilir. Caleb'in cevabını görün

Parola olmadan /etc/pam.d/suizin vermek için dosyayı değiştirebilirsiniz su. Bu cevaba bakınız .

Aşağıdakilerden için yetkilendirme dosyasını yapılması durumunda grubun parçası herhangi bir kullanıcı olduğunu somegroupolabilir suiçin otheruserşifre olmadan.

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

Ardından terminalden test edin

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser

4
Lütfen nasıl yapılacağını da ekler misiniz su?
rubo77

2
Bu bana bir şifre soruyor:
IanVaughan

1
@IanVaughan, Varsayılan konfigürasyonla (sudo), root olarak çalıştırmadığınız sürece bir şifre istenir. Sudo'yu "A kullanıcısının parola gerektirmeden cmd C'yi B kullanıcısı olarak çalıştırmasına izin verecek şekilde" yapılandırabilirsiniz. Yardım için bkz. Help.ubuntu.com/community/Sudoers
geirha 21:15

1
Bunu root olarak çalıştırırken bir şifre girmem isteniyor. Baska öneri?
Nate

1
@NamGVU, siparişin önemli olduğunu unutmayın. Eğer sudoerlerinizde, kullanıcı veya diğer üyeleriniz için başka izinler belirleyen bir kural varsa NOPASSWD kuralınızı geçersiz kılacaktır.
geirha

100

Suudi yerine su kullanmak istiyorsanız, bunun gibi bir şey kullanabileceğinizi düşünüyorum:

su - <username> -c "<commands>"
  • - belirtilen kullanıcının giriş bilgilerini simüle edecek
  • -c bir komut çalıştırmak istediğinizi söyler

ps. Ne yazık ki rvm kullanarak bu yöntemi kullanarak ruby ​​kuramıyorum, ancak bu muhtemelen ilişkili değil.


5
Başa eklemem sudogerekiyordu, aksi takdirde şifremi istedi.
IanVaughan

2
Bu kesinlikle olmadan işe yaramaz sudo. sudo ile çalışır, örneğin: sudo su - www-data -c "touch /tmp/test"başarılı bir şekilde www-data dosyası oluşturdu
rubo77

"Su" kullanabilmek için root şifresine ihtiyacınız vardır, "sudo" un amacı budur Kök şifreniz varsa yukarıdaki gibi "su" kullanmalısınız.
Samuel Åslund

6

Yukarıdaki cevaplar benim için gerçekten yararlı ama asıl soruya cevap vermek ...

Komut dosyasının gerçekten o kullanıcının altında çalıştığını nasıl doğrulayabilirim? -

kullanın:

ps -ef | grep <command-name>

Çıktı, komut dosyanızı ve onu yürüten gerçek kullanıcıyı içermelidir. BSD benzeri sistemlerdeki kişiler, örneğin MAC, şunlarla benzer bilgileri bulabilir:

ps aux | grep <command-name>

Linux kullanıcıları ps aux kullanabilir.
Dean Howell

@DeanHowell; Doğru, ancak MAC kullanıcıları "ps -ef" kullanamazlar ve "ps aux" BSD seçenekleridir, sadece "ps -ef" standart Unix / POSIX seçenekleriyken bir uyumluluk özelliği olarak kullanılabilir.
Samuel Åslund

2

Ben de aynı problemi yaşadım. Sadece screen -dmS testscreensudo olmayan kullanıcı hesabınızda ayrılmış bir ekran oluşturacak komutu yazın ve sonra giriş yapabilir ve bu ekranın orada olup olmadığını kontrol edebilirsiniz screen -ls.

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.