FedoraサーバーにSCPを実行すると、ユーザーはファイルのタイムスタンプを変更できないことに関するエラーを繰り返し発生します(「設定時刻:操作は許可されていません」)。ユーザーはファイルの所有者ではありませんが、セキュリティ上の理由から、このユーザーにファイルをchown
することはできません。ユーザーはSudo
できますが、これはSCP/FTPクライアントを介して行われているため、これを行う方法もありません。そして最後に、このユーザーにrootアクセス権を与える必要はなく、タイムスタンプを設定する必要があるrsyncやWinSCPなどの同期を使用できるようにします。
ユーザーは、関連するすべてのファイルとディレクトリに対する完全なrw
権限を持つグループの一部です。これらの特定のファイルをchown
することなく、ユーザーにtouch -t
へのアクセス許可を与える方法について何か考えはありますか?
詳細情報これはすべて、PHP単一開発者シナリオでの開発(つまり、SCMなし)での開発を有効にすることと関係しています。私はEclipseまたはNetBeansで作業しようとしていますPHPベース(WordPress)サイトのローカルコピーで作業しながら、ユーザーが開発サーバーで変更を「瞬時に」プレビューできるようにします。ユーザーはリモートで作業します。これまでのところ、自動同期のすべての試行は失敗しています- WinSCPを「監視フォルダ」モードで使用している場合でも、ローカルフォルダを監視し、常に日付/タイムスタンプを設定しようとするため、リモートディレクトリエラーまでの変更をアップロードしようとします。
ユーザーはSudoアクセス権を持っていますが、「root」の下で作業することは本当に良い考えではないと言われているので、この作業を行うためにrootとしてログインするだけでは不本意です。その上、それは必要ではないはずです。スーパーユーザー以外のユーザーが同じことをできるようにしたい-アカウント情報を使用してFTP接続を確立し、同期を介してリモートで作業できるようにしたい。したがって、ソリューションはルートアクセスのない人のために機能する必要があります。
私を驚かせるのは、私がどれほどの困難を抱えているかです。これらのソフトウェア(NetBeans、Eclipse、WinSCP)はすべて同期を可能にするように設計されており、すべてタイムスタンプを書き込もうとします。だからそれは可能でなければならない。 WinSCPには「タイムスタンプの設定」をオフにするオプションがありますが、モニター/同期フォルダーを選択すると、このオプションは利用できなくなります(常に「オン」)。したがって、かなり標準的なものになるのはgotです。
Linuxに関しては完全に馬鹿で、開発の「サーバー管理者」であることを考えると、それは私がやっていることや、私が(誤って)構成したことのような馬鹿げたものであるとしか想定できません。
概要簡単に言えば、ディレクトリへのグループr/wアクセス権を持つすべてのユーザーが、SCPを介してそのディレクトリ内のファイルのタイムスタンプを変更できるようにしたいと考えています。
touch
を使用して、またはより一般的には基本的なシステムコール utime
を使用してファイルの変更時刻を変更しようとすると、 2つのケース。
--omit-dir-times
(-O
)を渡すことで、rsyncにディレクトリ時間を気にしないように指示できます。これはすべて、PHP開発を単一の開発者シナリオで(つまり、SCMなしで)有効にすることと関係しています。
はい、そこで停止します。開発者が1人だけだからといって、SCMを使用するべきではないという意味ではありません。 SCMを使用する必要があります。開発者にファイルをチェックインしてもらい、「デプロイ」ボタンを押してSCMからライブディレクトリにファイルをチェックアウトする方法を開発者に提供します。
SCMを使用すべきでない技術的な理由はまったくありませんが、人間的な理由がある可能性があります。これらのファイルに取り組んでいる人が自分自身を「開発者」と表現している場合は、SCMを使用する必要があります。しかし、これが技術者ではない人がドキュメントをプッシュする場合、SCMは複雑すぎる可能性があります。 FTPまたはSSH経由でファイルをプッシュしてください。これが機能する方法は3つあります。
rsync
には時間を同期しないオプションがあります。 Scpはあなたがそれを言わない限りそうしません。私はWinSCPを知りませんが、おそらくそれも可能です。Apache
ユーザーが所有するファイルに入力する際に柔軟性が必要な場合、通常のアプローチは、ユーザーにApache
としてのSSHアクセスを許可することです。 easyアプローチは、ユーザーにSSH秘密鍵を作成させ、対応する公開鍵を~Apache/.ssh/authorized_keys
に追加させることです。これは、ユーザーがApache
ユーザーとして任意のコマンドを実行できることを意味します。とにかくユーザーにSudo権限を与えても大丈夫なので、あなたの場合は問題ではありません。より多くの制限を課すことは可能ですが、それほど簡単ではありません(異なる名前、同じユーザーID、制限されたシェル、およびchroot jailを持つ別個のユーザーデータベースエントリが必要です。詳細は別の質問にありますが、これはすでに説明されている可能性がありますこのサイトまたは Server Fault )。¹ または、空のファイルの場合は、バイトを書き込んでから切り捨てます。
² 追加の合併症を除いて、私が知っているものはここでは適用されません。
次のように、リモートエンドでSudoを使用するようにrsyncを設定できます。
rsync -ave ssh --rsync-path="Sudo rsync" /source/ user@Host:/dest/