回答:
はい。ここにあり--help
ます:
$ su --help
Usage: su [options] [LOGIN]
Options:
-c, --command COMMAND pass COMMAND to the invoked shell
-h, --help display this help message and exit
-, -l, --login make the shell a login shell
-m, -p,
--preserve-environment do not reset environment variables, and
keep the same shell
-s, --shell SHELL use SHELL instead of the default in passwd
そして、いくつかのテスト(アカウントのsudo
パスワードがわからないので使用しましたnobody
)
$ sudo su -c whoami nobody
[sudo] password for oli:
nobody
コマンドが引数を取るときは、引用符で囲む必要があります。そうしないと、奇妙なことが起こります。ここで私は-rootとして- 完全なコマンドを引用せずに/ home / oli(oli)にディレクトリを作成しようとしています:
# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'
フラグmkdir
の値としてのみ読み取られ、ユーザー名として-c
使用しようとし/home/oli/java
ています。引用すると、うまくいきます:
# su -c "mkdir /home/oli/java" oli
# stat /home/oli/java
File: ‘/home/oli/java’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 811h/2065d Inode: 5817025 Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/ oli) Gid: ( 1000/ oli)
Access: 2016-02-16 10:49:15.467375905 +0000
Modify: 2016-02-16 10:49:15.467375905 +0000
Change: 2016-02-16 10:49:15.467375905 +0000
Birth: -
注:「スクリプトの所有者をルートとして設定しています」は何もしません。setuidビットが設定されていても動作しません
ただし、実際にルートとしてスクリプトを実行していると仮定すると、を使用できますsudo
。su
主にユーザーを切り替えるためのものですが、sudo
他のユーザーとしてコマンドを実行するためのものです。-u
旗はあなたのようにコマンドを実行するユーザーを指定できます:
sudo -u hudson command
sudo
あなたは、単にこれを取得することができますroot is not in the sudoers file
。どの作るsu - <username> -c "command to run"
唯一のオプションを。
sudo -u kilgore mv this that
)
sudo cat /etc/passwd | grep user-abc
。次のようなものが表示された場合user-abc:x:994:994::/home/user-abc:/bin/false
、機能しません。これは、最後の部分「/bin/false
」がそのユーザー用のシェルがないことを意味するためです。