私はいつも GNU/Linux ラップトップをコンソール モードで起動します。しかし、時々 GUI モードを起動する必要があります。その場合、常にルート パスワードの入力が必要です。そこで、次のスクリプト「gogui.sh」を書いて、次の場所に配置しました/usr/bin
。
#!/bin/bash
echo "mypassword" | sudo service lightdm start
誰かがファイルを読んで、私のパスワードを簡単に見ることができるので、それは本当に愚かな考えです。
これに代わるものはありますか?
答え1
スクリプト内でsudoにパスワードを渡すのはまったく意味がありません。代わりに、sudoルールを追加してください。実行したい特定のコマンドをNOPASSWD
タグで追加するコマンド固有のNOPASSWD
ルールは、一般的なルールの後に来る必要があることに注意してください。
saeid ALL = (ALL:ALL) ALL
saeid ALL = (root) NOPASSWD: service lightdm start
しかし、これはおそらくあまり役に立ちません。lightdm start
ログインプロンプトを開始しますが、これは他のユーザーにグラフィカルにログインさせたい場合にのみ必要です。GUIセッションを開始するだけの場合は不要です。代わりに、startx
テキスト モード セッションから GUI セッションを開始します。追加の権限は必要ありません。
startx
lightdm が使用するのと同じデフォルトのセッション タイプが選択されない可能性があるため、ウィンドウ マネージャーまたはデスクトップ環境を明示的に指定する必要がある場合があります。
startx -- gnome-session
答え2
いくつかのオプションがあり、その 1 つはvisudo
NOPASSWD フラグを使用して特定のコマンドを追加することです。
%wheel ALL=(ALL) NOPASSWD: /path/to/myscript
cat /path/to/myscript
#!/bin/bash
service lightdm start
答え3
編集
コメントでUnityについて言及しているのに気づきました。どうやらUbuntuを使っているようですね。私の最初の回答はシスビニットシステムではなく、コマンドtelinit
互換性のためにまだ存在しており、システムドまたはアップスタート。
SysVの方法
telinit 5
現代のSystemdシステムでは、telinit
リダイレクト先systemctl
。
Systemdの方法
systemctl isolate runlevel5.target
または
systemctl isolate graphical.target
元の回答:
古い非Systemdディストリビューション(例えばRHEL/CentOS 6以前)では、コンソールモードからGUIに切り替える最も簡単な方法は、telinit
コマンド。たとえば、RHEL/Centos ディストリビューションでは、マルチユーザー テキストベース モードは実行レベル 3、マルチユーザー GUI モードは実行レベル 5 です。コンソールから GUI モードへの切り替えは、次のように行います。デフォルトでは、ルート権限が必要です。パスワードなしで通常のユーザーとしてこれを実行するには、エントリまたは telinit 実行可能ファイルに setuid フラグを設定するtelinit
必要があります。この方法は、自分のアカウントだけに制限できるため、推奨されるアプローチです。sudoers
sudo
答え4
特に について言及しているのでsudo
、ジルの答えただし、あなたの質問のタイトルは単にプログラムのパスワードを取得することに関するものでありstdin
、私は最近同様の状況に遭遇しました。
echo $(read -sp "Password: " password; echo $password) | yourcommand
おそらく批判されるだろうが、効果はあった。
といえばbash
、おそらくそこでも使えるでしょう
yourcommand <$(read -sp "Password: " password; echo $password)