Làm cách nào để sửa lỗi 'sudo: không có tty hiện tại và không có chương trình hỏi đường được chỉ định'?


437

Tôi đang cố gắng biên dịch một số nguồn bằng cách sử dụng tệp tạo tệp. Trong makefile có một loạt các lệnh cần được chạy như sudo.

Khi tôi biên dịch các nguồn từ một thiết bị đầu cuối, mọi thứ đều ổn và việc tạm dừng được thực hiện lần đầu tiên khi một sudolệnh được chạy chờ mật khẩu. Khi tôi nhập mật khẩu, hãy tiếp tục và hoàn thành.

Nhưng tôi muốn có thể biên dịch các nguồn trong NetBeans. Vì vậy, tôi đã bắt đầu một dự án và chỉ cho netbeans nơi tìm các nguồn, nhưng khi tôi biên dịch dự án thì nó báo lỗi:

sudo: no tty present and no askpass program specified

Lần đầu tiên nó chạm một sudolệnh.

Tôi đã tìm kiếm vấn đề trên internet và tất cả các giải pháp tôi tìm thấy đều chỉ ra một điều: vô hiệu hóa mật khẩu cho người dùng này. Vì người dùng trong câu hỏi ở đây là root. Tôi không muốn làm điều đó.

Còn có những giải pháp nào nữa ko?


3
Tôi đang biên dịch một hệ điều hành đồ chơi. Tôi cần phải thực hiện một số thứ để thiết lập VM, bao gồm tạo hdd ảo với boot sector.
hebbo


Như được chỉ ra trong serverfault.com/a/597268 , sudo -n my-commandđã làm việc cho tôi. HIH!
andreyevbr

1
Vui lòng chọn một câu trả lời.
ichimaru

1
@andreyevbr Tôi không nghĩ vậy. sudo: a password is required
ichimaru

Câu trả lời:


260

Cấp cho người dùng sử dụng lệnh đó mà không cần nhắc mật khẩu sẽ giải quyết vấn đề. Đầu tiên mở giao diện điều khiển shell và gõ:

sudo visudo

Sau đó chỉnh sửa tệp đó để thêm vào cuối:

username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand

ví dụ

john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop

sẽ cho phép người sử dụng johnđể sudo poweroff, startstopkhông được nhắc nhập mật khẩu.

Nhìn vào phía dưới màn hình để biết các tổ hợp phím bạn cần sử dụng trong visudo - đây không phải là vi - và thoát mà không lưu ở dấu hiệu đầu tiên của bất kỳ vấn đề nào. Cảnh báo sức khỏe: làm hỏng tập tin này sẽ có hậu quả nghiêm trọng, chỉnh sửa cẩn thận!


4
Vâng, trang man sudoers đã mở mắt cho tôi biết sudo thực sự được sử dụng như thế nào.
Spencer Williams

6
Visudo sẽ mở ra trong bất kỳ EDITOR nào mà môi trường của bạn được cấu hình để sử dụng, rất có thể là (và nên là ^ _ ^) vi.
Matt Styles

8
Đảm bảo rằng dòng toán học NOPASSWD SAU bất kỳ dòng sudo nào khác có thể khớp với (như% wheel) không có cờ NOPASSWD.
anthony

27
Tôi không thể "sudo visudo" vì tôi không thể sudo ở nơi đầu tiên!
Gubatron

8
Xem xét việc thêm một tệp vào /etc/sudoers.d và để lại tệp visudo không bị ảnh hưởng.
xlttj

183

Thử:

  1. Sử dụng NOPASSWDdòng cho tất cả các lệnh, ý tôi là:

    jenkins ALL=(ALL) NOPASSWD: ALL
    
  2. Đặt dòng sau tất cả các dòng khác trong sudoerstập tin.

Điều đó làm việc cho tôi (Ubuntu 14.04).


13
Lần đầu tiên tôi đã thêm dòng sau các cấu hình người dùng khác, nhưng nó chỉ hoạt động khi được đặt là dòng hoàn toàn cuối cùng trong tệp trên Lubfox 14.04.1.
dùng77115

Phần thứ hai là giải pháp tôi là thứ tôi cần. Một dòng cấu hình hiện có (đối với nhóm bánh xe) cũng khớp với lệnh sudo của tôi nhưng không có mục NOPASSWD :. Đặt dòng mới của tôi sau khi nó ưu tiên, không cho phép sử dụng mật khẩu cho lệnh cụ thể mà tôi cần.
anthony

