Cette réponse devrait encore vous aider, même en tenant compte des modifications apportées à la question. En particulier, un compte créé avec
--disabled-login
n'a pas de mot de passe défini et aucun autre moyen de se connecter , mais il devrait toujours être possible d'utiliser sudo
(expliqué ci-dessous) pour exécuter des commandes ou un shell en tant qu'utilisateur. C'est en fait ainsi que le
root
compte est configuré dans Ubuntu.
Il y a plusieurs problèmes avec la commande su - irssi
.
Cette commande tente de démarrer un shell appartenant à un utilisateur nomméirssi
.
Il échouera si:
- Il n'y a aucun
irssi
utilisateur.
- Le
irssi
compte de l'utilisateur est désactivé.
- Le
irssi
compte de l'utilisateur est désactivé pour la connexion interactive. Parfois, un compte est autorisé à utiliser des services comme FTP mais interdit de se connecter normalement en définissant son shell sur quelque chose qui se ferme immédiatement, comme /bin/false
. Ensuite, une connexion se termine immédiatement, sans message.
- Le mot de passe que vous entrez n'est pas correct pour l'
irssi
utilisateur.
Le -
drapeau fait en sorte que le shell simule un shell de connexion initial - c'est-à-dire, c'est vraiment très similaire à la connexion en tant que irssi
. Sans l' -
indicateur, si la su
commande réussissait, vous obtiendriez toujours un shell appartenant à irssi
, mais les variables d'environnement telles que HOME
seraient inchangées.
Si vous souhaitez plutôt exécuter un programme appelé irssi
, vous devez invoquer su
différemment:
su username - -c irssi
Si vous omettez , c'est la même chose que --it tente d'exécuter la commande en tant que root.-c username
-c root
Vous pouvez également démarrer un shell, puis exécuter la commande :
- Démarrez le shell avec .
su username -
- Dans le shell, exécutez la commande (
irssi
).
- Si vous avez terminé, quittez le shell en exécutant
exit
.
Exécution de commandes en tant que root
Si vous voulez exécuter en irssi
tant que root
, ce su
n'est pas la façon de le faire. Les connexions root sont désactivées par défaut sur Ubuntu, et il n'y a que rarement de raison de les réactiver . Si vous avez activé la root
connexion, vous devriez pouvoir l'utiliser su
pour devenir root
. La raison pour laquelle il n'est pas nécessaire d'activer le root
compte est que, que vous le fassiez ou non, vous pouvez toujours exécuter des commandes comme root
avec sudo
.
Lorsque vous exécutez des commandes avec sudo
, vous entrez votre mot de passe, pas le mot de passe de l'utilisateur sous l'identité duquel vous souhaitez exécuter la commande. Seuls les administrateurs peuvent exécuter des commandes arbitraires comme root
avec sudo
(à moins que vous ne vous reconfiguriez sudo
pour autoriser les autres à le faire, bien sûr). Ainsi, un utilisateur qui n'est pas autorisé à administrer le système n'est pas autorisé à exécuter des commandes comme root
avec son propre mot de passe.
Pour fonctionner irssi
comme root
avec sudo
:
sudo irssi
Et vous saisiriez votre mot de passe à l'invite, pas root
le s.
Excepté le mot de passe que vous entrez, cela fait la même chose que:
su -c irssi
Sauf que la sudo
version peut réussir car elle ne nécessite pas l' root
activation du compte.
Comme avec su
, vous pouvez utiliser sudo
pour exécuter des commandes en tant qu'autre non root
utilisateur . Pour fonctionner irssi
comme username
avec sudo
:
sudo -u username irssi
Si vous voulez vous sudo
comporter comme su -
par rapport à -HOME
c'est-à-dire, vous voulez utiliser les HOME
variables d'environnement de l'utilisateur cible , vous pouvez exécuter sudo
avec l' -H
indicateur:
sudo -H irssi
sudo -H -u username irssi
Vous pouvez démarrer un shell entier avec sudo
, comme vous pouvez avec su
. Sauf pour le mot de passe que vous avez entré, cette commande a le même effet que su
:
sudo -s
Et cette commande a le même effet que su -
:
sudo -i
(Le i
représente le shell de connexion initial .)
Vous pouvez également démarrer un shell en tant qu'autre utilisateur:
sudo -u username -s
sudo -u username -i
Lectures complémentaires sur sudo
Pour en savoir plussudo
, consultez:
Pourquoi a-t-il gksu
fonctionné alors su
que non?
gksu
probablement travaillé en courantsudo
.
gksu
est une interface pour les deux su
et sudo
. Dans Ubuntu, il utilise par défaut sudo
(car dans Ubuntu, il su
n'est généralement pas utilisé pour devenir root
, et n'est qu'un moyen secondaire de devenir d'autres non- root
utilisateurs).
Vous pouvez l' gksu
utiliser su
comme interface en exécutant gksu --su-mode
.
Vous pouvez savoir s'il gksu
est en su
mode ou en sudo
mode et (si vous le souhaitez) modifier ce paramètre en exécutant gksu-properties
. Il s'agit d'un paramètre par utilisateur.
Lorsqu'il gksu
est en sudo
mode, il se comporte de la même manière que gksudo
.
Lectures complémentaires sur gksu
Analyse post-solution
Vous avez finalement découvert que vous pouviez exécuter la commande nécessaire avec:
sudo -u username irssi
(Parmi les techniques énumérées ci-dessus.)
En fin de compte, vous avez rapporté deux informations, qui sont suffisantes pour expliquer pourquoi d'autres techniques avaient échoué, mais qui avaient réussi:
Le username
compte a été créé avec le --disabled-login
drapeau, ce qui fait qu'il n'a pas de mot de passe (et aucun autre moyen de se connecter). Ne pas avoir de mot de passe ne signifie pas qu'il est possible de se connecter avec un mot de passe vierge . Cela signifie qu'aucun mot de passe n'est suffisant pour s'authentifier. En combinaison avec l'élimination d'autres moyens d'authentification, ce moyen username
ne peut pas du tout s'authentifier.
Ainsi, toutes les su
solutions basées sur le marché sont disponibles. sudo
peut fonctionner, car avec sudo
vous ne vous authentifiez pas en tant qu'utilisateur que vous êtes sur le point d'emprunter l'identité. Au lieu de cela, vous devez être autorisé à vous faire passer pour eux, et vous vous authentifiez en tant que vous-même (c'est-à-dire, entrez votre propre mot de passe, pas le leur).
Il est possible de définir un mot de passe sur le compte, ce qui supprime cette barrière à la connexion:
sudo passwd username
Cependant, il peut y avoir une bonne raison pour laquelle l'utilisateur n'est pas autorisé à se connecter. Par exemple, si cet utilisateur était autorisé à se connecter et à se connecter graphiquement, de mauvais problèmes surgiraient du fait que l'environnement ou les privilèges de l'utilisateur seraient mal adaptés à l'exécution des applications X11 ? Si cet utilisateur pouvait se connecter, cela permettrait-il de se connecter à distance en tant que cet utilisateur (pour les machines sur lesquelles vous avez exposé des services réseau)?
Si jamais vous souhaitez le désactiver à nouveau:
sudo passwd -dl username
Connexes: réactiver le root
compte après l'avoir temporairement activé.
Le username
compte a /bin/false
comme shell de connexion.
Lorsqu'un shell comme bash
fonctionne comme shell de connexion, il configure votre environnement et vous donne une invite interactive pour contrôler la machine.
Lors de l' /bin/false
exécution, en revanche, il ne fait rien et signale un échec . ( /bin/true
ne fait rien et signale le succès.)
Les commandes false
et true
sont utiles dans les scripts et à diverses fins de test, mais aussi pour désactiver un compte de sorte que lorsque quelqu'un se connecte, sa session de connexion se termine immédiatement. De cette façon, un mot de passe (ou d'autres moyens d'authentification) peut être activé, et les gens peuvent se connecter, mais pas pour accéder au shell . Par exemple, s'il existe un serveur FTP, ils pourraient toujours accéder à leur compte via FTP. S'il y a un serveur SSH, ils ne pourraient pas obtenir un shell via SSH, mais ils pourraient toujours utiliser sftp
et scp
transférer des fichiers.
Depuis username
le shell de connexion « était non fonctionnel, commandes telles que , , et ne pouvait pas travailler.su username
su - username
sudo -u username -s
sudo -u username -i
Mais les commandes qui ne donnent pas de shell, comme ou pourraient encore fonctionner.sudo -u username command
su username -c 'command'
Puisque les commandes peuvent être exécutées, vous pouvez changer le shell de connexion de l'utilisateur en quelque chose de fonctionnel:
sudo chsh -s /bin/bash username
Cependant, cela doit également être fait avec prudence, car il peut y avoir une bonne raison de désactiver les connexions interactives pour l'utilisateur.
Ici, les username
deux avaient désactivé le mot de passe et le shell "désactivé". L'absence de mot de passe fonctionnel a empêché toutes les su
solutions basées sur le travail, tandis que l'absence d'un shell de connexion interactif fonctionnel a empêché toutes les solutions de génération de shell de fonctionner (sauf l'appel manuel d'un shell, par exemple ).sudo -u username bash
sudo -u username command
c'est ce qui restait.