一般ユーザーとしてコマンドを実行するためにsudoにsetuidビットを割り当てることはできますか?
ユーザーテストを実行した後、次のことを行うとします。
test@test$ apt-get update
しかし、sudoを使用したりsudoersファイルを変更したくありません。 setuidビットだけを使用できますか?
答え1
アカウントに権限がある場合はsudo
suid ビットを台無しにする必要はありません。以下では、Bash を対話型シェルとして想定しているため、使用する項目に応じて、手順 2 と 3 を変更する必要があります。
/etc/sudoersの最後に追加します。
USERNAME HOST_NAME = (root) NOPASSWD: /usr/bin/apt-get USERNAME HOST_NAME = (root) NOPASSWD: /usr/bin/shutdown
~/.bashrcに追加してください。
alias shutdown='sudo shutdown' alias apt-get='sudo apt-get'
現在のセッションの開始構成を再ロードします。
$ source ~/.bashrc
root / sudoのパスワードを求めるプロンプトは表示されず、通常のユーザーとしてコマンドを実行できるようになります(パスワードを知らなくても済みます)。
$ apt-get update $ apt-get upgrade $ shutdown -h now
答え2
短い答え:あなたできない管理コマンドを実行せずに管理コマンドを実行します。
- Sudoまたは
- ルートです。
NOPASSWD
長い答え:rootとしてログインしているか/etc/sudoers
ログインしている必要があります。バラよりhttps://askubuntu.com/questions/147241/execute-sudo-without-password。
visudo
次に、1行を追加します。
username ALL=(ALL) NOPASSWD: ALL
要求どおりに特定のプログラムを実行したい場合バイナリ使用できるファイル
chown root:wheel /usr/binary
chmod u+s /usr/binary
ただし、sudoなしでrootとして実行したいプログラムがシェル(またはPython、awk、Perl)の場合は実行できません。
罠に気をつけてください。私の基本的なUbuntuには/usr/bin/shutdown
トラップがあります/sbin/systemctl
。
上記のchmod / chownを適用する前に、後者を前者にコピーする必要があります。