5
Như @ user77115 đã đề cập, điều này chỉ hoạt động nếu bạn đặt nó làm dòng cuối cùng trong tệp sudoers, ngay cả với Ubuntu 16.04. Là một lưu ý phụ, việc cấp quyền sudo cho jenkins cho tất cả các lệnh là một mối quan tâm bảo mật khá lớn. Xem xét gói các tập lệnh jenkins của bạn và chỉ cấp quyền truy cập vào các lệnh cụ thể, chẳng hạn như: jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/wrapper_script
ivandov

jenkinschỉ là một tên người dùng? Nó phải là tên người dùng của người dùng từ máy chủ? Nếu tên người dùng trên máy chủ khớp với tên người dùng từ máy chủ từ xa thì sao?
mrgloom

đây là đặc thù của jenkins, có vẻ như stackoverflow.com/a/22651598/1041319 là giải pháp chung hơn.
arntg

167

Thử:

ssh -t remotehost "sudo <cmd>"

Điều này sẽ loại bỏ các lỗi trên.


7
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machinexem thêm: sudo-no-tty-Present-and-no-askpass-chương trình được chỉ định Cũng sudo -Acho phép thiết lập sudochương trình hỏi, nhưng tôi chỉ thấy GUI. Có ai biết một câu hỏi để cho phép ssh remotehost sudo -A askpasskhông?
ở đây

1
Sửa chữa, The -Afor sudokhông lấy đối số và thay vào đó yêu cầu môi trường SUDO_ASKPASShoặc sudo.conf So ssh remotehost sudo -A commandvẫn hoạt động. Vẫn tò mò về một chương trình hỏi đường dựa trên thiết bị đầu cuối.
ở đây

