
私はいつもコンソールモードで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
互換性のためにまだ存在し、ディストリビューションで使用される予定です。システムまたは突然現れる。
システムVモード
telinit 5
最新のSystemdシステムではtelinit
にリダイレクトされるsystemctl
。
システムアプローチ
systemctl isolate runlevel5.target
または
systemctl isolate graphical.target
元の答え:
以前の非システムディストリビューション(RHEL / CentOS 6以下など)からコンソールモードからGUIに切り替える最も簡単な方法は、次のことです。telinit
注文する。たとえば、RHEL / Centosディストリビューションでは、マルチユーザーテキストベースモードは実行レベル3、マルチユーザーGUIモードは実行レベル5です。コンソールからGUIモードに切り替える方法は次のとおりです。デフォルトではtelinit
root権限が必要です。パスワードなしで一般ユーザーとして実行するには、sudoers
エントリを入力するか、telinit実行可能ファイルにsetuidフラグを設定する必要があります。このsudo
方法はお客様のアカウントに制限される可能性があるため、優先されます。
答え4
に具体的に言及しているので、sudo
次のことを守ってください。ザイルズの答え。しかし、あなたの質問のタイトルは単にプログラムのパスワードを取得することだけで、stdin
最近同様の状況が発生しました。
echo $(read -sp "Password: " password; echo $password) | yourcommand
これについていくつかの批判を受けることができますが、効果があります。
言い換えればbash
、あなたも使用できます
yourcommand <$(read -sp "Password: " password; echo $password)