私のサムドライブをイメージとして保存するバックアップスクリプトを作成しようとしています。自動的に作成します。私はいつもサムドライブがリストされていることを見て、/dev/sdb
それをgzipで圧縮されたtarballとして保存するスクリプトを作成しました。
複製しようとして、dd
次のエラーが見つかりました。
dd: failed to open ‘/dev/sdb’: Permission denied
これがただ偶然かどうか疑問に思ってcat
コマンドをパイプしようとしましたが、次のdd
エラーが発生しました。
cat: /dev/sdb: Permission denied
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000620078 s, 0.0 kB/s
もちろん、私はスーパーユーザーなので、sudo
これを行うことができます。ただし、これによりスクリプトの自動要素が削除されます。
デバイスを変更しない場合、なぜスーパーユーザー権限が必要なのですか?また、この問題を解決する方法はありますか?
答え1
Unix/Linux システムはマルチユーザーです。元のストレージデバイスへの読み取りアクセス権を持つ人は、ファイル所有者とその権限に関係なく(もちろん暗号化されたファイルシステムのモジュールとして)そのデバイス上のすべてのファイルを読み取ることができます。したがって、伝統的に、rawデバイスはroot
管理グループ(orなど)のメンバーにのみアクセスを許可し、信頼できる管理ユーザーまたはバックアップジョブユーザーをそのグループに配置できます。operator
disk
udevを実行しているGNU / Linuxディストリビューションで、フロッピーやテープ以外の50-udev-default.rules
すべてのブロックとSCSIデバイスをグループに入れ、グループに読み取り/書き込み権限を付与します。したがって、考えられる解決策の1つは、このグループで直接編集を使用するか、自分自身を追加することです。ログアウトしてもう一度ログインしてください。/dev
disk
usermod
/etc/group
答え2
デバイスを読むために管理者権限が必要なのはなぜですか?
まず、ここにいくつかの質問があります。
mount
物理ストレージデバイスとここに含まれるパーティションを管理します。- そのファイルにアクセスして操作します。
ファイルシステムがext2、3、4などの権限ベースの場合、権限はファイルごとに定義されます。
ユーザーにデバイスをインストールするために特別な管理権限が必要な理由には、いくつかの理由があります。この理由は、ビジネスタイプの状況に適用される可能性が高く、個人のコンピューティングには適用される可能性が低くなります。もちろん、まだ関連性があるかもしれません。
- プログラムの読書乱用を防止します。 ディスクがマウントされると、信頼できないプログラムの完全なコレクションを実行できるようになり、オペレーティングシステムを乱用する可能性があります。システムを管理している場合、通常のユーザーが自分のディスクから自分のプログラムをアップロードできない場合、これは起こらないと確信できます。
- 機密秘密データの書き込み/保存 システムに会社の秘密またはユーザーのパスワードがあり、誰かが承認されていないストレージデバイスにアクセスできる場合は、それらをコピーできます。
スクリプト全体をsudoとして実行し、sudo
スクリプト内から通常のユーザーに戻してrootとして実行したくないコマンドを実行すると、sudoの問題を解決できます。できるこうしてください)
文書:スクリプトファイル
#!/bin/sh
# this dd command now works
dd if=<source> of=<target> bs=<byte size>
# normal cammand you want to run as "mathmaniac" user
sudo -u "MathManiac" bash -c "touch foo.bar"
したがって、次のコマンドを使用してこのスクリプトを実行できます。
sudo ./script.sh
高速で汚れているが一般的に推奨されない別の方法は、単にスクリプト内のコマンドの前にsudoを置くことです。インタプリタがこれを検出すると、sudo
スクリプトの実行を停止し、続行する前にsudoパスワードを要求します。
答え3
edit fstabを使用してroot権限なしでファイルシステムをマウントできますが、これはブロックデバイスのイメージを提供しません。
バックアップスクリプトがパスワードを入力しなくても特定のコマンドをsudoできるように、sudoersファイルを編集できます。