7
điều này không hiệu quả với tôi (có lẽ vì tôi đang gọi ssh từ một kịch bản), gây ra lỗi cho tôi Pseudo-terminal will not be allocated because stdin is not a terminal.:(
knocte

Làm việc tuyệt vời cho tôi. Cảm ơn!
xfra35

1
Điều này không trả lời câu hỏi.
bschlueter

125

Sau tất cả các lựa chọn thay thế, tôi tìm thấy:

sudo -S <cmd>

Tùy chọn -S (stdin) khiến sudo đọc mật khẩu từ đầu vào tiêu chuẩn thay vì thiết bị đầu cuối.

Nguồn

Lệnh trên vẫn cần nhập mật khẩu. Để xóa mật khẩu bằng tay, trong trường hợp như jenkins, lệnh này hoạt động:

echo <password> | sudo -S <cmd> 

Điều này dường như khắc phục vấn đề của tôi. Nhưng có bất kỳ tác dụng phụ bằng cách sử dụng lệnh này?
Xiaodong Qi

3
sudo -S <command>- truetình cờ là một lệnh giả trả về mã thoát là 0 ( falselà lệnh trả về 1). Cảm ơn bạn, đây là một câu trả lời đúng, vì tất cả những người khác mong đợi "sudo" hoạt động!
Adam Plocher

1
-S: Viết lời nhắc đến lỗi tiêu chuẩn và đọc mật khẩu từ đầu vào tiêu chuẩn thay vì sử dụng thiết bị đầu cuối. Mật khẩu phải được theo sau bởi một ký tự dòng mới.
fileinster

Điều này hoạt động ngay lập tức và có thể khiến sudo hoạt động cho đến khi hết thời gian, nhưng không giải quyết được bất kỳ vấn đề tiềm ẩn nào có thể tồn tại và vấn đề có thể quay trở lại.
nealmcb

Tôi không biết nếu nó hoạt động nhưng nó hiển thị Password:thì không có gì xảy ra. Tôi không thể gõ mật khẩu.
ichimaru

43

sudotheo mặc định sẽ đọc mật khẩu từ thiết bị đầu cuối đính kèm. Vấn đề của bạn là không có thiết bị đầu cuối kèm theo khi nó được chạy từ bảng điều khiển netbeans. Vì vậy, bạn phải sử dụng một cách khác để nhập mật khẩu: đó được gọi là askpass chương trình.

Các askpass chương trình không phải là một chương trình cụ thể, nhưng bất kỳ chương trình mà có thể yêu cầu một mật khẩu. Ví dụ trong hệ thống của tôi x11-ssh-askpasshoạt động tốt.

Để làm được điều đó, bạn phải chỉ định chương trình sẽ sử dụng, với biến môi trường SUDO_ASKPASShoặc trong sudo.conftệp (xem man sudođể biết chi tiết).

Bạn có thể buộc sudosử dụng chương trình hỏi đáp bằng cách sử dụng tùy chọn-A . Theo mặc định, nó sẽ chỉ sử dụng nó nếu không có thiết bị đầu cuối kèm theo.


Giải pháp hiện tại đòi hỏi một gui. Chương trình Askpass hoạt động trên thiết bị đầu cuối.
ở đây

@here: Chà ... nếu bạn chạy ssh từ một thiết bị đầu cuối, nó sẽ hỏi mật khẩu trực tiếp, bạn không cần bất cứ điều gì đặc biệt ... Hoặc bạn đang hỏi về việc yêu cầu mật khẩu từ một thiết bị đầu cuối khác với thiết bị đầu cuối chạy phiên ssh?
Rodrigo

1
ahh bây giờ tôi thấy rằng -Akhông có tranh luận. -Ayêu cầu môi trường SUDO_ASKPASShoặc một sudo.conftập tin. Trong trường hợp đó, ssh host "export SUDO_ASKPASS=askpass;sudo -A cat /etc/passwd"vẫn sẽ hoạt động với một đường dẫn dựa trên thiết bị đầu cuối, tuy nhiên @ Vendru ngắn gọn hơn nhiều dưới đâyssh -t ...
tại đây

Có một số cavats với việc sử dụng -A. Đầu tiên, nếu -A được sử dụng và SUDO_ASKPASS chưa được đặt, bạn sẽ gặp lỗi. Thứ hai, khi -A được sử dụng, ssh sẽ không sử dụng thông tin đăng nhập được lưu trong bộ nhớ cache, nó sẽ luôn yêu cầu mật khẩu.
anthony

Là một quảng cáo, bạn có thể muốn xem ghi chú của tôi về các chương trình nhập mật khẩu ... ict.griffith.edu.au/anthony/info/crypto/passwd_input.txt
anthony

26

Dành cho người dùng Ubuntu 16.04

Có một tập tin bạn phải đọc với:

cat /etc/sudoers.d/README

Đặt tệp có chế độ 0440 trong /etc/sudoers.d/myuser với nội dung sau:

myuser  ALL=(ALL) NOPASSWD: ALL

Nên khắc phục sự cố.

Đừng quên:

chmod 0440 /etc/sudoers.d/myuser

Đẹp. Giải pháp sạch hơn so với phổ biến.
Paul Praet

2
Đừng làm theo điều này một cách mù quáng. Tôi đã tạo một tệp mới trong /etc/sudoers.d như được mô tả ở đây và cuối cùng không thể sử dụng sudo nữa .. phải xóa tệp qua chế độ khôi phục.
Stian

25

Hãy thử cái này:

echo '' | sudo -S my_command

Nó làm việc cho tôi, nhưng bất cứ ai có thể giải thích tại sao nó giúp?
ololobus

@ololobus bạn gửi mật khẩu trống đến dấu nhắc đầu tiên để nhập mật khẩu
Nikita Koksharov

Đã làm việc! Không có câu trả lời nào được đánh giá cao hơn đã giải quyết nó cho tôi.
drerD

1
Nó trả về lỗi sau: [sudo] password for alper: Sorry, try again. [sudo] password for alper: sudo: 1 incorrect password attempt @sNICkerssss
alper 17/03/19

16

Nếu có bất kỳ cơ hội nào bạn đã đến đây vì bạn không thể sudo bên trong Ubuntu đi kèm với Windows10

  1. Chỉnh sửa tệp / etc / hosts từ Windows (với Notepad), tệp này sẽ được đặt tại : %localappdata\lxss\rootfs\etc, thêm 127.0.0.1 WINDOWS8, điều này sẽ thoát khỏi lỗi đầu tiên mà nó không thể tìm thấy máy chủ.

  2. Để thoát khỏi no tty presentlỗi, luôn luôn làmsudo -S <command>


2
Cảm ơn đã cung cấp câu trả lời cho những người đến đây vì một lý do không liên quan đến mô tả câu hỏi, nhưng phù hợp với tiêu đề câu hỏi. +1
Jayant Bhawal


15

Đăng nhập vào linux của bạn. Bắn theo lệnh. Hãy cẩn thận, vì chỉnh sửa sudoer là một đề xuất rủi ro.

$ sudo visudo

Khi vi biên tập mở ra, hãy thực hiện các thay đổi sau:

  1. Nhận xét Defaults requiretty

    # Defaults    requiretty
    
  2. Đi đến cuối tập tin và thêm

    jenkins ALL=(ALL) NOPASSWD: ALL
    

12

Trong Jenkins :

echo '<your-password>' | sudo -S command

Vd : -

echo '******' | sudo -S service nginx restart

Bạn có thể sử dụng Plugin Mask Password để ẩn mật khẩu của mình


11

Điều này làm việc cho tôi:

echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

nơi người dùng của bạn là "myuser"

đối với hình ảnh Docker, đó sẽ chỉ là:

RUN echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

9

Hãy chắc chắn rằng lệnh bạn đang sudolà một phần của bạnPATH .

Nếu bạn có một mục lệnh đơn (hoặc đa, nhưng không phải TẤT CẢ) sudoers, bạn sẽ nhận đượcsudo: no tty present and no askpass program specified khi lệnh không phải là một phần của đường dẫn của bạn (và đường dẫn đầy đủ không được chỉ định).

Bạn có thể sửa nó bằng cách thêm lệnh vào lệnh của bạn PATHhoặc gọi nó bằng một đường dẫn tuyệt đối, nghĩa là

sudo /usr/sbin/ipset

Thay vì

sudo ipset


1
Điều này thực sự là ngã ba cho tôi. trong sudoers %sitd ALL=(lamparna) NOPASSWD: /usr/bin/git_push_to_lamparna.sh, /usr/bin/gitvà sử dụng sudo -u lamparna git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.gittrong git post-update hook hook no tty, nhưng sử dụng sudo -u lamparna /usr/bin/git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.gitcông việc không có mật khẩu.
Foton

7

Lệnh sudothất bại vì nó đang cố gắng nhắc mật khẩu root và không có giả nào được phân bổ (vì nó là một phần của tập lệnh).

Bạn cần đăng nhập bằng root để chạy lệnh này hoặc thiết lập các quy tắc sau trong /etc/sudoers (hoặc sudo visudo:):

# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL

Sau đó, đảm bảo rằng người dùng của bạn thuộc adminnhóm (hoặc wheel).

Lý tưởng nhất (an toàn hơn) là chỉ giới hạn quyền root chỉ với các lệnh cụ thể có thể được chỉ định là %admin ALL=(ALL) NOPASSWD:/path/to/program


Tôi biết, đó là cách an toàn hơn nhiều để làm. Mặc dù, tôi đã viết lệnh sau trong sudoerstệp apache ALL = (ALL) NOPASSWD:/usr/share/apache-tomcat-7.0.61/bin/startup.shnhưng nó không hoạt động với tôi. nó đưa ra lỗi sausudo: >>> /etc/sudoers: syntax error near line 120 <<< sudo: parse error in /etc/sudoers near line 120 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
muaaz

1
BTW, nó hoạt động tốt apache ALL=(ALL) NOPASSWD: ALLnhưng rủi ro bảo mật. :)
muaaz

