Làm thế nào để chạy lệnh như một người dùng có đăng nhập bị vô hiệu hóa?


21

Tôi đang cố gắng sử dụng lệnh su để chạy một ứng dụng như một người dùng khác

Trong trường hợp này tôi đang cố chạy irssi

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

Tôi chạy gksu và thiết lập các tham số tương tự và nó hoạt động, và không hỏi tôi mật khẩu người dùng. Vấn đề là gì? Và làm thế nào để tôi giải quyết nó?

Tôi nên lưu ý người dùng đã được tạo như thế này

adduser --system --disabled-login [username]

nếu nó làm cho bất kỳ sự khác biệt .... thở dài.


bạn không quên cờ -c để khởi chạy irssi? (su -c irssi)
eephyne

cũng đã thử ... thử hàng ngàn thứ ... tại sao rất khó để chạy WTF mà chính xác như trang người đàn ông muốn nó ... nhưng không có gì xảy ra
grrrr

nó có thể irssicó vấn đề và lệnh su hoạt động không?
Nanne

Có phải [tên người dùng] có quyền thích hợp để chạy irssi không?
Doka

Câu trả lời:


28

Câu trả lời này vẫn sẽ giúp bạn, thậm chí đưa các chỉnh sửa vào câu hỏi. Cụ thể, một tài khoản được tạo --disabled-loginkhông có mật khẩu được đặt và không có phương tiện đăng nhập nào khác , nhưng vẫn có thể sử dụng sudo(giải thích bên dưới) để chạy các lệnh hoặc shell như người dùng. Trên thực tế, đây là cách roottài khoản được thiết lập trong Ubuntu.

Có nhiều vấn đề với lệnh su - irssi.

Lệnh này cố gắng bắt đầu một shell thuộc sở hữu của người dùng có tênirssi .

Nó sẽ thất bại nếu:

  • Không có irssingười dùng.
  • Các irssitài khoản người dùng bị vô hiệu hóa.
  • Các irssitài khoản người dùng bị vô hiệu hóa để đăng nhập tương tác. Đôi khi, một tài khoản được phép sử dụng các dịch vụ như FTP nhưng bị cấm đăng nhập bình thường bằng cách đặt vỏ của chúng thành thứ gì đó thoát ngay lập tức, như thế /bin/false. Sau đó, một đăng nhập ngay lập tức kết thúc, không có tin nhắn.
  • Mật khẩu bạn đang nhập không chính xác cho irssingười dùng.

Các -lá cờ làm cho nó nên vỏ mô phỏng một vỏ đăng nhập ban đầu - có nghĩa là, do đó, nó thực sự rất giống khai thác gỗ trên như irssi. Nếu không có -cờ, nếu sulệnh thành công, bạn vẫn nhận được một vỏ do sở hữu irssi, nhưng các biến môi trường như HOMEsẽ không thay đổi.

Thay vào đó, nếu bạn muốn chạy một chương trình được gọi irssi , bạn phải gọi sukhác:

su username - -c irssi

Nếu bạn rời khỏi , nó giống như - nó cố chạy lệnh dưới dạng root.-c username-c root

Ngoài ra, bạn có thể bắt đầu một shell và sau đó chạy lệnh :

  1. Bắt đầu vỏ với .su username -
  2. Trong shell, chạy lệnh ( irssi).
  3. Nếu bạn đã hoàn tất, hãy rời khỏi vỏ bằng cách chạy exit .

Chạy lệnh như root

Nếu bạn muốn chạy irssinhư root, sukhông phải là cách để làm điều đó. Đăng nhập gốc bị tắt theo mặc định trên Ubuntu và hiếm khi có bất kỳ lý do nào để kích hoạt lại chúng . Nếu bạn đã kích hoạt rootđăng nhập, thì bạn sẽ có thể sử dụng suđể trở thành root. Lý do không cần thiết để kích hoạt roottài khoản là vì dù bạn có làm hay không, bạn vẫn có thể chạy các lệnh như rootvớisudo .

