動作するPHPスクリプトがありますexec("bash /path/to/list.sh $dir", $out);
その内容list.sh
は...
#!/bin/bash
sudo /usr/bin/ls -a1 $@ 2>&1
rootでlsを実行する権限をApacheに付与しました。これは sudoers ファイルのエントリです。
www-data ALL=(ALL) NOPASSWD: /usr/bin/ls *
/home/.
ただし、スクリプトはまだ特定のフォルダにアクセスできません/home/
。
drwxr-xr-x. 40 root root 4096 Jun 5 08:24 home
ls -l
コマンドから。
実行しようとすると、レッスンを返し、すでにbash /path/to/list.sh /home
入力したsudo
パスワードにもかかわらずパスワードを要求します。ファイルを次に置き換えるNOPASSWD
か、完全に失敗した場合www-data
sudoers
apache
all
/usr/bin/ls: cannot open directory /./home/: Permission denied.
私はこれに本当に立ち往生しているので、どんな助けでも大いに感謝します。
ベストアンサー1
中の点はdrwxr-xr-x.
SELinuxを使用していることを示しています。として実行するには問題はありませんが、sudo
カーネルはApacheプロセスの権限を制限しすぎて、その刑務所から逃げることもできません。ls
root
sudo
私はこの問題を解決する方法を教えてくれるほどSELinuxに精通していませんが、SELinuxを無効にするとこのスクリプトは機能します。