6

Tôi nghĩ rằng tôi có thể giúp ai đó với trường hợp của tôi.

Đầu tiên, tôi đã thay đổi cài đặt người dùng khi /etc/sudoerstham khảo câu trả lời ở trên. Nhưng nó vẫn không hoạt động.

myuser   ALL=(ALL) NOPASSWD: ALL
%mygroup  ALL=(ALL:ALL) ALL

Trong trường hợp của tôi, myuserlà trong mygroup.

Và tôi không cần nhóm. Vì vậy, đã xóa dòng đó.

(Không nên xóa dòng đó như tôi, chỉ đánh dấu nhận xét.)

myuser   ALL=(ALL) NOPASSWD: ALL

Nó hoạt động!


3

Chạy các kịch bản shell có chứa các lệnh sudo trong chúng từ jenkins có thể không chạy như mong đợi. Để khắc phục điều này, hãy làm theo

Các bước đơn giản:

  1. Trên các hệ thống dựa trên Ubuntu, hãy chạy "$ sudo visudo"

  2. Điều này sẽ mở tập tin / etc / sudoers.

  3. Nếu người dùng jenkins của bạn đã có trong tệp đó, thì hãy sửa đổi để trông như thế này:

jenkins ALL = (TẤT CẢ) NOPASSWD: TẤT CẢ

  1. lưu các tập tin

  2. Khởi động lại công việc jenkins của bạn

  3. bạn không nên thấy thông báo lỗi đó nữa :)


3