Khi bạn chạy các lệnh với sudo, bạn nhập mật khẩu của mình , không phải mật khẩu của người dùng theo danh tính mà bạn muốn lệnh chạy. Chỉ quản trị viên mới có thể chạy các lệnh tùy ý như rootvới sudo(trừ khi bạn cấu hình lại sudođể cho phép người khác làm như vậy, tất nhiên). Vì vậy, người dùng không được phép quản trị hệ thống sẽ không được phép chạy các lệnh nhưroot với mật khẩu của riêng họ.

Để chạy irssinhư rootvới sudo:

sudo irssi

Và bạn sẽ nhập mật khẩu của mình khi được nhắc chứ không phảiroot .

Ngoại trừ mật khẩu bạn nhập, điều này thực hiện tương tự như:

su -c irssi

Ngoại trừ sudophiên bản có thể thành công vì không yêu cầuroot kích hoạt tài khoản.

Giống như với su, bạn có thể sử dụng sudođể chạy các lệnh như một rootngười dùng khác, không phải người dùng . Để chạy irssinhư usernamevới sudo:

sudo -u username irssi

Nếu bạn muốn sudo hành xử giống như su -đối vớiHOME - đó là, bạn muốn sử dụng các HOMEbiến môi trường của người dùng mục tiêu , bạn có thể chạy sudovới -Hcờ:

sudo -H irssi
sudo -H -u username irssi

Bạn có thể bắt đầu toàn bộ vỏ với sudo, giống như bạn có thể với su. Ngoại trừ mật khẩu bạn đã đặt, lệnh này có tác dụng tương tự như su:

sudo -s

Và lệnh này có tác dụng tương tự như su -:

sudo -i

(Chữ iviết tắt của vỏ đăng nhập ban đầu .)

Bạn cũng có thể bắt đầu một shell như một người dùng khác:

sudo -u username -s
sudo -u username -i

Đọc thêm về sudo

Để tìm hiểu thêm vềsudo , hãy xem:

Tại sao làm gksuviệc khisu không?

gksucó thể làm việc bằng cách chạysudo .

gksulà một lối vào cho cả hai susudo. Trong Ubuntu, nó mặc định sử dụng sudo(vì trong Ubuntu, suthường không được sử dụng để trở thành rootvà chỉ là cách thứ yếu để trở thành người khác, không phải rootngười dùng).

Bạn có thể gksusử dụng sulàm frontend bằng cách chạy gksu --su-mode.

Bạn có thể tìm hiểu xem gksuđang ở suchế độ hay sudochế độ và (nếu bạn muốn) thay đổi cài đặt này, bằng cách chạygksu-properties . Đây là cài đặt theo người dùng.

Khi gksusudochế độ, nó hoạt động giống như gksudo.

Đọc thêm về gksu


Phân tích hậu giải

Cuối cùng bạn đã thấy rằng bạn có thể chạy lệnh cần thiết với:

sudo -u username irssi

(Đó là một trong những kỹ thuật được liệt kê ở trên.)

