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 ?
requiretty
diaktifkan secara default. Menurut dokumentasisudo
sendiri , ini "dinonaktifkan secara default."Jawaban:
Saya tidak tahu bagaimana menjalankan perintah shell di Java tetapi lihat opsi -t untuk perintah ssh
Itulah yang saya lakukan ketika saya perlu menjalankan perintah sebagai root over ssh (login root langsung dinonaktifkan dan tty diperlukan oleh sudo)
sumber
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:
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:
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.
sumber