Tôi đã có thể hoàn thành việc này nhưng vui lòng đảm bảo thực hiện đúng các bước. Điều này là dành cho bất cứ ai đang nhận được lỗi nhập khẩu.

Bước 1 : Kiểm tra xem các tệp và thư mục có vấn đề về quyền thực thi không. Người dùng Linux sử dụng:

chmod 777 filename

Bước2 : Kiểm tra xem người dùng nào có quyền thực thi nó.

Bước 3 : mở terminal loại lệnh này.

sudo visudo

thêm dòng này vào mã bên dưới

www-data ALL=(ALL) NOPASSWD:ALL
nobody ALL=(ALL) NOPASSWD:/ALL

đây là cấp quyền để thực thi tập lệnh và cho phép nó sử dụng tất cả các thư viện. Người dùng thường là 'không ai' hoặc 'dữ liệu www'.

Bây giờ chỉnh sửa mã của bạn là

echo shell_exec('sudo -u the_user_of_the_file python your_file_name.py 2>&1');

đi đến terminal để kiểm tra xem tiến trình có đang chạy kiểu này không ...

ps aux | grep python

điều này sẽ xuất ra tất cả quá trình chạy trong python.

Thêm bật : sử dụng mã dưới đây để kiểm tra người dùng trong hệ thống của bạn

cut -d: -f1 /etc/passwd

Cảm ơn bạn!


2