Cuối cùng, bạn đã báo cáo hai mẩu thông tin, đủ để giải thích tại sao các kỹ thuật khác đã thất bại, nhưng điều đó đã thành công:

  1. Các usernametài khoản được tạo ra với các --disabled-loginlá cờ, mà làm cho nó có không có mật khẩu (và không có các phương tiện khác của khai thác gỗ trong). Không có mật khẩu không có nghĩa là có thể đăng nhập bằng mật khẩu trống . Nó có nghĩa là không có mật khẩu là đủ để xác thực. Kết hợp với việc loại bỏ các phương tiện xác thực khác, điều này có nghĩa là usernamekhông thể xác thực được.

    Vì vậy, tất cả các sugiải pháp dựa trên được đưa ra. sudomặc dù có thể hoạt động, bởi vì với sudobạn không xác thực là người dùng mà bạn sắp mạo danh. Thay vào đó, bạn phải được ủy quyền để mạo danh họ và bạn xác thực là chính mình (nghĩa là nhập mật khẩu của riêng bạn chứ không phải mật khẩu của họ).

    Có thể đặt mật khẩu trên tài khoản, loại bỏ rào cản này để đăng nhập:

    sudo passwd username

    Tuy nhiên, có thể có một lý do chính đáng để người dùng không được phép đăng nhập. Ví dụ: nếu người dùng này được phép đăng nhập và đăng nhập bằng đồ họa, sẽ có các vấn đề xấu phát sinh từ môi trường người dùng hoặc đặc quyền không phù hợp để chạy các ứng dụng X11 ? Nếu người dùng này có thể đăng nhập, điều đó có thể đăng nhập từ xa như người dùng đó không (đối với các máy mà bạn đã tiếp xúc với các dịch vụ mạng)?

    Nếu bạn muốn vô hiệu hóa lại nó:

    sudo passwd -dl username

    Liên quan: Vô hiệu hóa lại roottài khoản sau khi đã kích hoạt tạm thời.

  2. Các usernametài khoản có /bin/falsenhư vỏ đăng nhập của mình.

    Khi một vỏ như bashchạy như vỏ đăng nhập của bạn, nó sẽ thiết lập môi trường của bạn và cung cấp cho bạn lời nhắc tương tác để điều khiển máy.

    Khi /bin/falsechạy, mặt khác, nó không làm gìbáo cáo thất bại . ( /bin/truekhông làm gì và báo cáo thành công.)

    Các lệnh falsetruehữu ích trong việc tạo kịch bản và cho các mục đích thử nghiệm khác nhau, nhưng cũng để vô hiệu hóa một tài khoản để khi ai đó đăng nhập, phiên đăng nhập của họ ngay lập tức kết thúc. Bằng cách đó, mật khẩu (hoặc phương tiện xác thực khác) có thể được bật và mọi người có thể đăng nhập, không phải để truy cập shell . Ví dụ: nếu có máy chủ FTP, họ vẫn có thể truy cập tài khoản của mình qua FTP. Nếu có máy chủ SSH, họ sẽ không thể có được vỏ thông qua SSH, nhưng họ vẫn có thể sử dụng sftpscp chuyển tệp.

    Từ username's vỏ đăng nhập là không có chức năng, các lệnh thích , , , và không thể làm việc.su usernamesu - usernamesudo -u username -ssudo -u username -i

    Nhưng các lệnh không cung cấp vỏ, như hoặc vẫn có thể hoạt động.sudo -u username commandsu username -c 'command'

    các lệnh có thể được chạy, bạn có thể thay đổi vỏ đăng nhập của người dùng thành một chức năng nào đó:

    sudo chsh -s /bin/bash username

    Tuy nhiên, điều này cũng nên được thực hiện một cách thận trọng, vì có thể có một lý do chính đáng để vô hiệu hóa đăng nhập tương tác cho người dùng.

Ở đây, usernamecả hai đã vô hiệu hóa mật khẩu vỏ "bị vô hiệu hóa". Việc không có bất kỳ mật khẩu làm việc nào đã ngăn các sugiải pháp dựa trên tất cả hoạt động, trong khi việc không có vỏ đăng nhập tương tác hoạt động đã ngăn tất cả các giải pháp sinh sản vỏ hoạt động (ngoại trừ việc gọi thủ công một vỏ ).sudo -u username bash

sudo -u username command là những gì còn lại.


Xin lỗi vì nhiều chỉnh sửa trong khi bạn đang thực hiện câu trả lời của mình. Ồ Cảm ơn bạn. Khi tôi thực hiện cat / etc / passwd, người dùng tôi đã cấu hình có / bin / false ở cuối - vậy đây có phải là nguyên nhân khiến nó bị lỗi không? Bất cứ ý tưởng làm thế nào để khắc phục điều đó ?
dùng123361

Vì lý do nào, sử dụng tên người dùng sudo -u irssi hoạt động điều trị. Cảm ơn câu trả lời dài dòng, giải thích tốt của bạn!
dùng123361

@db Tôi rất vui vì nó hoạt động! (Btw, không cần phải xin lỗi để chỉnh sửa, chỉnh sửa là rất, rất tốt và câu hỏi của bạn có thể sẽ hữu ích cho nhiều người khác hơn do hậu quả của các chỉnh sửa.) Đối với các câu hỏi khác của bạn, tôi đã chỉnh sửa câu trả lời của mình bao gồm một phần phân tích ở cuối.
Eliah Kagan
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.