maaf, Anda harus memiliki tty untuk menjalankan sudo

13

Saya sudah menanyakan pertanyaan ini di Stack Overflow , tetapi saya telah diminta untuk mempostingnya di sini. Jadi melakukan hal yang sama.

Saya menjalankan perintah ini menggunakan program java saya

sudo -u <username> -S pwd

Saya mendapat hasil ini-

command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo

Saya mencoba mengedit / etc / sudoers tetapi sudah berisi

<username>       ALL=(ALL)       NOPASSWD: ALL

Kemudian, saya mengetahui bahwa ini dapat dilakukan dengan mengomentari kode berikut di / etc / sudoers

# Defaults requiretty

Juga, secara default, ketika mencoba untuk mengeksekusi perintah sebagai pengguna lain menggunakan sudo, kita harus memberikan kata sandi kita sendiri. Tapi ini bisa diubah dengan membuat perubahan berikut di / etc / sudoers-

Defaults targetpw

Pertanyaan saya adalah, apakah mungkin untuk menjalankan perintah saya di atas di java tanpa membuat perubahan di mana pun yaitu dengan memiliki pengaturan default ?

Selalu Belajar
sumber
1
Apakah ini sebabnya kamu meminta Alternatif untuk membuat sudo ?
slhck
6
Tampaknya khusus distro jika requirettydiaktifkan secara default. Menurut dokumentasisudo sendiri , ini "dinonaktifkan secara default."
mpy

Jawaban:

3

Saya tidak tahu bagaimana menjalankan perintah shell di Java tetapi lihat opsi -t untuk perintah ssh

-t force pseudo-tty allocation.

Itulah yang saya lakukan ketika saya perlu menjalankan perintah sebagai root over ssh (login root langsung dinonaktifkan dan tty diperlukan oleh sudo)

Tanya dan Belajar
sumber
1
Meskipun pendekatan ini dapat memecahkan masalah pada pandangan pertama, tidak jelas sama sekali bagaimana hal itu terkait dengan pertanyaan. Bisakah Anda jelaskan lebih terinci?
pabouk
1
+1 untuk menyelesaikan masalah tanpa perlu mengubah pengaturan default apa pun.
Luke
1

Pertanyaan saya adalah, apakah mungkin untuk menjalankan perintah saya di atas di java tanpa membuat perubahan di mana pun yaitu dengan memiliki pengaturan default?

sudo -u -S pwd

Jawaban singkatnya adalah tidak, Anda perlu mengubah pengaturan untuk membuat sudo melakukan sesuatu yang berbeda dari yang saat ini dilakukan.

sudo mungkin alat yang salah untuk ini. Aturan Sudo ada untuk membantu administrator sistem mengkonfigurasi cara untuk mendapatkan hak istimewa yang lebih tinggi yang sulit disalahgunakan untuk mendapatkan hak istimewa tambahan / yang tidak diinginkan.

Jika Anda mempertimbangkan apa yang sudo lakukan untuk Anda:

  1. meminta kata sandi untuk memverifikasi identitas
  2. tingkatkan hak istimewa
  3. kemudian secara opsional mendapatkan hak istimewa sebagai pengguna lain
  4. log sudo digunakan untuk mendapatkan akses atau menjalankan perintah

Jika Anda ingin java Anda menjalankan perintah sewenang-wenang sebagai pengguna sewenang-wenang tanpa memberikan kata sandi untuk pengguna tersebut atau Anda sendiri, Anda pada dasarnya mengganti sudo. Dalam hal ini Anda harus membuat aturan sendiri tentang cara mencegah penyalahgunaan.

Pada dasarnya ada dua cara untuk melakukan ini:

  1. jalankan java Anda dengan privilege yang ditinggikan dan hati-hati ambil dan berikan kembali privilege yang Anda butuhkan (lihat panggilan fungsi setuid () seteuid () C).
  2. jalankan program eksternal untuk meraih hak istimewa yang ditinggikan saat Anda menginginkannya

Dalam kasus # 1 program java Anda melakukan sendiri apa yang dilakukan sudo, dan Anda harus menerapkan seperangkat aturan Anda sendiri untuk melindungi dari penyalahgunaan.

Ada program selain sudo untuk melakukan # 2. Salah satu contoh dapat ditemukan di https://code.google.com/archive/p/exec-wrapper/downloads

Skrip shell yang mudah digunakan ini membuat program C untuk menjalankan perintah lain (biasanya skrip). Kemudian Anda mengkompilasi program C ke biner dan menandai bahwa setuid root atau benar-benar itu bisa setuid ke pengguna mana pun. (mode: 4555 dan pemilik: root)

Selama Anda berada di sistem file yang memungkinkan, menjalankan program biner akan menjalankan perintah yang dikonfigurasi sebagai userid yang memiliki program biner itu sendiri.

Pak Es
sumber