Lỗi này cũng có thể phát sinh khi bạn đang cố chạy lệnh terminal (yêu cầu mật khẩu root) từ một số tập lệnh không shell, ví dụ sudo ls(trong backticks) từ chương trình Ruby. Trong trường hợp này, bạn có thể sử dụng tiện ích Expect ( http://en.wikipedia.org/wiki/Expect ) hoặc các lựa chọn thay thế của nó.
Ví dụ: trong Ruby để thực thi sudo lsmà không nhận được sudo: no tty present and no askpass program specified, bạn có thể chạy nó:

require 'ruby_expect'

exp = RubyExpect::Expect.spawn('sudo ls', :debug => true)
exp.procedure do
    each do
        expect "[sudo] password for _your_username_:" do
            send _your_password_
        end
    end
end

[điều này sử dụng một trong những lựa chọn thay thế cho Expect TCL: ruby_Exect gem].


2

Để tham khảo, trong trường hợp người khác gặp phải vấn đề tương tự, tôi đã bị kẹt trong một giờ tốt với lỗi này không xảy ra do tôi đang sử dụng tham số NOPASSWD.

Điều tôi KHÔNG biết là sudo có thể đưa ra thông báo lỗi chính xác tương tự khi không có tty và lệnh người dùng cố gắng khởi chạy không phải là một phần của lệnh được phép trong tệp / etc / sudoers.

Dưới đây là một ví dụ đơn giản về nội dung tệp của tôi với vấn đề của tôi:

bguser ALL = NOPASSWD: \
    command_a arg_a, \
    command_b arg_b \
    command_c arg_c

Khi bguser sẽ cố gắng khởi chạy "sudo command_b arg_b" mà không có bất kỳ tty nào (bguser đang được sử dụng cho một số daemon), sau đó anh ta sẽ gặp phải lỗi "không có tty hiện tại và không có chương trình hỏi đường được chỉ định".

Tại sao?

Bởi vì dấu phẩy bị thiếu ở cuối dòng trong tệp / etc / sudoers ...

(Tôi thậm chí tự hỏi liệu đây có phải là hành vi được mong đợi và không phải là lỗi trong sudo hay không vì thông báo lỗi chính xác cho trường hợp đó sẽ là "Xin lỗi, người dùng bguser không được phép thực thi, v.v.")


2

Tôi đã gặp lỗi này vì tôi đã giới hạn người dùng của mình chỉ một 'systemctl' có thể thực thi được và đã định cấu hình sai tệp visudo.

Đây là những gì tôi đã có:

jenkins ALL=NOPASSWD: systemctl

Tuy nhiên, bạn cần bao gồm đường dẫn đầy đủ đến tệp thực thi, ngay cả khi nó nằm trên đường dẫn của bạn theo mặc định, ví dụ:

jenkins ALL=NOPASSWD: /bin/systemctl

Điều này cho phép người dùng jenkins của tôi khởi động lại dịch vụ nhưng không có quyền truy cập root đầy đủ


1

Không ai nói điều gì có thể gây ra lỗi này, trong trường hợp di chuyển từ máy chủ này sang máy chủ khác, hãy nhớ về việc kiểm tra tên máy chủ trong tệp sudoers:

Vì vậy, đây là cấu hình / etc / sudoers của tôi

User_Alias      POWERUSER = user_name
Cmnd_Alias SKILL = /root/bin/sudo_auth_wrapper.sh
POWERUSER hostname=(root:root) NOPASSWD: SKILL

nếu nó không khớp

uname -a
Linux other_hostname 3.10.17 #1 SMP Wed Oct 23 16:28:33 CDT 2013 x86_64 Intel(R) Core(TM) i3-4130T CPU @ 2.90GHz GenuineIntel GNU/Linux

nó sẽ xuất hiện lỗi này:

không có tty hiện tại và không có chương trình hỏi


1

Các tùy chọn khác, không dựa trên NOPASSWD:

  • Bắt đầu Netbeans với đặc quyền root ((sudo netbeans) hoặc tương tự), có lẽ sẽ kết thúc quá trình xây dựng với root và do đó sudo sẽ tự động thành công.
  • Thực hiện các thao tác bạn cần để thực hiện suexec - làm cho chúng được sở hữu bởi root và đặt chế độ thành 4755. (Điều này tất nhiên sẽ cho phép bất kỳ người dùng nào trên máy chạy chúng.) Theo cách đó, họ không cần sudo chút nào.
  • Tạo tập tin đĩa cứng ảo với bộ khởi động không cần sudo chút nào. Các tập tin chỉ là các tập tin và khởi động chỉ là dữ liệu. Ngay cả máy ảo cũng không nhất thiết phải cần root, trừ khi bạn chuyển tiếp thiết bị nâng cao.

1

Có thể câu hỏi không rõ ràng rằng tại sao không có câu trả lời nào khớp với nó nhưng tôi đã có thông báo lỗi tương tự khi tôi đang cố gắn sshfs yêu cầu sudo: lệnh này là như thế này:

sshfs -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www

bằng cách thêm tùy chọn -o debug

sshfs -o debug -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www

Tôi đã có cùng một thông điệp của câu hỏi này:

sudo: no tty present and no askpass program specified

Vì vậy, bằng cách đọc câu trả lời của người khác, tôi đã trở thành một tệp trong /etc/sudoer.d/usermy.server.tld với:

user ALL=NOPASSWD: /usr/lib/openssh/sftp-server

và bây giờ tôi có thể gắn ổ đĩa mà không cần cung cấp thêm quá nhiều quyền cho người dùng của mình.


0

Mặc dù câu hỏi này đã cũ, nhưng nó vẫn phù hợp với hệ thống cập nhật ít nhiều của tôi. Sau khi kích hoạt chế độ gỡ lỗi của sudo ( Debug sudo /var/log/sudo_debug all@infoin /etc/sudo.conf), tôi được trỏ đến / dev: " /dev is world writable". Vì vậy, bạn có thể cần kiểm tra các quyền của tệp tty , đặc biệt là các quyền của thư mục chứa nút tty / pts.


0

Nếu bạn thêm dòng này vào /etc/sudoers(thông qua visudo), nó sẽ khắc phục vấn đề này mà không phải vô hiệu hóa nhập mật khẩu của bạn và khi bí danh sudo -Skhông hoạt động (gọi tập lệnh sudo):

Defaults visiblepw

Tất nhiên hãy tự đọc hướng dẫn để hiểu nó, nhưng tôi nghĩ trong trường hợp sử dụng của tôi là chạy trong một container LXD thông qua lxc exec instance -- /bin/bashnó khá an toàn vì nó không in mật khẩu qua mạng.


0

Sử dụng đường ống dẫn:

echo your_pswd | sudo -S your_cmd

Sử dụng tài liệu ở đây:

sudo -S cmd <<eof
pwd
eof
#remember to put the above two lines without "any" indentations.

Mở một thiết bị đầu cuối để hỏi mật khẩu (bất cứ khi nào hoạt động):

gnome-terminal -e "sudo cmd"
xterm -e "sudo cmd"

-1

1 mở / etc / sudoers

loại sudo vi /etc/sudoers. Điều này sẽ mở tập tin của bạn trong chế độ chỉnh sửa.

2 Thêm / Sửa đổi người dùng linux

Tìm kiếm mục nhập cho người dùng Linux. Sửa đổi như dưới đây nếu tìm thấy hoặc thêm một dòng mới.

<USERNAME> ALL=(ALL) NOPASSWD: ALL

3 Lưu và thoát khỏi chế độ chỉnh sửa

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.