Зміна оболонки (за допомогою chsh) за допомогою командного рядка в сценарії


11

У сценарії запуску, який налаштовує машину, я хочу запустити

chsh -s /bin/zsh

Однак тут запитується пароль користувача. Як мені ввести параметр як пароль? Або якщо у мене є сила судо, я можу якось обійти цей крок? Або в якості альтернативи, чи є інший спосіб змінити стандартну оболонку запуску?

Відповіді:


21

Наведене нижче запобігає зміні своїх оболонок заблокованим обліковим записам і вибірково дозволяє людям використовувати chshсебе БЕЗ судо чи су:

Проста настройка, яка все ще захищена:

  1. Додайте цю саму верхню частину /etc/pam.d/chsh:

    # This allows users of group chsh to change their shells without a password.
    #
    # Per: http://serverfault.com/questions/202468/changing-the-shell-using-chsh-via-the-command-line-in-a-script
    #
    auth       sufficient   pam_wheel.so trust group=chsh
    
  2. Створіть групу chsh:

    groupadd chsh
    

Для будь-якого користувача, дозволеного змінити свою оболонку:

    usermod -a -G chsh username

Гроші зняті:

user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/bin/bash
user@host:~$ chsh -s `which zsh`
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/usr/bin/zsh
user@host:~$ 

Робоче рішення, дивуйся, що це досі не прийнято.
dimpiax

Дякую. Здається, це найчистіший спосіб дозволити користувачеві, що використовує лише авторизацію авторизації, змінити оболонку без sudo. Цей матеріал pam.d дуже цікавий!
Франсуа Дролет

4

chsh фактично змінює рядок, що відноситься до користувача в / etc / passwd, хоча користувач може змінити лише свою власну 'рядок' у / etc / passwd. Отже, якщо ви хочете змінити оболонку для іншого користувача, вам потрібно його / її пароль.

Якщо ви дійсно хочете це зробити (зважаючи на занепокоєння на посаді Лоренцо та можливі проблеми безпеки), ось як це зробити:

#visudo

Для цього потрібні привілеї root.

Скажіть, ви зараз працюєте як "alice" і хочете змінити оболонку "bob" без пароля;

Додати у файл:

Cmnd_Alias     SHELL = /usr/bin/chsh
Runas_Alias    SH    = Bob
alice          ALL   = (SH) NOPASSWD: SHELL

Це гарантує, що "alice" може працювати на всіх хостах як користувачі групи SH без пароля групи команд в SHELL.

Напевно, трохи далеко вдалося зробити це так, але це можливо.

Не забудьте прочитати "man sudoers" перед тим, як змінити файл sudores на "visudo", особливо повідомлення, що стосуються безпеки!


Проблема sudoполягає в тому, що надзвичайно просто обійти та викорінити систему. Краще ніколи не змінюватися, sudoersякщо немає певної потреби, яку неможливо задовольнити будь-яким іншим способом (setuid / setgid виконуваний файл, групові дозволи тощо).

2

Вам потрібно передати ім’я користувача; це за допомогою sudo(або через root) дозволить вам встановити пароль / оболонку користувача, не вимагаючи старого пароля. Будь ласка, зверніться man chshдо додаткової інформації

Тепер моє запитання: чому ви хочете це робити? Якщо це сценарій налаштування, чи не слід просто змінювати оболонку користувачів під час створення (тобто при запуску adduser)? Якщо ви клонуєте систему віддалено, чи не слід /etc/passwdспочатку її змінювати ? Я не бачу причин робити це за допомогою сценарію, якщо ви не автоматизували весь процес встановлення та вибір оболонок для встановлення відбувається після створення першого користувача.


Це для машини EC2 (сценарій, який я запускаю відразу після запуску машини). Я хочу змінити початкову оболонку за замовчуванням. Робити "sudo chsh -s / bin / zsh user_name" теж не працює (все ще запитує пароль користувача)

спробуйте скористатися сценарієм та використати #!/usr/bin/sudo -s(рядок shebang). Крім того, ви впевнені, що zsh знаходиться в / bin, а не, можливо, в / usr / bin? (просто перевіряю, я не знайомий з ec2)
lorenzog

Ця відповідь неповна, оскільки передбачає sudoдозвіл. Дивіться шахту для іншого підходу, який не потребує sudoсереднього користувача.

0

Я вважаю, що ви можете змінити оболонку користувача у /etc/passwordфайлі, можливо, скориставшись passwdкомандою. Я ще не читав його, але це може бути корисним: відмінності оболонки UNIX та як змінити оболонку .


Командами є chshабо usermod. Ніколи не редагуйте passwdфайл безпосередньо, завжди використовуйте для цього vipwкоманду.

0

Спробуйте sudo chsh -s /bin/zsh, тоді:

  1. вихід для сервера
  2. термінал перезапуску
  3. увійдіть в сервер і перевірте echo $SHELL- в успішному випадку це змінилося :)

Це фактично встановить zsh як термінал за замовчуванням для кореневого користувача.
lcguida

@lcguida справа.
dimpiax
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.